工作需要写一个程序调用菜鸟物流云五级地址查询api,此处决定用python实现。

调用实例如图:

接口文档:

先申请获得appkeyresourceid:

需要查询的数据集

读取文件存入一个list:

1 def get_address():
2     try:
3         with open(os.getcwd() + r'\address.txt', 'r') as f:
4             address = f.readlines()
5         return address
6     except:
7         print('打开文件失败')
8         return ''

构造请求参数:

1 def get_raw_input(address):
2     raw_input = {
3         "address": address,
4         "limit": "20"
5     }
6     return raw_input

构造公共请求参数:

1 def get_param(sign, content):
2     param = {
3         'msg_type': 'CNDZK_ADDRESS_QUERY',
4         'data_digest': sign,
5         'logistic_provider_id': 'd0119848ab......e1df5d8d6dc149',
6         'logistics_interface': content
7     }
8     return param

计算请求签名(MD5值算法与base64编码):

1 def get_data_digest(inputs, keys):
2     m1 = hashlib.md5()
3     m1.update((inputs + keys).encode('utf-8'))
4
5     # base64.b64encode(m1.hexdigest()) 得到错误值!!!
6     return base64.b64encode(m1.digest())

此处踩到几个坑卡了很久,主要是m1.hexdigest()与m1.digest()的不同,导致计算出的结果与java,js算出的不同

一开始以为是str转bytes的问题,注意python的str.encode('utf-8')与java的getBytes()结果在显示上有所不同(前者返回bytes类型,后者返回byte[]类型)

请求调用api并写入文件:

 1 address_list = get_address()
 2
 3 for x in address_list:
 4     # unicode形态转中文,去掉空格(否则查不出)
 5     inputs = json.dumps(get_raw_input(x)).encode('utf-8').decode('unicode_escape').replace(' ', '')
 6
 7     result = requests.post(url, data=get_param(get_data_digest(inputs, keys), inputs), headers=headers)
 8     result = result.content.decode(encoding='utf-8')
 9     # print(result)
10     results = results + result + '\r\n'
11
12
13 try:
14     with open(os.getcwd()+r'\result.txt', 'w') as f:
15         f.write(results)
16         print("写入成功")
17 except:
18     print("写文件失败")

此处又踩到一个小坑-。-,由于python3.x的str类型中文数据默认采用unicode编码显示,所以会得到中文变成\u...的数据,导致查询失败

json.dumps()将dict转化为json字符串返回,先utf-8编码为bytes类型

再用decode('unicode_escape')解码让中文字符正常显示

同时请求参数中有空格也会导致查询失败(阿里api文档太简单什么都没说,参数只能自己慢慢调,差评)

所以此处用replace(' ','')除去空格

得到结果集:

完整代码:

 1 # coding:utf-8
 2 # by NeilShi 11/29/2017
 3 import requests
 4 import hashlib
 5 import base64
 6 import json
 7 import os
 8
 9
10 # 'appkey': '154430',
11 # 'AppSecret': 'S7ib51Kp5......Qd10Lt4490QTwpr',
12 # 资源:d0119848ab5......df5d8d6dc149
13
14 url = 'http://link.cainiao.com/gateway/link.do'
15 keys = 'S7ib51Kp5O......d10Lt4490QTwpr'
16
17 headers = {
18     'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
19 }
20
21 results = ''   # 存放结果集
22
23
24 def get_address():
25     try:
26         with open(os.getcwd() + r'\address.txt', 'r') as f:
27             address = f.readlines()
28         return address
29     except:
30         print('打开文件失败')
31         return ''
32
33
34 def get_raw_input(address):
35     raw_input = {
36         "address": address,
37         "limit": "20"
38     }
39     return raw_input
40
41
42 def get_param(sign, content):
43     param = {
44         'msg_type': 'CNDZK_ADDRESS_QUERY',
45         'data_digest': sign,
46         'logistic_provider_id': 'd011984......d7ae1df5d8d6dc149',
47         'logistics_interface': content
48     }
49     return param
50
51
52 def get_data_digest(inputs, keys):
53     m1 = hashlib.md5()
54     m1.update((inputs + keys).encode('utf-8'))
55
56     # base64.b64encode(m1.hexdigest()) 得到错误值!!!原因未知
57     return base64.b64encode(m1.digest())
58
59
60 address_list = get_address()
61
62 for x in address_list:
63     # unicode形态转中文,去掉空格(否则查不出)
64     inputs = json.dumps(get_raw_input(x)).encode('utf-8').decode('unicode_escape').replace(' ', '')
65
66     result = requests.post(url, data=get_param(get_data_digest(inputs, keys), inputs), headers=headers)
67     result = result.content.decode(encoding='utf-8')
68     # print(result)
69     results = results + result + '\r\n'
70
71
72 try:
73     with open(os.getcwd()+r'\result.txt', 'w') as f:
74         f.write(results)
75         print("写入成功")
76 except:
77     print("写文件失败")

