Spaces:
Running
Running
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
import json | |
import re | |
import time | |
import requests | |
def get_operator_by_track_id_baidu(track_id: str): | |
url = "https://alayn.baidu.com/express/appdetail/get_com" | |
params = { | |
"num": track_id | |
} | |
resp = requests.request( | |
"GET", | |
url=url, | |
params=params | |
) | |
if resp.status_code == 200: | |
match = re.search(r"\{.*\}", resp.text, flags=re.IGNORECASE) | |
if match is not None: | |
json_str = match.group(0) | |
js = json.loads(json_str) | |
message = js["message"] | |
if message == "fail": | |
return None | |
else: | |
company = js["data"]["company"] | |
return company | |
return None | |
def get_operator_by_track_id(track_id: str): | |
url = "https://trace.fkdex.com/auto/{}".format(track_id) | |
headers = { | |
# 不给出 Referer 时,它会生成随机的物流信息。 | |
"Referer": "https://www.ickd.cn/", | |
} | |
params = { | |
"mailNo": track_id, | |
} | |
resp = requests.request( | |
"GET", | |
url=url, | |
headers=headers, | |
params=params | |
) | |
print(resp.status_code) | |
print(resp.text) | |
if resp.status_code == 200: | |
js = resp.json() | |
exp_text_name = js["expTextName"] | |
exp_spell_name = js["expSpellName"] | |
message = js["message"] | |
return exp_spell_name | |
return resp.text | |
def get_express_delivery_information(track_id: str, four_digits: str = None, captcha: str = None): | |
""" | |
如果函数的名字叫作 “get_express_delivery_information” , | |
那么就需要一个同名 python 脚本 “get_express_delivery_information.py” , | |
同时其中应包含一个名为 “get_express_delivery_information” 的函数。 | |
https://www.ickd.cn/ | |
:param track_id: str, egs: 433542074086264. | |
:param four_digits: str, 收件人或寄件人手机号码后四位. egs: 4154. | |
:param captcha: str, egs: b2Nbm. | |
:return: info: str. | |
""" | |
operator = get_operator_by_track_id(track_id) | |
if four_digits is None: | |
url = "https://trace.fkdex.com/{}/{}".format(operator, track_id) | |
else: | |
url = "https://trace.fkdex.com/{}/{}:{}".format(operator, track_id, four_digits) | |
headers = { | |
# 不给出 Referer 时,它会生成随机的物流信息。 | |
"Referer": "https://www.ickd.cn/", | |
"Cookie": "PHPSESSID=95c179f9fa0c117c31a8e3f440257d24" | |
} | |
params = { | |
"mailNo": "{}:{}".format(track_id, four_digits), | |
"verifyCode": captcha | |
} | |
resp = requests.request( | |
"GET", | |
url=url, | |
headers=headers, | |
params=params | |
) | |
print(resp.status_code) | |
print(resp.text) | |
if resp.status_code == 200: | |
js = resp.json() | |
error_code = js["errCode"] | |
message = js["message"] | |
exp_text_name = js["expTextName"] | |
exp_spell_name = js["expSpellName"] | |
data = js["data"] | |
if error_code == 1: | |
# 请输入正确的单号 | |
return message | |
elif error_code == 2: | |
# 请输入【收件人】或【寄件人】\n电话号码后4位 | |
return message | |
elif error_code == 14: | |
# 需要验证码 | |
message_ = """需要验证码: 请输入此链接中展示的图像中的验证码。\nhttps://trace.fkdex.com/captcha""" | |
return message_ | |
track_info = "" | |
for row in data: | |
date = row["time"] | |
context = row["context"] | |
row_ = "{}: {}".format(date, context) | |
track_info += row_ | |
track_info += "\n" | |
result = "快递公司名称: {}\n快递单号: {}\n手机号码后四位: {}\n物流信息如下: \n\n{}".format( | |
exp_text_name, track_id, four_digits, track_info | |
) | |
print(result) | |
return result | |
return "物流信息查询失败。" | |
def kwargs(): | |
return ["track_id", "four_digits", "captcha"] | |
def main(): | |
tools = [ | |
{ | |
"type": "function", | |
"function": { | |
"name": "get_express_delivery_information", | |
"description": "在此根据跟踪号查询物流信息。", | |
"parameters": { | |
"type": "object", | |
"properties": { | |
"track_id": { | |
"type": "string", | |
"description": "物流跟踪号码。", | |
}, | |
"four_digits": { | |
"type": "string", | |
"description": "出于对用户隐私的考虑,有些物流商可能会要求你提供收件人或寄件人手机号码后四位。", | |
}, | |
"captcha": { | |
"type": "string", | |
"description": "有些物流商的查询可能要求你提供图像验证码。", | |
} | |
}, | |
"required": ["track_id"], | |
}, | |
}, | |
} | |
] | |
tools_ = json.dumps(tools, ensure_ascii=False) | |
print(tools_) | |
print(tools_.replace("\"", "\\\"")) | |
# track_id = "33212432323" | |
# four_digits = None | |
# track_id = "433542074086264" | |
# four_digits = "4154" | |
# four_digits = None | |
track_id = "4577035024" | |
four_digits = None | |
captcha = "VWDYW" | |
# result = get_operator_by_track_id(track_id) | |
# print(result) | |
result = get_express_delivery_information(track_id, four_digits, captcha) | |
print(result) | |
return | |
if __name__ == '__main__': | |
main() | |