100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python饿了么商家开放平台模拟网页http请求实战

python饿了么商家开放平台模拟网页http请求实战

时间:2022-10-10 01:51:16

相关推荐

python饿了么商家开放平台模拟网页http请求实战

本人工科小白一枚,毕业做运营,为了工作方便研究起了py,总结了一下饿了么开放平台API的python方法,希望各路大神批评指正探讨。

首先当然是注册开放平台账号了,我是直接问主管要来了开放平台,下辖100多家的某西式餐饮连锁机构的饿了么商家账号,可以直接去管理中心申请开发应用,商家有店都可以的,不像美团餐饮开放条条框框多的要命。商家账号直接申请的好处是授权简单,少了很多步骤。服务商和普通个人(也作为服务商)需要商家授权,具体开放平台有介绍==》点此了解

接下来就到了最激动人心(最恶心的反复调试)环节了,因为api的算法是按照javascript来的,应用实例是参考具有SDK的,对于使用普通http协议的开发者很不友好。

话不多说上代码

import base64import jsonimport requests#方便http请求的第三方库,要pip安装import uuidimport timeimport hashlib#导入hash加密模块#需要的模块都在了key=""secret=""#这两个参数管理中心查看应用里面都有,自己复制过来#接下来注意了,第一大坑!!!!!Authorization=base64.b64encode((key+":"+secret).encode('utf-8')).decode("utf-8")#base64加密只有字节码可以编码,编码后解码字节才能变回字符串才可以传参#注:py的base64是小写b开头,需要转化为Basic开头才可以,python需要人工用字符串拼接构造为浏览器xhr那样的请求,就问你坑不坑,不加"Basic "字符串报错header={"Authorization":"Basic "+Authorization,"Content-Type": "application/x-www-form-urlencoded"}data={"grant_type":"client_credentials","scope":"all"}#个人账户grant_type"参数就是"client_credentials"res=requests.post("https://open-api.shop.ele.me/token",data=data,headers=header)#参数顺序不能调换accesstoken=json.loads(res.text)["access_token"]#json模块的load函数解析json字符串为字典#接下来就是构造函数方便调用啦def commoneleopenapi(actionparams,action):第一个参数为api特有参数,直接api测试工具复制参数就行,第二个为接口名称,eleme.开头的那个body={"token": accesstoken,"nop": "1.0.0","metas": {"app_key": key,"timestamp":timestamp#使用time模块的time.time()函数获取带小数10位秒级时间戳,然后Int一下获取十位整形时间戳},"params": actionparams,"action": action,#接口名字"id": str(uuid.uuid4()),#这就是所谓的requestid,通用唯一标识符,开放平台提问别忘了带上这个,他们可以查本次请求内容与过程"signature": ""}body["params"]=actionparamsnewdic={}#构造签名所需元素newdic.update(body["params"])newdic.update(body["metas"])newlist=[]#构造新列表准备对签名参数进行排序for (key,value) in newdic.items():newlist.append(str(key+'='+json.dumps(value)))#json.dumps等同于js中json.stringifynewlist.sort()#首字母排序#开始拼接md5字符串md5str=body["action"]+body["token"]for item in newlist:md5str+=itemmd5str+=secret#字符串拼接完毕,开始md5编码m=hashlib.md5()m.update(md5str.encode('utf-8'))#MD5编码必须传入字节格式psw = m.hexdigest()psw=psw.upper()#md5编码的字符串中字母转化为大写body["signature"]=pswheader1={"Content-Type": "application/json;charset=utf-8"}return json.loads(requests.post("https://open-api.shop.ele.me/api/v1",data=json.dumps(body),headers=header1))#我测试的时候反正是直接用了,严谨点的话还是要判断返回的status.code是否200这样的然后设定一定的callback#饿了么开放平台感觉还不是很完善,比如评论最多只能获取20条,比如获取店铺活动商品居然返回为空???

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。