转载于:https://www.cnblogs.com/neilshi/p/7920227.html

阿里菜鸟物流云API调用--python相关推荐

  1. 菜鸟物流云是如何帮助快递合作伙伴解决双11巨大业务负荷的?

    物流云双11 双11前,菜鸟物流云共接入12家合作伙伴,全部参加双11大促活动,作为物流云的首次双11,尤其是经过了快递公司的大考经验,事实证明项目是靠谱的. 双11前已经整体上云的快递合作伙伴2家, ...

  2. 阿里云-视频点播服务API调用

    视频点播服务 最近公司项目需要用到视频播放及管理,多放选型后准备采用阿里云视频点播服务(公司一直用阿里系) 购买了视频点播存储包和视频点播流量包 首先存储配置 配置管理 -> 媒资管理配置 -& ...

  3. ChatGPT API调用python和脚本实现

    Chat GPT 由于其独特.近乎准确且类似人类的响应,如今在互联网上引起了过多的讨论.本文讨论如何通过 Python 代码连接到 Chat GPT API. 如果需要用website访问chatGP ...

  4. api调用 python 验证码_Python短信验证码接口调用demo

    基于创蓝253云通讯品台的Python短信验证码接口调用demo !/usr/local/bin/python -- coding:utf-8 -- Author: jacky Time: 14-2- ...

  5. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

  6. 在Java中调用Python,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 写在 ...

  7. 腾讯文智自然语言处理介绍与情感分析API调用

    一.产品概述 文智中文语义开放平台是基于并行计算系统和分布式爬虫平台,结合独特的语义分析技术,一站式满足用户NLP.转码.抽取.全网数据抓取等中文语义分析需求的开放平台.用户能够基于平台对外提供的Op ...

  8. 恋爱物语api 表白、讨好、唠嗑语句大全

    恋爱物语,表白.讨好.唠嗑语句大全,恋爱物语api根据选择类型和数量返回内容. 接口名称:恋爱物语api 接口平台:免费接口 接口地址:http://japi.juhe.cn/love/list.fr ...

  9. 阿里云物联网平台python开发手册_阿里云物联网平台之云端API调用(即云端开发教程)...

    本文介绍如何调用物联网平台的云端API,很多时候控制台上操作不太方便,需要通过API调用来完成或者通过调用API封装接口,以做到二次开发等.如产品管理,设备管理,规则创建等.分别介绍通过common ...

最新文章

  1. 使用pyinstaller打包pyqt程序
  2. C++继承中关于子类构造函数的写法
  3. C++单例模式简单实现
  4. Java PipedInputStream available()方法与示例
  5. PHP开发入行真功夫(含DVD光盘1张)
  6. windows下Redis的安装和使用
  7. GitHub项目推荐
  8. wordpress七步曲
  9. luogu1600天天爱跑步
  10. 回撤率 python_最大回撤用python怎么计算
  11. http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html
  12. WPF 编程入门 --WPF概述
  13. 软件测试的十六种测试类型
  14. python第一个程序:计算体脂率
  15. Linux下利用nc命令来监控检测服务器的端口使用情况
  16. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用
  17. 安卓设置keychain_iOS 开发keychain 使用与多个APP之间共享keychain数据的使用
  18. 1024 的那天,我这个三线的程序员是这样度过的
  19. u-boot.lds文件诠释
  20. android手机做个人网盘,[干货Get!]Android搭建Cloudreve私人云盘 来自 kindyear

热门文章

  1. 密码学之欧几里德拓展算法 python代码实现
  2. 机器学习 - 语音识别
  3. 美国价格指数api调用
  4. 服务器系统镜像虚拟光驱,什么是镜像与虚拟光驱
  5. 永中office2012安装、卸载和遇到的问题
  6. ICPC North America Qualifier Contest 2015 按通过率从 J开始
  7. Centos7的KVM安装配置详解
  8. 活动 - Activities
  9. DiskGenius 数据恢复教程,丢失的学习资料有救了
  10. 管理学理论(SWOT分析等八种理论)