Track.TW自动化追踪邮政包裹:API实战与工作流优化指南

用 Track.TW 自动追踪邮政包裹:一个自动化工作流实战
问题:手动查物流太麻烦
给朋友寄了份礼物,每隔几小时就得打开邮政官网,手动输入单号查一次物流?或者同时在等好几个包裹,得在不同网页间来回切换,生怕错过任何更新?
这种重复劳动不仅耗时,还容易漏掉关键信息。对开发者或技术爱好者来说,手动查询简直是效率的“黑洞”。有没有办法让物流状态自动“找上门来”?
方案:Track.TW + 自动化脚本
Track.TW 是一个专注于台湾地区物流追踪的平台,支持中華郵政(郵局)包裹的实时查询。关键的是,它提供了 API 接口,这意味着你可以用代码把查询自动化,然后通过 Email、Telegram、Discord、Slack 等渠道接收推送。
简单来说,写一个 Python 脚本,定时调用 Track.TW 的 API 检查包裹状态,一旦状态有更新(比如“已出货”、“运送中”、“已送达”),就立刻通过你指定的消息渠道通知你。整个过程无需人工干预。
步骤:从零搭建自动化追踪
第一步:获取 Track.TW API 密钥
- 访问 Track.TW 官网 并注册一个账户。
- 登录后,在用户后台找到“API”或“开发者”相关页面。
- 申请一个 API 密钥(API Key)。这个密钥是调用服务的凭证,务必保管好。
为什么需要 API 密钥?
就像进小区需要门禁卡一样,API 密钥是 Track.TW 识别你身份、允许你调用服务的唯一凭证。没有它,你的脚本无法与平台通信。
第二步:安装 Python 依赖库
打开你的终端(Windows 的 CMD/PowerShell,macOS/Linux 的 Terminal),运行以下命令:
pip install requests schedulerequests:用于向 Track.TW 的 API 发送网络请求,获取物流数据。schedule:一个轻量级的任务调度库,用于定时执行我们的查询脚本。
为什么用这两个库?requests 是 Python 里最常用的 HTTP 库,能简化 API 调用过程。schedule 则让设置“每 30 分钟检查一次”这样的定时任务变得非常简单,无需操作系统的复杂配置。
第三步:编写核心追踪脚本
创建一个 Python 文件(例如 tracker.py),写入以下代码:
import requests
import schedule
import time
from datetime import datetime
# 配置区域
API_KEY = "你的Track.TW API密钥"
TRACKING_NUMBER = "你的邮政包裹单号" # 例如:RA123456789TW
CHECK_INTERVAL_MINUTES = 30 # 检查间隔(分钟)
# Telegram Bot配置(示例)
TELEGRAM_BOT_TOKEN = "你的Telegram Bot Token"
TELEGRAM_CHAT_ID = "你的Telegram Chat ID"
def get_tracking_status():
"""调用Track.TW API获取最新物流状态"""
url = f"https://api.track.tw/v1/track/{TRACKING_NUMBER}"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Accept": "application/json"
}
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
# 解析关键信息:最新状态、时间、地点
latest_status = data.get('status', '未知状态')
last_update = data.get('last_update', '未知时间')
location = data.get('location', '未知地点')
return {
'status': latest_status,
'time': last_update,
'location': location,
'raw': data # 保留原始数据备用
}
else:
print(f"API请求失败,状态码:{response.status_code}")
return None
except Exception as e:
print(f"发生错误:{e}")
return None
def send_telegram_notification(message):
"""通过Telegram Bot发送通知"""
telegram_url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
payload = {
'chat_id': TELEGRAM_CHAT_ID,
'text': message,
'parse_mode': 'Markdown'
}
try:
requests.post(telegram_url, json=payload)
print("Telegram通知已发送")
except Exception as e:
print(f"发送Telegram通知失败:{e}")

