調用快遞鳥API查詢物流

首先在快遞鳥申請一個賬號:http://www.kdniao.com/

快遞鳥的賬號是申請了就能用,每天免費查詢3000次

然後在我的會員中心查看自己的用戶IDAPI 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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章