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学习笔记(二)基础语法
Jun 06 Python
深度剖析使用python抓取网页正文的源码
Jun 11 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
Python用threading实现多线程详解
Feb 03 Python
用python实现对比两张图片的不同
Feb 05 Python
Python爬虫使用代理IP的实现
Oct 27 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
Python图片处理之图片裁剪教程
May 27 Python
Python语言中的数据类型-序列
Feb 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
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
php判断是否为json格式的方法
2014/03/04 PHP
php导入模块文件分享
2015/03/17 PHP
php算法实例分享
2015/07/14 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
详解python时间模块中的datetime模块
2016/01/13 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
采购类个人求职的自我评价
2014/02/18 职场文书
项目转让协议书
2014/10/27 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书