API 資料取得入門:不只下載 CSV,怎麼用 AI 串接、清洗與篩選公開資料?

API 資料取得怎麼開始?用臺北市 YouBike 公開資料,練習請 AI 寫程式下載 JSON、保留原始檔、檢查欄位與異常,再篩選成 CSV。從可重跑的小案例,建立自己的資料處理流程。

Share
API 資料取得:從 YouBike JSON 轉成可篩選的 CSV
本文程式的實跑畫面,資料快照為 2026 年 10 月 20 日。資料來源:臺北市政府交通局,依政府資料開放授權條款第 1 版使用。

每次做報表前都要下載一份 CSV,再重新篩選欄位,最花時間的常常是把資料準備好。API 資料取得能透過串接介面,讓程式按來源提供的方式拿資料,省去重複操作。

但把網址貼給 AI,並不代表會拿到能直接分析的表格。來源可能回傳一大包 JSON,裡面的欄位名稱、數字與更新時間,都需要先看懂。

JSON 是用欄位名稱搭配值保存資料的文字格式。本例裡,一筆資料代表一個 YouBike 站點,因此能整理成一列一站的試算表。

臺北市交通局有公開的即時資料檔,不用申請金鑰就能下載。因為少了帳號設定,練習時可以先專心確認資料如何進來、如何整理。

如果你會用試算表篩選資料,卻還不會自己串接,可以先從這種公開來源開始。重點是完成一份能追到來源、能重跑的 CSV,再讓 AI 幫忙把流程變成工具。

這個起點也有範圍:官方給的是當次站點資訊,下載後由我們在電腦上篩選。要把它用對,得先分清楚資料網址、資料格式與篩選各自負責什麼。

API 資料取得和下載 CSV 差在哪?

CSV 是表格檔案格式,API 是程式提出請求、接收資料的介接方式,兩者可以一起使用。

例如一個資料服務,可以透過 API 回傳 CSV。也可以像這次的來源,直接提供一份固定網址的 JSON 檔。JSON feed 就是持續更新、供程式讀取的資料檔,本例從這種簡單來源練習。

所以「用了 API」不等於資料已經整理好了。程式拿到的內容,仍得依欄位定義轉成你要的表格,才能接著分析。

以下把來源、格式與操作分開看,遇到新資料時就比較容易判斷下一步。

你看到的東西 負責什麼 本例的做法
資料網址 指出向哪裡取得內容 使用官方公布的 JSON 網址
請求方式 告訴對方想做什麼 用 GET 讀取資料
回傳格式 決定拿到的內容怎麼組織 讀到 JSON,再整理成表格
篩選條件 決定最後留下哪些列 下載全檔後,在自己的電腦篩選

GET 可以理解成向網址讀取資料的請求。表格中的篩選發生在下載之後,因此這個範例沒有向來源傳送行政區參數。

若資料只分析一次,直接下載 CSV 已經方便。若每週都要取得同一來源、保留固定欄位,程式就能幫你重做這些操作,但 CSV 本身也能由程式下載。

知道自己要重複哪個動作後,接著要挑一個能直接下載、也看得到欄位定義的來源。

用 YouBike 練習 API 資料取得,可以回答什麼問題?

這份資料適合練習找出「快照中,大安區有哪些站點至少有 5 輛可借車」。問題夠小,才容易逐列確認程式有沒有選對。

來源是臺北市政府交通局的 YouBike2.0 即時資料,官方頁面提供 JSON 下載網址,並標示免費、每 1 分鐘更新。

這裡的免費是指公開資料。因為這個網址可直接讀取,本例不需帳號或 API key。key 是資料服務用來辨認使用者的金鑰,其他服務可能會要求申請。

資料欄位的意思則可以對照臺北市資料大平臺的說明。先確認站點代號、行政區與車數分別在哪個欄位,才不會讓 AI 依名稱猜測。

