由零開始的程式設計 (1) - 構思及可行性
我要設計一個 App/WebApp,就是只需用 Postcode 就可以找到垃圾回收日的資訊,不可以比這個操作更複雜,否則就沒人用了,然後 App 版本可以儲存及推送提醒這些功能不能少,其他東西就以簡約為主,不做多餘的東西。

我由英國一開始住在 Bristol 時還沒有太注意垃圾收集的日子,然後在搬屋後就發現,為什麼不同 Councils 需要到不同的網站查看收集垃圾的日子?原來每個 Councils 都會自己決定收集垃圾的日子及僱用公司來處理垃圾,所以也各自建立了網站來提供資訊,結果就是沒有一個 App 可以統一查詢這個資訊。
為什麼要開始做這程式?
沒想到在英國會找到一樣大家每天都在用但是沒人做的東西,身為 creative developer 的我當然會找找看這個 idea 有沒有辦法可以做到。首先大部份查詢垃圾回收日的網站都是先用 Postcode 查詢同一條街道的地址,再由這些地址中選擇你所住的物業,然後就會出現垃圾回收日的資訊。

設計理念
如果我要設計一個 App/WebApp,就是只需用 Postcode 就可以找到垃圾回收日的資訊,不可以比這個操作更複雜,否則就沒人用了,然後 App 版本可以儲存及推送提醒這些功能不能少,其他東西就以簡約為主,不做多餘的東西。
首要難題 - 資源來源
但是我要怎麼取得這些資料呢?經一輪研究後發現垃圾回收資訊好像不是英國 open data 的一部份,各地的資料也不統一,也沒有官方途徑取得資料,幾百個 Councils 各自有一套做法,似乎相當麻煩!
然後我發現了這個 repository - UKBinCollectionData。
一個由一群 developer 集合而成的 open source 英國垃圾收集資料,不就是我想找的東西,如果直接可用的話,只要寫個 Frontend 就可以!但是這麼簡單的話怎會沒人做呢?
怎樣都好,話個 repository 都是我整個程式的根基,必須好好研究一下,同時也因為發現了這個 reposirtory,一切都變得好像可行,所以我也決心開始研發這個 垃圾 APP (暫定)。
分析資料
簡單分析 UKBinCollectionData 後,發現入面有一個 docker compose 似乎能簡單地架起一個 API Server,連 API Server 也準備好太貼心了,馬上就架起來測試一下,Backend 似乎用 connexion 建立了一個簡單的 API,也有 Swagger 可以查看文件。
一試之下驚呆了我!為什麼要填這麼多資料?

不是只需 PostCode 就可以的嗎?還要 Council?什麼 URL?Postcode 竟然不是必須的?UPRN 是什麼?需要太多資料了吧?我還是詳細看一下 Github 上的說明,再找找看這些需要填的東西是什麼?
- Council 就是 Council 名稱,但也有指定的寫法,e.g. Bristol 叫 City of Bristol,寫法是
BristolCityCouncil
。 - URL 就是垃圾收集資料網站的網址,為什麼要這個?我一會會再說。
- Postcode 就當然是 Postcode。
- UPRN 是 Unique Property Reference Number,英國的唯一物業參考編號,英國每項物業都有一個組絕不重複的獨立編號,除了房屋,車位,燈柱,郵箱也會有個別編號。
- House Number 門牌號碼,雖說是門牌,但有部份地區也要寫全個地址。
- USRN 就是 Unique Property Reference Number,街道唯一參考編號,跟 URPN一樣的東西,但是是街道用的,因為英國很多街道也是相同名稱。
- SkipGetURL 部份 Council 需要這個設定,要填的就是 Boolean,但其實 false 的這可以不填。
- WebDriver 這是 Selenium 的位置,就是用作 scraper 之用的軟件。
看到這裡會想還要用 scraper?這東西不是資料庫嗎?
原來這東西是 "對每個 Council 垃圾收集網站個別訂製的 Scraper 集合",就是有很多人寫了幾百個 Scraper 去即時抓官方網站上的垃圾資訊。
難怪會有一個地圖去顯示成功通過測試的地區地圖,綠色是成功通過測試的地區,比較上還是很高的,黃色是部份通過,紅色是測試失敗。

單從顏色比較上看,綠色也有 80%以上的地區支援,以沒有資料的我來說也是很多的了。
測試一下 API Server
在 UKBinCollectionData 的 Wiki 內 Council 分頁中可以找到每一個 Council 所需的資料,然後發現事情並不單純,因為我所需要得不只是 PostCode,大部份地區也需要 UPRN,UKBinCollectionData 也有教,單搜尋一兩個 UPRN 並不難,有不少網站可以免費搜尋找到。
在有 PostCode + UPRN+House Number 等資料齊備後,就可以進行搜尋。但是嘗試了很多地址也不成功,試到我懷疑人生,後來發現 UKBinCollectionData 其實有一個 自動化測試網站,可以比較易找到那個 Council 成功通過測試會較易成功。

這是上面的 Response,應該是 Scraper 由回應結果的 html 中抽取出來,所以還需要另外進行分析,結果相當不友善。相信要有更多優化才能成功,過程應該相當複雜。
"{\n \"bins\": [\n {\n \"type\": \"Food waste\",\n \"collectionDate\": \"22/07/2025\"\n },\n {\n \"type\": \"Recycling\",\n \"collectionDate\": \"22/07/2025\"\n },\n {\n \"type\": \"Rubbish\",\n \"collectionDate\": \"22/07/2025\"\n },\n {\n \"type\": \"Garden waste\",\n \"collectionDate\": \"22/07/2025\"\n },\n {\n \"type\": \"Small electrical items\",\n \"collectionDate\": \"22/07/2025\"\n },\n {\n \"type\": \"Food waste\",\n \"collectionDate\": \"29/07/2025\"\n },\n {\n \"type\": \"Recycling\",\n \"collectionDate\": \"29/07/2025\"\n },\n {\n \"type\": \"Rubbish\",\n \"collectionDate\": \"29/07/2025\"\n },\n {\n \"type\": \"Garden waste\",\n \"collectionDate\": \"29/07/2025\"\n },\n {\n \"type\": \"Small electrical items\",\n \"collectionDate\": \"29/07/2025\"\n }\n ]\n}"
回應結果
結論
總括而言,UKBinCollectionData 這個 Library 是我這個 Project 成功及否的關鍵,但是跟我理想中只需 Postcode 就可以完成搜尋相差太多,下一回我就會研究怎麼補完這些資料來完成我的 "垃圾App"。