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之集合(set)
Sep 24 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
python数据结构之图的实现方法
Jul 08 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
python 读取数据库并绘图的实例
Dec 03 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
php抓即时股票信息
2006/10/09 PHP
php创建多级目录代码
2008/06/05 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php生成mysql的数据字典
2016/07/07 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
php中使用websocket详解
2016/09/23 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
javascript中new关键字详解
2015/12/14 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
国际贸易专业自荐信
2014/06/10 职场文书
国庆节慰问信
2015/02/15 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python