#!/usr/bin/env python3 """ 快递查询工具 支持京东快递查询 """ import requests import re import json import sys from datetime import datetime def query_jd_express(tracking_number): """ 查询京东快递物流信息 """ try: # 京东物流查询API url = f"https://www.jd.com/logisticsAction/getLogisticsInfo?deliveryId={tracking_number}" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Referer': 'https://www.jd.com/', 'Accept': 'application/json, text/plain, */*', } response = requests.get(url, headers=headers, timeout=10) if response.status_code == 200: try: data = response.json() return parse_jd_response(data) except json.JSONDecodeError: # 尝试解析文本响应 return parse_jd_html(response.text) else: return f"查询失败,HTTP状态码: {response.status_code}" except Exception as e: return f"查询过程中出现错误: {str(e)}" def parse_jd_response(data): """ 解析京东API响应 """ if not data or 'data' not in data: return "未找到物流信息" result = [] # 提取基本信息 logistics_info = data.get('data', {}) # 快递公司信息 company = logistics_info.get('companyName', '京东物流') status = logistics_info.get('statusDesc', '未知状态') result.append(f"快递公司: {company}") result.append(f"物流状态: {status}") result.append("") # 物流轨迹 traces = logistics_info.get('traces', []) if traces: result.append("物流轨迹:") for trace in traces: time_str = trace.get('acceptTime', '') desc = trace.get('acceptStation', '') if time_str and desc: result.append(f" {time_str} - {desc}") else: result.append("暂无物流轨迹信息") return "\n".join(result) def parse_jd_html(html_content): """ 解析京东HTML页面 """ # 简单的HTML解析 patterns = [ r'"statusDesc":"([^"]+)"', r'"acceptTime":"([^"]+)"', r'"acceptStation":"([^"]+)"', r'