You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.2 KiB
142 lines
4.2 KiB
#!/usr/bin/env python3
|
|
"""
|
|
飞书快递查询助手 - 集成国内常用快递查询方式
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
import re
|
|
import sys
|
|
from datetime import datetime
|
|
|
|
def get_express_info(tracking_number):
|
|
"""
|
|
根据快递单号获取快递公司信息和查询链接
|
|
"""
|
|
express_data = {
|
|
'JD': {
|
|
'name': '京东物流',
|
|
'patterns': [r'^JD\d+', r'^JDX\d+', r'^JDV\d+'],
|
|
'url': 'https://www.jd.com',
|
|
'query_url': f'https://www.jd.com/search?keyword={tracking_number}',
|
|
'phone': '950616'
|
|
},
|
|
'SF': {
|
|
'name': '顺丰速运',
|
|
'patterns': [r'^SF\d+', r'^1\d{11,12}$'],
|
|
'url': 'https://www.sf-express.com',
|
|
'query_url': 'https://www.sf-express.com/cn/sc/dynamic_function/waybill/',
|
|
'phone': '95338'
|
|
},
|
|
'YT': {
|
|
'name': '圆通速递',
|
|
'patterns': [r'^YT\d+', r'^88\d{10,}', r'^\d{13}$'],
|
|
'url': 'https://www.yto.net.cn',
|
|
'query_url': 'https://www.yto.net.cn/index.html',
|
|
'phone': '95554'
|
|
},
|
|
'ZTO': {
|
|
'name': '中通快递',
|
|
'patterns': [r'^ZTO\d+', r'^\d{12}$'],
|
|
'url': 'https://www.zto.com',
|
|
'query_url': 'https://www.zto.com/query/',
|
|
'phone': '95311'
|
|
},
|
|
'STO': {
|
|
'name': '申通快递',
|
|
'patterns': [r'^STO\d+', r'^\d{12,13}$'],
|
|
'url': 'https://www.sto.cn',
|
|
'query_url': 'https://www.sto.cn/service/query',
|
|
'phone': '95543'
|
|
},
|
|
'YUNDA': {
|
|
'name': '韵达快递',
|
|
'patterns': [r'^YUNDA\d+', r'^39\d{10,}', r'^\d{13}$'],
|
|
'url': 'https://www.yundaex.com',
|
|
'query_url': 'https://www.yundaex.com/cn/index.php',
|
|
'phone': '95546'
|
|
},
|
|
'EMS': {
|
|
'name': '中国邮政EMS',
|
|
'patterns': [r'^E[A-Z]\d{9}CS$', r'^1\d{13}$'],
|
|
'url': 'https://www.ems.com.cn',
|
|
'query_url': 'https://www.ems.com.cn/query',
|
|
'phone': '11183'
|
|
}
|
|
}
|
|
|
|
# 匹配快递公司
|
|
matched = None
|
|
for code, info in express_data.items():
|
|
for pattern in info['patterns']:
|
|
if re.match(pattern, tracking_number):
|
|
matched = info
|
|
matched['code'] = code
|
|
break
|
|
if matched:
|
|
break
|
|
|
|
if not matched:
|
|
# 未匹配到,返回通用查询方式
|
|
return {
|
|
'name': '未知快递公司',
|
|
'code': 'UNKNOWN',
|
|
'patterns': [],
|
|
'url': 'https://www.kuaidi100.com',
|
|
'query_url': f'https://www.kuaidi100.com/?nu={tracking_number}',
|
|
'phone': '请使用第三方平台查询'
|
|
}
|
|
|
|
return matched
|
|
|
|
def generate_feishu_message(tracking_number):
|
|
"""
|
|
生成飞书消息卡片
|
|
"""
|
|
express = get_express_info(tracking_number)
|
|
|
|
message = f"""
|
|
📦 快递查询助手
|
|
━━━━━━━━━━━━━━━━━━━━
|
|
|
|
📋 快递单号:{tracking_number}
|
|
🏢 快递公司:{express['name']}
|
|
📞 客服电话:{express['phone']}
|
|
|
|
━━━━━━━━━━━━━━━━━━━━
|
|
|
|
🔍 查询方式(按推荐排序):
|
|
|
|
1️⃣ **官方APP查询(最准确)**
|
|
• {express['name']}APP → 快递查询
|
|
• 或扫描快递单二维码
|
|
|
|
2️⃣ **官网查询**
|
|
• 访问:{express['url']}
|
|
• 输入单号:{tracking_number}
|
|
|
|
3️⃣ **第三方平台**
|
|
• 快递100:https://www.kuaidi100.com
|
|
• 菜鸟裹裹:https://www.cainiao.com
|
|
• 支付宝/微信 → 快递查询
|
|
|
|
━━━━━━━━━━━━━━━━━━━━
|
|
|
|
⏰ 查询时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
|
|
|
|
💡 提示:使用官方APP查询能看到最详细的物流轨迹和预计送达时间!
|
|
"""
|
|
|
|
return message
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("使用方法: python feishu_express_helper.py <快递单号>")
|
|
sys.exit(1)
|
|
|
|
tracking_number = sys.argv[1]
|
|
message = generate_feishu_message(tracking_number)
|
|
print(message)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|