需求
法國以開放資料公布餐廳與食品商店的衛生稽查結果,但只保留最近 12 個月。從來源刪除的紀錄,除非有人保存過,否則就找不回來。
構想
這些資料最有價值的是它的歷史紀錄,而歷史紀錄事後無法重建。今天就開始的封存,比明年才推出的完美應用程式更有價值。
我打造了什麼
- 先做確認:查過這份資料集已知的 18 個再利用案例、GitHub 與 Wayback Machine,沒有找到完整歷史紀錄的副本(2026 年 8 月)。
- 排程工作每週一 6:00(UTC)下載完整檔案,確認檔案沒有被截斷,接著壓縮,並以當週日期存放。
- 同一週重複執行兩次,也絕不會產生重複的資料。
- 在我自己管理的電腦上保留第二份副本,並複製到 OneDrive。只存放在單一地點的封存,稱不上是封存。
成果
- 72,688第一次快照保存的稽查紀錄
- 45 → 9.9 MB壓縮前後的檔案大小
- 每週一自 2026 年 8 月 16 日起自動執行
- 0截至 2026 年 10 月的使用者人數(據實以告)
這份封存每週都會自動增長。它目前還沒有介面,也還沒有使用者:它是一個更大構想的基礎,也就是把這些稽查結果轉化為選擇餐廳前就能看懂的資訊。
畫面一覽
我學到了什麼
動手打造之前,先確認需求真實存在:這次是調查結果決定了專案,而不是反過來。另外,自動化必須值得信賴才有意義:每次執行都會先檢查自己的產出,確認無誤才儲存。
技術細節 技術堆疊、架構與決策——給技術背景的讀者
技術堆疊
- GitHub Actions
- opendatasoft API
- cron
- Windows 工作排程器
- OneDrive
運作方式
- 每週執行的 GitHub Actions 工作流程(週一 06:00 UTC):下載完整 CSV、驗證檔案大小與標頭、壓縮,並以 ISO 週為單位進行冪等的 commit。
- 讓第一次執行失敗的陷阱:即使沒有協商壓縮格式,opendatasoft API 仍以 gzip 回應,因此在加上 curl --compressed 之前,下載的檔案都無法讀取。
- 在 GitHub 之外,於我自己管理的電腦上保留第二份副本,並複製到 OneDrive。
- 無法事後回補:沒擷取到的那一週就永遠消失了,因此每次執行都要驗證。
仍待補強
- 尚無使用者介面
- 尚無使用者