def check_and_notify():
"""主检查逻辑:获取状态,判断是否有更新,发送通知"""
print(f"[{datetime.now()}] 开始检查包裹 {TRACKING_NUMBER} 状态...")
current_status = get_tracking_status()
if current_status is None:
return
# 这里可以添加更复杂的逻辑,比如与上次状态对比
# 为简化示例,我们每次检查都发送通知(实际应用中应避免骚扰)
message = f"📦 *包裹状态更新*\n\n"
message += f"*单号:* `{TRACKING_NUMBER}`\n"
message += f"*状态:* {current_status['status']}\n"
message += f"*时间:* {current_status['time']}\n"
message += f"*地点:* {current_status['location']}\n\n"
message += f"查询时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
# 发送通知(这里以Telegram为例,你可以替换为Email、Discord等逻辑)
send_telegram_notification(message)
print(f"当前状态:{current_status['status']}")
# 设置定时任务
schedule.every(CHECK_INTERVAL_MINUTES).minutes.do(check_and_notify)
print(f"包裹追踪脚本已启动!")
print(f"追踪单号:{TRACKING_NUMBER}")
print(f"检查间隔:每 {CHECK_INTERVAL_MINUTES} 分钟")
print(f"通知方式:Telegram")
print("按 Ctrl+C 停止脚本")
# 启动时立即执行一次
check_and_notify()
# 保持脚本运行,执行定时任务
while True:
schedule.run_pending()
time.sleep(1)代码关键点解释:
get_tracking_status()函数:负责与 Track.TW API 通信,获取包裹的 JSON 格式数据,并解析出我们关心的状态、时间、地点。send_telegram_notification()函数:将格式化后的消息通过 Telegram Bot API 发送出去。你需要提前创建一个 Telegram Bot 并获取 Token 和 Chat ID。check_and_notify()函数:整合了查询和通知的逻辑。实际项目中,你可以在其中加入状态对比逻辑,只在状态真正发生变化时才发送通知,避免重复打扰。schedule库:轻松实现了“每 30 分钟执行一次”的定时需求。
第四步:运行与验证
- 将代码中的
API_KEY、TRACKING_NUMBER、TELEGRAM_BOT_TOKEN、TELEGRAM_CHAT_ID替换为你自己的真实值。 在终端运行脚本:
python tracker.py- 观察终端输出。脚本启动后会立即执行一次检查,并在 Telegram 中收到第一条通知。
- 等待设定的间隔时间(例如 30 分钟),如果包裹状态有更新,你会再次收到通知。
验证成功标志:
- 终端显示“API 请求成功”、“Telegram 通知已发送”等日志。
- 你的 Telegram 聊天窗口中收到来自 Bot 的包裹状态消息。
常见问题
Q1:脚本运行时报错“API Key 无效”怎么办?
A:检查 API_KEY 是否复制完整,没有多余空格。确认你的 Track.TW 账户 API 功能是否已启用。
Q2:我想用 Email 或 Discord 接收通知,怎么改?
A:核心逻辑不变,只需修改通知函数。例如,发送 Email 可以使用 Python 内置的 smtplib 库;发送 Discord 消息则调用其 Webhook API。Track.TW 的 API 返回数据格式是固定的,你只需要替换“发送”这部分的代码。
Q3:如何实现“状态变化才通知”?
A:你需要一个地方(比如本地的 JSON 文件)来存储上一次查询的状态。每次查询后,将新状态与旧状态对比。如果不同,则发送通知并更新存储的状态;如果相同,则跳过。
这个案例的技术价值
这个小项目展示了自动化工作流的核心思路:
- 数据获取:通过 API 从外部服务(Track.TW)获取结构化数据。
- 逻辑处理:用 Python 脚本进行解析、判断(是否状态更新)。
- 动作执行:通过另一个 API(Telegram Bot)将结果推送到用户面前。
你可以将这个模式扩展到无数场景:股票价格提醒、天气预警、网站内容监控、社交媒体动态抓取……Track.TW 的包裹追踪只是一个具体、实用的起点。
下一步学习建议
- 扩展通知渠道:尝试修改脚本,让通知同时发送到你的 Email 和 Discord 频道。
- 加入状态对比:完善脚本,实现真正的“状态变化才通知”,并考虑将历史状态记录到数据库(如 SQLite)。
- 集成到更大工作流:将这个脚本部署到云服务器(如阿里云、腾讯云的轻量服务器),实现 7x24 小时自动运行。或者,将其作为 Dify/Coze 工作流中的一个节点,构建更复杂的自动化流程(例如:包裹送达后,自动在待办清单中勾选“确认收货”)。
相关资源:
- Track.TW API 官方文档(假设链接):
https://api.track.tw/docs - Python
requests库快速上手:https://docs.python-requests.org/ - Telegram Bot 创建指南:搜索“Telegram BotFather”即可找到官方教程。
从解决一个具体的小麻烦开始,逐步构建你的自动化工具箱,这才是技术爱好者最酷的实践方式。