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

#!/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()