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 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
对python Tkinter Text的用法详解
Oct 11 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
如何在python中写hive脚本
Nov 08 Python
Python接口自动化判断元素原理解析
Feb 24 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
python如何爬取动态网站
Sep 09 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中单例模式与工厂模式详解
2017/02/17 PHP
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JavaScript中Function详解
2015/02/27 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python深入学习之装饰器
2014/08/31 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
new修饰符是起什么作用
2015/06/28 面试题
会计专业的自荐信
2013/12/12 职场文书
大学生求职信例文
2014/06/29 职场文书
实习协议书范本
2014/09/25 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
收银员岗位职责范本
2015/04/07 职场文书
作弊检讨书范文
2015/05/06 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis