class ExpressQuery:
# 定义类属性记录单例对象引用
_instance = None
# 创建单例
def __new__(cls):
# 1. 判断类属性是否已经被赋值
if cls._instance is None:
cls._instance = super(ExpressQuery, cls).__new__(cls)
# 2. 返回类属性的单例引用
return cls._instance
def __init__(self):
self.host = 'https://wuliu.market.alicloudapi.com' # 阿里云接口url前缀
# 个人code,获取连接 https://market.console.aliyun.com/imageconsole/index.htm
# 购买连接 https://market.aliyun.com/products/56928004/cmapi021863.html
self.app_code = '************2db3f92ba75d32ad02'
def get_express_list(self):
# 获取快递type 缩写列表
path = '/getExpressList'
query = ''
url = self.host + path + '?' + query
new_url = quote(url, safe=string.printable)
request_list = urllib.request.Request(new_url)
request_list.add_header('Authorization', 'APPCODE ' + self.app_code)
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
response = urllib.request.urlopen(request_list, context=ctx)
content_ss = response.read()
if content_ss:
data_ss = content_ss.decode('UTF-8')
print(data_ss)
def get_express_info(self, express_num, express_name):
new_type = ""
for k, v in data_dict.items():
if v == express_name:
new_type = k
if not new_type:
return 0, {}, "快递公司名称有误!!!"
path = '/kdi'
query = 'no=%d&type=%s' % (express_num, new_type)
url = self.host + path + '?' + query
new_url = quote(url, safe=string.printable)
request_urllib = urllib.request.Request(new_url)
request_urllib.add_header('Authorization', 'APPCODE ' + self.app_code)
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
response = urllib.request.urlopen(request_urllib, context=ctx)
content = response.read()
if content:
data_str = content.decode('UTF-8')
data_info = eval(data_str)
if int(data_info["status"]) == 0:
return 200, data_info["result"], data_info["msg"]
else:
return int(data_info["status"]), data_info["result"], data_info["msg"]
else:
return 0, {}, "请求失败!!!"
快递type字典
{"AAEWEB": "AAE", "ARAMEX": "Aramex", "DHL": "DHL国内件", "DHL_EN": "DHL国际件", "DPEX": "DPEX",
"DEXP": "D速", "EMS": "EMS(国内和国际)", "EWE": "EWE", "FEDEX": "FEDEX", "FEDEXIN": "FedEx国际",
"PCA": "PCA", "TNT": "TNT", "UPS": "UPS", "ANJELEX": "安捷", "ANE": "安能快递", "ANEEX": "安能快递",
"ANXINDA": "安信达", "EES": "百福东方", "HTKY": "百世快递", "BSKY": "百世快运", "FLYWAYEX": "程光",
"DTW": "大田", "DEPPON": "德邦快递", "GCE": "飞洋", "PHOENIXEXP": "凤凰", "FTD": "富腾达", "GSD": "共速达",
"GTO": "国通快递", "BLACKDOG": "黑狗", "HENGLU": "恒路", "HYE": "鸿远", "HQKY": "华企", "JOUST": "急先达",
"TMS": "加运美", "JIAJI": "佳吉", "JIAYI": "佳怡", "KERRY": "嘉里物流", "HREX": "锦程快递",
"PEWKEE": "晋越", "JD": "京东快递", "KKE": "京广快递", "JIUYESCM": "九曳供应链", "KYEXPRESS": "跨越",
"FASTEXPRESS": "快捷", "BLUESKY": "蓝天", "LTS": "联昊通", "LBEX": "龙邦快递", "CAE": "民航",
"ND56": "能达", "PEISI": "配思航宇", "EFSPOST": "平安快递", "CHINZ56": "秦远物流", "QCKD": "全晨",
"QFKD": "全峰快递", "APEX": "全一", "RFD": "如风达", "SFC": "三态", "STO": "申通快递", "SFWL": "盛丰",
"SHENGHUI": "盛辉", "SDEX": "顺达快递", "SFEXPRESS": "顺丰", "SUNING": "苏宁", "SURE": "速尔",
"HOAU": "天地华宇", "TTKDEX": "天天", "VANGEN": "万庚", "WANJIA": "万家物流", "EWINSHINE": "万象",
"GZWENJIE": "文捷航空", "XBWL": "新邦", "XFEXPRESS": "信丰", "BROADASIA": "亚风", "YIEXPRESS": "宜送",
"QEXPRESS": "易达通", "ETD": "易通达", "UC56": "优速快递", "CHINAPOST": "邮政包裹", "YFHEX": "原飞航",
"YTO": "圆通快递", "YADEX": "源安达", "YCGWL": "远成", "YFEXPRESS": "越丰", "YTEXPRESS": "运通",
"YUNDA": "韵达快递", "ZJS": "宅急送", "ZMKMEX": "芝麻开门", "COE": "中国东方", "CRE": "中铁快运",
"ZTKY": "中铁物流", "ZTO": "中通快递", "ZTO56": "中通快运(物流)", "CNPL": "中邮", "YIMIDIDA": "壹米滴答",
"PJKD": "品俊快递", "RRS": "日日顺物流", "YXWL": "宇鑫物流", "DJ56": "东骏快捷", "AYCA": "澳邮专线",
"BDT": "八达通", "CITY100": "城市100", "CJKD": "城际快递", "D4PX": "递四方速递", "FKD": "飞康达",
"GTSD": "广通", "HQSY": "环球速运", "HYLSD": "好来运快递", "JAD": "捷安达", "JTKD": "捷特快递",
"JGWL": "景光物流", "MB": "民邦快递", "MK": "美快", "MLWL": "明亮物流", "PADTF": "平安达腾飞快递",
"PANEX": "泛捷快递", "QRT": "全日通快递", "QXT": "全信通", "RFEX": "瑞丰速递", "SAD": "赛澳递",
"SAWL": "圣安物流", "SDWL": "上大物流", "ST": "速通物流", "STWL": "速腾快递", "SUBIDA": "速必达物流",
"WJK": "万家康", "XJ": "新杰物流", "ZENY": "增益快递", "ZYWL": "中邮物流", "EUASIA": "欧亚专线",
"HEMA": "河马动力"}
调用
express = ExpressQuery()
status, data, message = express.get_express_info(780098068058, "申通快递")
a = ExpressQuery()
b = ExpressQuery()
print(id(a))
print(id(b))
print(id(express))
if status == 200:
print("正常")
else:
print("失败")
print("status=", status)
print("data=", data)
print("message=", message)