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 合并文件的具体实例
Aug 08 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
在Python的循环体中使用else语句的方法
Mar 30 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
Python引用传值概念与用法实例小结
Oct 07 Python
python3.4实现邮件发送功能
May 28 Python
python使用tornado实现登录和登出
Jul 28 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
python3让print输出不换行的方法
Aug 24 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
php中的观察者模式
2010/03/24 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php单链表实现代码分享
2016/07/04 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
jquery获取radio值实例
2014/10/16 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
python opencv进行图像拼接
2020/03/27 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
HEMA法国:荷兰原创设计
2019/02/21 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
西式婚礼主持词
2014/03/13 职场文书
业务员岗位职责范本
2015/04/03 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
小学班级标语口号大全
2015/12/26 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers