iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
自我挑戰組

30 天養大一個開源專案:baodao-skill 從零開始系列 第 4

【Day 4】垃圾車不只台北市——taipei-garbage 改名 taiwan-garbage 的一天

  • 分享至 

  • xImage
  •  

晚上七點,你還在開會,耳邊隱約傳來〈少女的祈禱〉。垃圾車來了——但你家巷口那個點,今天到底有沒有收?幾點到?這就是垃圾車查詢 skill 要解決的日常。baodao-skill 第一天就有它,但只支援台北市。今天把新北市補進來,順便把名字改老實。先講三個真實使用場景,再講背後的工程坑。

場景一:「我家巷口今天有收嗎?」

住板橋的小陳,週四晚上聽到音樂聲才想起垃圾還沒丟。以前他要衝下樓賭一把,現在他(或他的 AI)只要一句話:查新北市板橋區的清運點,看星期四有沒有收。

新北市的開放資料裡,每個清運點都直接標好 garbagemonday 到 garbagesunday、加上 recycling 開頭的一組星期欄位。所以查法很直接:

jq -r '.[] | select(.city=="板橋區" and .garbagethursday=="Y") | "\(.village) \(.name) \(.time)"' garbage_all.json | head -3

香社里 中正路341巷8弄口 19:00
香社里 中正路375巷30號 19:03
……

今天星期四,garbagethursday 是 Y,19:03 到巷口——小陳還有時間,垃圾袋還來得及拿。這個「今天有沒有收」的問法,是我翻欄位時發現這排星期欄位才做出來的。開放資料的好東西,真的要挖。

場景二:「我剛搬來,垃圾要丟哪?」

剛搬到永和的小美,連巷口在哪都還不認識,更別說垃圾車停哪。新北和台北的清運點資料都帶經緯度(字串型,算之前記得 tonumber),所以把她的座標丟進去,算距離排序:

jq -r --argjson la 25.008 --argjson lo 121.474 '
  [.[] | . + {d: (((.latitude|tonumber)-$la)*((.latitude|tonumber)-$la) + ((.longitude|tonumber)-$lo)*((.longitude|tonumber)-$lo))}]
  | sort_by(.d) | .[0:3][] | "\(.village) \(.name) \(.time)"' garbage_all.json

離她最近的三個點,連同停靠時間和地址一次列出來。搬家第一週最需要的資訊,不用問鄰居。

場景三:台北的「里」查詢

台北市的資料是 CSV(約 550KB),按里列出清運點和預計抵達時間。住大安區的人查「我這個里的點幾點來」就能直接過濾。這裡有兩個老陷阱:檔案開頭的 UTF-8 BOM 不看掉,第一個欄位名會多一個隱形字元,怎麼查都是空的;時間是 "1930" 這種 HHMM 字串,要自己轉成「19:30」才好讀。

工程面最大的坑:兩萬六千筆,一次抓不完

場景講完,說背後的工程。新北市走 JSON API,很先進——直到我看到總筆數:26,655 列(2026-09-09 實測)。而且這個 API 分頁上限 10,000 列,size 寫多大都沒用,要老實抓三頁:

curl -s "https://data.ntpc.gov.tw/api/datasets/EDC3AD26-8AE7-4916-A00B-BC6048D19BF8/json?page=0&size=10000" -o garbage0.json
curl -s "https://data.ntpc.gov.tw/api/datasets/EDC3AD26-8AE7-4916-A00B-BC6048D19BF8/json?page=1&size=10000" -o garbage1.json
curl -s "https://data.ntpc.gov.tw/api/datasets/EDC3AD26-8AE7-4916-A00B-BC6048D19BF8/json?page=2&size=10000" -o garbage2.json

抓完 jq -s add 合併。這跟昨天桃園 YouBike 的 limit=20 是同一個教訓:API 回「有資料」不等於「全部資料」,總筆數一定要對。

還有一條寫進 SKILL.md 的誠實條款:這些都是計畫停靠時間,不是即時 GPS。颱風天或連假,實際收運以各市環保局公告為準,趕時間請看車尾燈。

改名這件小事

功能做完,剩下命名。taipei-garbage 在新北進來的瞬間就變成謊言。repo 改名不難:目錄換掉、README 和 docs 連結更新、舊文件刪掉,三個 commit 解決。但「名字跟不上內容」的債放著不還,三個月後就會有人照著錯名字繼續寫。改名要趁早。

今天的成果

taipei-garbage 正式改名 taiwan-garbage:台北走 CSV、新北走 JSON API,兩萬六千多個清運點全收錄。可以回答「我家這個點今天有沒有收」、可以幫剛搬家的人找最近的清運點,台北新北都支援。實測日期照慣例寫進文件:2026-09-09。


上一篇
【Day 3】四個城市、四種格式,然後我找到了「一統江湖」的那支 JSON
下一篇
【Day 5】大反轉來了——CI 全紅的那天,兇手不是「美國 IP」
系列文
30 天養大一個開源專案:baodao-skill 從零開始7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言