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 文件与目录操作
Dec 24 Python
python生成随机mac地址的方法
Mar 16 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
详解python的webrtc库实现语音端点检测
May 31 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python3 replace()函数使用方法
Mar 19 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
Python基础之常用库常用方法整理
Apr 30 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
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
yii中widget的用法
2014/12/03 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python两种遍历字典(dict)的方法比较
2014/05/29 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
外企测试工程师面试题
2015/02/01 面试题
六一儿童节新闻稿
2015/07/17 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
Python find()、rfind()方法及作用
2022/12/24 Python