這份資料回答的是某個時間點的站點狀況。因為可借車數只是一個存量,一張快照無法告訴你當天借出了多少車,也不能拿來判斷長期需求。

時間也要分開記。程式下載完成的時間,只能證明你何時取得檔案。來源的發布時間和各站更新時間,才是在說資料內容何時更新。

官方採用政府資料開放授權條款第 1 版。本例會在文章、來源紀錄檔與對照圖標示機關、資料名稱、來源與授權,讓別人知道表格從哪裡來。

問題與欄位定下來,AI 才能替你寫出有明確輸入、輸出與檢查方式的程式。

怎麼請 AI 串接 API,才不會只拿到一段跑不動的程式?

把官方網址、篩選問題與 API 串接的驗收條件一起交給 AI,會比只說「幫我抓資料」更容易檢查成果。因為你已經說清楚要留下什麼,它就比較不容易擅自加上補值或刪除資料的動作。

給 AI 的 API 串接需求,要能對照輸出檔案

你可以把以下需求貼給能協助撰寫程式的 AI,並附上前面的官方資料頁。

我要練習 API 資料取得,請寫一個 Python 3.9 以上可執行的程式 fetch_clean.py。
只使用標準函式庫,不要求安裝額外套件。

資料來源:
https://tcgbusfs.blob.core.windows.net/dotapp/youbike/v2/youbike_immediate.json

這是公開 JSON feed,用 GET 下載整份檔案。
不要加 API key,也不要編造行政區 query 參數。

下載設定:
連線等待上限 30 秒。失敗要顯示原因,不能用空表冒充成功。
保留原始回應 raw.json,另外記錄來源網址、下載時間與檔案雜湊。

整理規則:
sno 保留文字,確認每筆都有值且沒有重複。
將 Quantity、available_rent_bikes、available_return_bikes
檢查為非負整數。缺值或不合法值不可自動補 0。

檢查必要欄位與來源時間格式,異常寫進 quality_flags。
保留所有原始列對應的清洗結果,另輸出欄位映射表。
act 保留原始值,不解讀狀態碼,也不作篩選。

在本機篩選:
sarea 為大安區,available_rent_bikes 至少 5,且 quality_flags 空白。
輸出 cleaned.csv、filtered.csv 與總列數、異常列數、選中列數。

提供 --replay 功能,讀取既有快照後重做整理與篩選,完全不連網。
讓我能比較兩次輸出的內容是否一致。

提示裡的 query 是放在網址後面、傳給資料服務的查詢條件。但本例來源沒有使用這種查詢方式,所以行政區條件要寫進下載後的程式。

雜湊則是由檔案內容算出的摘要,可用來比對檔案有沒有改動。它方便檢查原始快照是否相同,但不能替你證明資料內容正確。

先執行 API 取資料程式,再檢查產生的檔案

想先跑已經測過的版本,可以下載 API 資料取得練習包,解壓縮後會看到 fetch_clean.py、使用說明與本次快照。

在電腦裝好 Python 3.9 以上版本後,開啟終端機並切換到解壓縮後的資料夾,再執行以下指令。也可以把自己請 AI 寫的程式存成相同檔名,逐項對照結果。

python3 fetch_clean.py --out run

run 是這次結果要存放的資料夾。範例程式會拒絕覆蓋既有資料夾,因此重抓最新資料時要換個名稱,例如 run2,也能把兩次快照分開留下來。

若終端機找不到 Python,先請 AI 依你的作業系統協助確認安裝與執行方式。若程式收到錯誤訊息,就把錯誤和原程式一起交給它修正,別直接接受它重新生成的示範數字。

程式有回應只是開始。資料要進報表,還得把型別與不合理的內容攤開檢查。

JSON 轉 CSV 時,要清洗哪些地方?

清洗先處理會影響判斷的欄位,遇到缺值或異常則保留記號。因為「不知道有幾輛車」和「確定是 0 輛」意思不同,把空白直接補 0,會讓後續分析分不清兩者。

