python实现比对美团接口返回数据和本地mongo数据是否一致示例


Posted in Python onAugust 09, 2019

本文实例讲述了python实现比对美团接口返回数据和本地mongo数据是否一致。分享给大家供大家参考,具体如下:

应用背景:美团平台商品的上下架状态、库存、售价,和mongo库存储的是否一致。

tools文件内容

# -*- coding: utf-8 -*-
import hashlib
import time
import requests
def get_md5(string):#返回字符串md5加密后的串
  hl = hashlib.md5()
  hl.update(string.encode('utf-8'))
  return hl.hexdigest()
def get_tamp():#获取当前的时间戳
  t = time.time()
  return int(t)
def req_get_result(api_url,api_data):#get方法请求函数
  req_get = requests.get(api_url,api_data)
  result = req_get.json()
  return result
def req_post_result(api_url,api_data):#post方法请求函数
  req_post = requests.post(api_url,data=api_data)
  result = req_post.json()
  return result
def file_edit(file_name,wr_str):#写入txt文件
  f1 = open(r'D:\%s.txt'%file_name,'a')
  f1.write(wr_str+'\n')
  f1.close()
def param_sort(param_dict):#传入字典,返回排序后并且连接好的字符串
  keys_list = sorted(param_dict.keys())
  rb_str = ''
  for k in keys_list:
    key_value = k + '=' + str(param_dict[k])
    rb_str = rb_str + key_value +'&'
  rb_str = rb_str[0:-1] #不保留字符串末尾的&
  return rb_str

下面是主逻辑

# -*- coding: utf-8 -*-
from tools import get_tamp,get_md5,req_get_result,file_edit,param_sort
import conf
import datetime
import time
from pymongo import MongoClient
app_id = conf.appinfo[1]['app_id']
secret = conf.appinfo[1]['secret']
def get_shop_id_list(app_id,secret):#获取门店id的列表
  api_url = 'http://waimaiopen.meituan.com/api/v1/poi/getids'
  timestamp = get_tamp()
  params_str = api_url+'?app_id=%s×tamp=%s'%(app_id,timestamp)
  sig = get_md5(params_str + secret)
  api_data = {
    'app_id':app_id,
    'sig':sig,
    'timestamp':timestamp,
  }
  result = req_get_result(api_url,api_data)
  shop_id_list = result['data']
  del shop_id_list[-1]#去掉最后一个非门店id元素
  return shop_id_list
def get_shop_detail(shop_id):#根据门店id,返回门店名称
  api_url = 'http://waimaiopen.meituan.com/api/v1/poi/mget'
  timestamp = get_tamp()
  app_poi_codes = shop_id
  params_str = api_url+'?app_id=%s&app_poi_codes=%s×tamp=%s'%(app_id,app_poi_codes,timestamp)
  sig = get_md5(params_str + secret)
  api_data = {
  'app_id':app_id,
  'sig':sig,
  'timestamp':timestamp,
  'app_poi_codes':app_poi_codes
  }
  result = req_get_result(api_url,api_data)
  shop_name = result['data'][0]['name']
  return shop_name
def get_goods(shop_id):#根据门店id,查询门店商品,返回列表
  api_url = 'http://waimaiopen.meituan.com/api/v1/retail/list'
  timestamp = get_tamp()
  app_poi_code = shop_id
  params_str = api_url+'?app_id=%s&app_poi_code=%s×tamp=%s'%(app_id,app_poi_code,timestamp)
  sig = get_md5(params_str + secret)
  api_data = {
  'app_id':app_id,
  'sig':sig,
  'timestamp':timestamp,
  'app_poi_code':app_poi_code
  }
  result = req_get_result(api_url,api_data)
  return result['data']
if __name__ == '__main__':
  shop_ids = get_shop_id_list(app_id,secret)
  file_name = datetime.datetime.now().strftime('%Y.%m.%d.%H.%M.%S')
  client = MongoClient(conf.mongo_online,conf.mongo_port)
  db = client['oh-product']
  collection = db.outerShopSku
  for shop_id in shop_ids:
    shop_name = get_shop_detail(shop_id)
    goods_list = get_goods(shop_id)
    wirte_shop_info = shop_id + '--' + shop_name + str(len(goods_list)) +'个商品'
    file_edit(file_name,wirte_shop_info)
    for i in range(0,len(goods_list)):
      skus = eval(goods_list[i]['skus'])[0]
      sku_id = skus['sku_id']
      result = collection.find({'channel':'MeiTuan','outerShopId':shop_id,'outerSkuId':sku_id})
      shopPrice = result[0]['shopPrice'] #int,单位:分
      stock = result[0]['stock']     #float
      is_sold_out = result[0]['status']  #str online/offline
      if round(float(skus['price'])*100) != shopPrice:
        wirte_price = sku_id+"售价不一致,美团:"+skus['price']+',数据库:'+str(shopPrice)
        file_edit(file_name,wirte_price)
      if float(skus['stock']) != stock:
        wirte_stock = sku_id+"库存不一致,美团:"+skus['stock']+',数据库:'+str(stock)
        file_edit(file_name,wirte_stock)
      if goods_list[i]['is_sold_out'] == 0:
        is_sold = 'offline'
      else:
        is_sold = 'online'
      if is_sold != is_sold_out:
        wirte_sold = sku_id+":状态不一致,美团:"+is_sold+',数据库:'+is_sold_out
        file_edit(file_name,wirte_sold)
      print('已完成',sku_id)
  client.close()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
进一步了解Python中的XML 工具
Apr 13 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
玩转python爬虫之正则表达式
Feb 17 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
Pycharm连接远程服务器并实现远程调试的实现
Aug 02 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
wxPython实现带颜色的进度条
Nov 19 Python
基于python纯函数实现井字棋游戏
May 27 Python
Python实现机器学习算法的分类
Jun 03 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 Python
Pandas 数据编码的十种方法
Apr 20 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 #Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 #Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 #Python
基于django ManyToMany 使用的注意事项详解
Aug 09 #Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 #Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 #Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 #Python
You might like
php单件模式结合命令链模式使用说明
2008/09/07 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
解析php中const与define的应用区别
2013/06/18 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python 求定积分和不定积分示例
2019/11/20 Python
python程序如何进行保存
2020/07/03 Python
一份全面的PHP面试问题考卷
2012/07/15 面试题
联片教研活动总结
2014/07/01 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
民主生活会汇报材料
2014/12/15 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android