|
发表于 2024-7-9 13:54:38
|
显示全部楼层
好的,鱼油!让我们搞定这个物流信息查询的代码。根据你所提供的信息和一些合理推测,我们可以编写一个更完善的脚本来模拟查询快递信息。
首先,根据观察,`KDQUERY` 后面的部分似乎是由时间戳和随机数生成的。对于随机数,可以使用当前的时间戳作为种子生成器,这样生成的查询ID就能比较接近真实情况。
其次,你的`express_query`函数有些小问题,需要修正。
请看下面的调整:
- import logging
- import time
- import random
- from fake_useragent import UserAgent
- import json
- import requests
- # 配置日志
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
- def generate_query_id():
- timestamp = int(time.time())
- random_number = str(random.randint(1000000, 9999999)) # 生成7位随机数
- query_id = f"KDQUERY{timestamp}{random_number}"
- return query_id
- def get_express_type(exp_name):
- exp_dic = {
- "申通": "shentong",
- "圆通": "yuantong",
- "韵达": "yunda",
- "百世": "huitongkuaidi",
- "优速": "youshuwuliu",
- "中通": "zhongtong",
- "EMS": "ems",
- "顺丰": "shunfeng",
- "天天": "tiantian",
- "宅急送": "zhaijisong",
- "中国邮政": "youzhengguonei",
- "全峰": "quanfengkuaidi",
- "速尔": "suer",
- "国通": "guotongkuaidi"
- }
- return exp_dic.get(exp_name, "unknown")
- # 快递查询
- def express_query(exp_name, exp_number):
- headers = {
- "User-Agent": UserAgent().random,
- "Referer": "https://www.kuaidi.com/"
- }
- query_id = generate_query_id()
- exp_type = get_express_type(exp_name)
- query_url = f"https://www.kuaidi.com/index-ajaxselectcourierinfo-{exp_number}-{exp_type}-{query_id}.html"
- logging.info(f"Query URL: {query_url}")
- response = requests.post(query_url, headers=headers)
-
- if response.ok:
- try:
- response_data = json.loads(response.text)
- if 'data' in response_data and response_data["data"]:
- for data in response_data['data']:
- print(f"Time: {data['time']}, Status: {data['context']}")
- else:
- logging.info("No tracking information found.")
- except json.JSONDecodeError:
- logging.error("Failed to parse response JSON.")
- else:
- logging.error(f"Failed to fetch data. Status code: {response.status_code}")
- if __name__ == "__main__":
- exp_name = "圆通"
- exp_number = 'YT1870762630265'
- express_query(exp_name, exp_number)
复制代码
### 解释:
1. **生成查询ID**: `generate_query_id` 函数使用当前时间戳和一个7位的随机数来生成查询 ID,这样的组合较为合理。
2. **获取快递公司编码**: `get_express_type` 函数返回快递公司的缩写编码,如果没有匹配到则返回`unknown`。
3. **查询快递信息**: `express_query` 函数构建查询 URL,然后用 `requests` 库发送 POST 请求。解析响应内容并提取有效信息。
4. **日志记录和错误处理**: 使用 `logging` 模块记录信息和错误,以便更好地调试程序。
这样,改进后的代码应该能够更加稳定地查询并输出快递信息了。希望你能找到你的小包裹!有问题随时喊我,鱼油君!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|