先看欄位,再決定怎麼轉換

以下是本例保留的主要欄位。左欄是來源名稱,右欄是整理後準備放進表格的名稱。

原始欄位 整理後欄位 檢查方式
sno station_id 保留文字,檢查空白與重複
sna station_name 保留站名,檢查缺值
sarea district 保留行政區,供本機篩選
Quantity capacity 檢查為非負整數,代表總停車格
available_rent_bikes rent_bikes 檢查為非負整數,代表可借車數
available_return_bikes return_spaces 檢查為非負整數,代表空位
srcUpdateTime source_published_at 保留來源發布時間,檢查格式
mday station_updated_at 保留站點更新時間,檢查格式
act act 原值保留,不解讀代碼

表格裡的站點代號保留文字,是因為它的用途是辨認站點,不是拿來加減。總停車格則要按實際 JSON 裡的 Quantity 讀取,大寫 Q 不能自行改掉。

型別是資料的種類,例如文字、整數或小數。來源若把數字寫成文字,程式可以在確認內容合法後轉成整數,但要把不合法的列標出來,不能讓轉換失敗的值混進統計。

本例也會檢查可借車數或空位是否各自超過總停車格。但「可借加可還不等於總格數」不直接當成錯誤,因為光看這個檔案,還不足以判斷差額原因。

真實資料整理後,會長什麼樣子?

這次實際下載時間為 2026 年 10 月 20 日 16:55:24,臺灣時間。原始快照共有 1,822 列,站點代號沒有重複,整理後仍保留全部列數。

以第一列為例,來源站點代號是 500101001,區域是大安區,可借車數是 20。整理後代號仍是文字,車數則以整數保留,方便用「至少 5」的條件比較。

同一列的站點更新時間是 16:54:03,來源發布時間是 16:54:52。因為兩者都早於下載時間,表格會各自留下,讓使用者知道它們描述的時間不同。

這次資料沒有觸發程式列出的異常檢查。但這只代表通過本例的規則,後續若要拿來做特定用途,仍要檢查該用途需要的條件。

型別與異常記錄攤開之後,篩選結果才有可以回頭核對的依據。

API 資料取得的原始 JSON 與整理後欄位對照 本文程式實跑的欄位對照,快照時間為 2026 年 10 月 20 日 16:55:24。資料來源:臺北市政府交通局,依政府資料開放授權條款第 1 版使用。

怎麼核對篩選結果,讓同一份資料重跑一致?

先逐列核對篩選條件,再用同一份原始檔重跑,能分開檢查資料變動和程式變動。因為這個 API 練習的即時來源會持續更新,直接重新下載,拿到不同結果並不一定是程式出錯。

核對留下來的列,也核對被排除的列

本例的條件是大安區、可借車數至少 5,並通過欄位與型別等檢查。把 filtered.csv 用試算表打開,就可以直接按行政區與車數核對。

接著從完整的 cleaned.csv 找一列車數低於門檻、或區域不同的資料,確認它沒有進入篩選結果。這能檢查程式是否把「而且」誤寫成「或者」,只看總筆數很難發現這種錯誤。

以下是本次快照的執行結果,數字只用來核對這份練習資料。

檢查項目 本次結果
原始資料 1,822 列
清洗後保留資料 1,822 列
不重複站點代號 1,822 個
觸發本例異常規則 0 列
符合本機篩選條件 121 列

表格中的 121 列只代表這次快照符合條件的站點。你重新下載時,可借車數可能改變,因此應核對自己的結果與原始檔,不必追求相同筆數。

用原始快照重跑,避免把資料更新誤認為程式錯誤

replay 在這裡是「讀取已保存的原始檔,再重做一次整理」。因為不連網,輸入保持相同,適合檢查改程式前後是否仍得到一樣的結果。

範例程式可以這樣執行,讀取 run 裡的原始檔,另把結果放進新的 replay 資料夾。

python3 fetch_clean.py --replay run --out replay

