首先在快遞鳥申請一個賬號:http://www.kdniao.com/
快遞鳥的賬號是申請了就能用,每天免費查詢3000次
然後在我的會員中心查看自己的用戶ID 和 API key
然後在及時查詢中可以找到對接文檔和一些實例,我下面寫的python對接的實例
import json
import urllib
import urllib.request
import hashlib
import base64
import urllib.parse
# 此處爲快遞鳥官網申請的帳號和密碼
APP_id = "1342342" #更換成自己的id
APP_key = "3edf3-a6sd16-43sdf5c-bsd817-6a85af8e64b5" #更換成自己的key
def encrypt(logistic_code, app_key):
"""數據內容簽名:把(請求內容(未編碼)+AppKey)進行MD5加密,然後Base64編碼"""
m = hashlib.md5()
m.update((logistic_code+app_key).encode("utf8"))
encode_sign = m.hexdigest()
data_sign = base64.b64encode(encode_sign.encode(encoding='utf-8'))
return data_sign
def send_post(url, data):
"""發送post請求"""
post_data = urllib.parse.urlencode(data).encode('utf-8')
# 設置請求頭
header = {
"Accept": "application/x-www-form-urlencoded;charset=utf-8",
"Accept-Encoding": "utf-8"
}
req = urllib.request.Request(url, post_data, header)
get_data = (urllib.request.urlopen(req).read().decode('utf-8'))
return get_data
def get_company(logistic_code, app_id, app_key, url):
"""獲取對應快遞單號的快遞公司代碼和名稱"""
data1 = {'LogisticCode': logistic_code}
d1 = json.dumps(data1, sort_keys=True)
data_sign = encrypt(d1, app_key)
post_data = {
'RequestData': d1,
'EBusinessID': app_id,
'RequestType': '2002', # 單號識別接口編碼
'DataType': '2',
'DataSign': data_sign.decode()
}
json_data = send_post(url, post_data)
sort_data = json.loads(json_data)
return sort_data
def get_traces(logistic_code, shipper_code, app_id, app_key, url):
"""查詢接口支持按照運單號查詢(單個查詢)"""
data1 = {'LogisticCode': logistic_code, 'ShipperCode': shipper_code}
d1 = json.dumps(data1, sort_keys=True)
data_sign = encrypt(d1, app_key)
post_data = {
'RequestData': d1,
'EBusinessID': app_id,
'RequestType': '1002', # 即時查詢接口編碼
'DataType': '2',
'DataSign': data_sign.decode()
}
json_data = send_post(url, post_data)
sort_data = json.loads(json_data)
return sort_data
def recognise(express_code):
"""輸出數據"""
url = 'http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx'
data = get_company(express_code, APP_id, APP_key, url)
print(data)
if not data['Shippers']:
print("未查到該快遞信息,請檢查快遞單號是否有誤!")
else:
trace_data = get_traces(express_code, data['Shippers'][0]['ShipperCode'], APP_id, APP_key, url)
print(trace_data)
if trace_data['Success'] == "false" or not trace_data['Traces']:
print("未查詢到該快遞物流軌跡!")
else:
str_state = "無軌跡"
if trace_data['State'] == '1':
str_state = '已攬收'
if trace_data['State'] == '2':
str_state = "在途中"
if trace_data['State'] == '3':
str_state = "已簽收"
print("目前狀態: "+str_state)
trace_data = trace_data['Traces']
for item in trace_data:
print(str(trace_data.index(item))+":", item['AcceptTime'], item['AcceptStation'])
print("\n")
return
code = 701934534553453 #快遞單號
if __name__ == '__main__':
recognise(code)