我们可以通过requests来实现一个京东联盟开放平台API Client。因为京东联盟开放平台的API都有一个统一的形式和签名方法,所以可以通过一个比较简单的实现来编写一个通用的client,可以比较简单的根据开放平台的文档中的方法名和业务参数来直接进行实际的调用。

相关的代码实现如下(也可以在https://gist.github.com/socrateslee/76e91cb7beef6e0effa030b9e115333b看到):

import datetime
import requests
import hashlib
import json
import urllib.parseJD_API_ROOT = 'https://router.jd.com/api'class JdApiClient(object):def __init__(self, app_key, secret_key):self.app_key = app_keyself.secret_key = secret_keydef get_sign(self, params):params_list = sorted(list(params.items()), key=lambda x: x[0])params_bytes = (self.secret_key + ''.join("%s%s" % (k, v) for k, v in params_list) + self.secret_key).encode('utf-8')sign = hashlib.md5(params_bytes).hexdigest().upper()return signdef call(self, method, param_json, **kwargs):params = {"v": "1.0","method": method,"app_key": self.app_key,"timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"format": "json","sign_method": "md5"}if isinstance(param_json, (dict, list)):params["param_json"] = json.dumps(param_json)else:params["param_json"] = param_jsonparams['sign'] = self.get_sign(params)resp = requests.get(JD_API_ROOT, params=params, **kwargs)return resp

上面代码中,get_sign函数是用来参数中签名字段sign的,需要注意的是在Python 3中的bytes和str之间的编码和解码,call函数封装了requests来进行HTTP请求的发送,并且返回对应的Response对象,可以通过这个对象的.json()方法。将API接口返回的json转化成Python对象。

举例来说明这个client的使用方法,比如获取《腾讯传》的商品详细信息的代码为:

    import pprintclient = JdApiClient("<YOUR_APP_KEY>", "<YOUR_SECRET_KEY>")resp = client.call("jd.union.open.goods.promotiongoodsinfo.query",{'skuIds':'12072066'})pprint.pprint(json.loads(resp.json()['jd_union_open_goods_promotiongoodsinfo_query_response']['result']))

对应的结果为:

{'code': 200,'data': [{'cid': 1713,'cid2': 3266,'cid2Name': '管理','cid3': 3440,'cid3Name': '创业/商业史传','cidName': '图书','commisionRatioPc': 4.0,'commisionRatioWl': 4.0,'endDate': 1646064000000,'goodsName': '腾讯传(1998-2016)','imgUrl': 'http://img14.360buyimg.com/n1/jfs/t3946/50/446886753/186144/18672b2c/584fb368Nb5005598.jpg','inOrderCount': 411,'isFreeFreightRisk': 0,'isFreeShipping': 2,'isJdSale': 1,'isSeckill': 0,'materialUrl': 'http://item.jd.com/12072066.html','shopId': 1000098365,'skuId': 12072066,'startDate': 1573488000000,'unitPrice': 43.5,'vid': 1000098365,'wlUnitPrice': 43.5}],'message': '接口成功','requestId': '...'}

京东联盟的开放平台的Python客户端封装相关推荐

  1. 京东小程序开放平台,他来了

    京东服务覆盖10亿多用户和超过27万第三方商家.如何连接京东和商家生态体系,给C端消费者提供全链路一站式的优质服务体验,是京东高度关注的问题. 因此京东小程序开放平台作为京东战略项目应运而生,4月22 ...

  2. 百度网盘开放平台接入(Python)

    百度网盘开放平台接入(Python) 百度网盘开放平台接入链接:https://pan.baidu.com/union/doc/nksg0sbfs 接入流程 1.请在官网首页右上角找到登录入口,使用百 ...

  3. 京东小程序开放平台正式发布- 新服务!新体验!

    京东服务覆盖10亿多用户和超过27万第三方商家.如何连接京东和商家生态体系,给C端消费者提供全链路一站式的优质服务体验,是京东高度关注的问题. 因此京东小程序开放平台作为京东战略项目应运而生,4月22 ...

  4. 新浪微博开放平台开发-android客户端(2)

    引言 最近不是太忙,花了一些时间学习android的应用开发.经过两个星期的学习,学习的同时还写了很多的demo示例,可以从基本控件及基本动画效果等示例demo集合大放送,持续更新下载. 从这个星期开 ...

  5. 钉钉api 获取 accesstoken_钉钉开放平台第三方 Python SDK,快速实现钉钉API开发

    dingtalk-sdk 是一个钉钉开放平台的第三方 Python SDK, 实现了 企业内部开发 和 应用服务商(ISV)的 API. 企业内部开发 建议在使用前先阅读 钉钉开放平台文档 消息实体 ...

  6. 新浪微博开放平台开发-android客户端(3)

    引言 最近不是太忙,花了一些时间学习android的应用开发.经过两个星期的学习,学习的同时还写了很多的demo示例,可以从基本控件及基本动画效果等示例demo集合大放送,持续更新下载. 从这个星期开 ...

  7. 京东商城pop开放平台产品经理

    岗位职责: 1. 全面pop开放平台(实体部分所有产品线)产品策略制定,行业及竞争对手跟踪分析.市场调研.产品的数据及用户行为分析.目标设计.度量指标设计.盈利策略.营销组合策略等: 2.负责pop开 ...

  8. 视频字幕识别(百度AI开放平台OCR | python | opencv)

    目标:提取位于视频下方的字幕 机缘:某些要写报告的学习视频太长了orz,弄字幕来参考一下 难点: 调参(不同视频字幕对应参数会不同,但调整不大) 图片相似度比较(哈希算法,有更好的算法但我没用心找) ...

  9. python抓取京东联盟优惠券_[爬虫]使用python抓取京东全站数据(商品,店铺,分类,评论)...

    网上抓取京东数据的文章,现在要么无法抓取数据,要么只能抓取部分数据,本文将介绍如何抓取京东全站数据,包括商品信息.店铺信息,评论信息,分类信息等. -------------------------- ...

  10. 京东api接口php sdk,GitHub - ifwrong/jos-php-sdk: 京东php版本开放平台SDK

    php-jos-sdk v2版适用php5.4以上,非php5.4有使用说明 目录结构 /JosSdk.php自动加载助手类(当前就自动加载几个类,完全可以不用此助手) /stream主动通知实现,通 ...

最新文章

  1. undefined reference to 'pthread_create'问题解决(转)
  2. Yii 判断是不是post方式提交的数据
  3. 程序员职场的出路在哪里
  4. 妥了!微服务治理的困难,用 Serverless 来解决
  5. Angular Chart.js第三方库ng-chartjs基础使用
  6. Golang——指针的使用、数组指针和指针数组、指针与切片、指针与结构体、多级指针
  7. python引入redis_实操演练解读非关系型数据库—Redis
  8. ADO,ADO.NET,OLEDB,ODBC连接数据库的区别
  9. 【翻译】CodeMix使用教程(四):调试
  10. 深入原理64式:39 线性代数公式总结
  11. 深度学习视频数据集(动作识别):UCF-101
  12. Python3爬取搜狗微信公众号
  13. mtk平台dump系统分区
  14. OpenCV零基础从配置环境到读取图片,输出各种灰度腐蚀图,最后输出直方图,做矩阵运算等等
  15. Elasticsearch最佳实践之使用场景
  16. gts测试提示 Test failed due to unrecognized service account for this product, please submit an initial G
  17. 1000年出现了哪些闰年C语言,C语言判断“1000年―2000年”之间的闰年
  18. 本周内外盘行情回顾2022.4.24(下周提保、2205结束、节后美联储降息,预计波动加剧)
  19. 测试相机的软件叫什么,测年龄的app叫什么(测年龄的相机软件app)
  20. 基于android2.3.5系统:源码下载及android体系架构

热门文章

  1. 转载:如何给公司取英文名字
  2. python-selenium学习笔记:利用ec模块的定位方法,登陆百度并验证是否登陆成功
  3. 2010提升你幽默感的语句
  4. 安卓自定义悬浮按钮实现
  5. Apache Axis2项目的联合创始人总结30条架构原则
  6. 国内的邮箱哪最好用,个人的邮箱排名?
  7. excel表格打印每页都有表头_打印的表格只有第一页有标题?一键让每页都带表头标题...
  8. mysql32位的能装在64位的电脑上吗,32位处理器能装64位系统吗
  9. 项目开发成本高周期长 数维图低代码平台解决行业痛点
  10. [ArcGIS] Python计算Geometrical interval自然间断点 | jenkspy库