本次重跑後,清洗結果、兩份 CSV 與欄位映射表的內容摘要,都與前一次一致。這證明同一份輸入在這次流程裡得到相同輸出,逐列核對則負責確認條件寫得對不對。

如果之後抓取失敗,先看錯誤發生在哪一步。連線逾時代表沒有在等待時間內完成。JSON 解析失敗代表內容無法按預期格式讀取。必要欄位消失,則要回官方資料頁檢查是否改版。

因為這些錯誤的原因不同,請 AI 修程式時也要附上原始訊息。用空表或自動改欄位名稱掩蓋錯誤,反而會讓後續報表看起來正常、內容卻少了資料。

若資料來源只有網頁,沒有適合的下載或介接方式,才需要再評估爬蟲。先看過公開資料的取得方式,也比較容易理解兩者各自省下哪些操作。

延伸閱讀:Replit Agent 教學:AI 爬蟲如何變成金融 Dashboard?

這份 CSV 若能穩定重做,後續才值得加上介面,讓使用者自己改條件。

API 資料取得常見問題

一定要先申請 API key 嗎?

不一定,要看資料提供者的規則。本例的官方 JSON 網址可以直接讀取,但其他服務可能需要帳號、金鑰或付費方案,所以換來源時要重新看文件。

公開 JSON feed 和其他 API 教學有什麼差別?

本例是直接下載持續更新的 JSON 檔,適合先練習讀取與整理。其他介接服務可能讓你傳送查詢條件,或分頁取得資料,因此本例跑通後,還要依新服務的文件調整請求。

API 資料取得後,想只留某個行政區怎麼做?

本例先下載全檔,再於本機比對 sarea。若要改成信義區,就改程式的篩選條件。不要在官方網址後自行加參數,期待來源會替你篩選。

可以直接拿這個練習當成即時找車服務嗎?

本例只產生下載當次的結果,讀者開啟 CSV 時內容不會自行更新。若要提供找車工具,還需要設計更新、資料過期顯示與讀取失敗時的處理方式。

AI 串接 API 後,產生的數字可以直接用嗎?

先要求它保留原始資料,並指出結果對應哪個欄位。因為合理的數字也可能是示範值,能回到原始列核對,才有辦法把程式結果和 AI 的說明分開檢查。

先讀懂一個來源,再把同樣的檢查方式帶到下一個來源,會比同時串接很多服務容易定位問題。

先跑通一份資料,再把流程做成能用的工具

如果資料只用一次,下載 CSV 已經夠用。如果每次都得重新拿檔案、改欄位和篩條件,就值得把這套流程留下來。

你可以先把練習中的行政區或數量門檻換掉,確認輸出跟著改變。因為來源、原始檔和檢查規則都還在,之後擴充功能時,也比較知道錯誤從哪裡開始。

若想從這個公開資料例子,進一步練習電商與共享單車資料串接,可以接著了解 Skill Shot 16|零基礎也能玩 API:用 AI 加速前端串接與資料篩選,直播時間為 2026 年 11 月 3 日 20:00,臺灣時間。

這門課適合想用 AI 協助撰寫串接程式、清洗與篩選資料的人。先完成本例,再帶著自己想改的條件練習,會比較容易把課程操作接回工作需求。

如果還在找值得自動化的重複工作,可以先從資料整理、報表與文件處理的具體情境挑一項。

延伸閱讀:2026 新版 ChatGPT 用法大全:100 個真的能完成工作的使用情境(ChatGPT Work、Codex 分類)

先用自己的問題重跑這個 API 小練習,再決定要把哪個重複操作交給程式,後續的學習也會更有方向。

資料來源:臺北市政府交通局,2026,YouBike2.0臺北市公共自行車即時資訊。此開放資料依政府資料開放授權條款第 1 版釋出。本文資料整理與排版為本站製作。程式讀取方式可參閱 Python urllib.request 官方文件與 Python JSON 官方文件。