#!/usr/bin/env python3 """ 使用快递100查询物流信息 """ import requests import json import sys def query_kuaidi100(tracking_number): """ 使用快递100查询物流信息 """ try: # 快递100的查询API url = "https://www.kuaidi100.com/query" # 自动识别快递公司 auto_url = f"https://www.kuaidi100.com/autonumber/auto?num={tracking_number}" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': 'https://www.kuaidi100.com/', 'Accept': 'application/json, text/plain, */*', } # 首先自动识别快递公司 print("正在识别快递公司...") auto_response = requests.get(auto_url, headers=headers, timeout=10) if auto_response.status_code == 200: auto_data = auto_response.json() if auto_data: # 选择第一个识别结果 company_code = auto_data[0].get('comCode', '') company_name = auto_data[0].get('name', '') if company_code: print(f"识别到的快递公司: {company_name} ({company_code})") # 查询物流详情 params = { 'type': company_code, 'postid': tracking_number, 'id': 1, 'valicode': '', 'temp': '0.12345678901234567' } response = requests.get(url, params=params, headers=headers, timeout=10) if response.status_code == 200: data = response.json() return parse_kuaidi100_response(data, company_name) else: return f"查询失败,HTTP状态码: {response.status_code}" else: return "无法识别快递公司" else: return "无法识别快递公司" else: return f"识别快递公司失败,HTTP状态码: {auto_response.status_code}" except Exception as e: return f"查询过程中出现错误: {str(e)}" def parse_kuaidi100_response(data, company_name): """ 解析快递100的响应 """ if not data: return "未收到有效响应" status = data.get('status', '') message = data.get('message', '') result = [] result.append(f"快递公司: {company_name}") if status == '200': result.append(f"查询状态: 成功") # 快递状态 state = data.get('state', '') state_desc = { '0': '在途', '1': '揽收', '2': '疑难', '3': '签收', '4': '退签', '5': '派件', '6': '退回' }.get(state, '未知状态') result.append(f"物流状态: {state_desc}") # 物流轨迹 traces = data.get('data', []) if traces: result.append("") result.append("物流轨迹:") for trace in traces: time_str = trace.get('time', '') desc = trace.get('context', '') if time_str and desc: result.append(f" {time_str} - {desc}") else: result.append("暂无物流轨迹信息") else: result.append(f"查询失败: {message}") return "\n".join(result) def main(): if len(sys.argv) < 2: print("使用方法: python kuaidi100_query.py <快递单号>") sys.exit(1) tracking_number = sys.argv[1] print(f"正在查询快递单号: {tracking_number}") print("=" * 50) result = query_kuaidi100(tracking_number) print(result) if __name__ == "__main__": main()