Hamdy Tabsissi
繁體中文

Alim'confiance Archive 每週自動執行 個人專案

在公開的食品衛生稽查紀錄消失之前,先把它們保存下來

每週自動備份法國公開的餐廳衛生稽查結果,因為政府在 12 個月後就會將這些資料刪除。

需求

法國以開放資料公布餐廳與食品商店的衛生稽查結果,但只保留最近 12 個月。從來源刪除的紀錄,除非有人保存過,否則就找不回來。

構想

這些資料最有價值的是它的歷史紀錄,而歷史紀錄事後無法重建。今天就開始的封存,比明年才推出的完美應用程式更有價值。

我打造了什麼

  • 先做確認:查過這份資料集已知的 18 個再利用案例、GitHub 與 Wayback Machine,沒有找到完整歷史紀錄的副本(2026 年 8 月)。
  • 排程工作每週一 6:00(UTC)下載完整檔案,確認檔案沒有被截斷,接著壓縮,並以當週日期存放。
  • 同一週重複執行兩次,也絕不會產生重複的資料。
  • 在我自己管理的電腦上保留第二份副本,並複製到 OneDrive。只存放在單一地點的封存,稱不上是封存。

成果

  • 72,688第一次快照保存的稽查紀錄
  • 45 → 9.9 MB壓縮前後的檔案大小
  • 每週一自 2026 年 8 月 16 日起自動執行
  • 0截至 2026 年 10 月的使用者人數(據實以告)

這份封存每週都會自動增長。它目前還沒有介面,也還沒有使用者:它是一個更大構想的基礎,也就是把這些稽查結果轉化為選擇餐廳前就能看懂的資訊。

畫面一覽

示意圖:官方來源在 12 個月後刪除紀錄,自動收集每週一執行,依日期整理的封存保留所有資料

我學到了什麼

動手打造之前,先確認需求真實存在:這次是調查結果決定了專案,而不是反過來。另外,自動化必須值得信賴才有意義:每次執行都會先檢查自己的產出,確認無誤才儲存。

技術細節 技術堆疊、架構與決策——給技術背景的讀者

技術堆疊

  • GitHub Actions
  • opendatasoft API
  • cron
  • Windows 工作排程器
  • OneDrive

運作方式

  • 每週執行的 GitHub Actions 工作流程(週一 06:00 UTC):下載完整 CSV、驗證檔案大小與標頭、壓縮,並以 ISO 週為單位進行冪等的 commit。
  • 讓第一次執行失敗的陷阱:即使沒有協商壓縮格式,opendatasoft API 仍以 gzip 回應,因此在加上 curl --compressed 之前,下載的檔案都無法讀取。
  • 在 GitHub 之外,於我自己管理的電腦上保留第二份副本,並複製到 OneDrive。
  • 無法事後回補:沒擷取到的那一週就永遠消失了,因此每次執行都要驗證。

仍待補強

  • 尚無使用者介面
  • 尚無使用者