在法国用 La Poste 的 Colissimo 批量查件,别一上来就硬爬
上个月帮朋友的小仓库对账,有 200 多个 Colissimo 单号要核对签收状态。一开始想直接写个 Python 脚本循环请求官网查询页,结果跑了十几单就返回 429,后面直接 403。换 IP 也没用,Colissimo 的查询接口对未登录请求有频率限制,而且返回的是 HTML 片段,解析起来全是坑。
后来改成用他们提供的开放接口(需注册开发者账号),流程简单很多。先拿 API key 换 token,再批量提交单号,每次最多 50 个,间隔 2 秒。核心代码片段如下:
import requests, time
API_KEY = "your_key"
AUTH_URL = "https://api.laposte.fr/oauth2/token"
TRACK_URL = "https://api.laposte.fr/suivi/v2/idships"
token = requests.post(AUTH_URL, data={
"grant_type": "client_credentials"
}, headers={
"Authorization": f"Basic {API_KEY}"
}).json()["access_token"]
headers = {"X-Okapi-Key": API_KEY, "Authorization": f"Bearer {token}"}
ids = ["6A12345678901", "6A12345678902"] # 你的单号列表
for i in range(0, len(ids), 50):
batch = ids[i:i+50]
resp = requests.get(TRACK_URL, params={"idships": ",".join(batch)}, headers=headers)
if resp.status_code == 200:
for item in resp.json():
print(item["idShip"], item["status"]["label"])
time.sleep(2)
这样做的好处是稳定,返回 JSON 直接解析,不用再处理网页里的动态加载。代价是得先注册开发者账号,审核大概一两天,而且免费额度每月 5000 次调用,小批量够用。另外,接口只返回最近 30 天的轨迹,超过的得走历史查询(需要额外申请权限)。
要留意的是,Colissimo 的 API 对单号格式校验很严,比如常见的 6A 开头 13 位,少一位直接 400。还有,如果单号还没被系统扫描,返回的 status 可能是 “UNKNOWN”,别当成错误重试,等几个小时再查就行。我自己踩过的坑:一开始没加 sleep,连续请求 200 个单号,token 被临时吊销,得重新申请。
最后留个问题:你们批量查件时,有没有遇到过单号状态一直卡在 “IN_TRANSIT” 不更新的情况?我这边有一单卡了 5 天,最后是收件人自己去网点问才解决的,不确定是不是普遍现象。
0
赞同度 100% · 0 条评论 · 7 阅读
0 条评论
还没有评论,写下第一条。