API 資料取得入門:不只下載 CSV,怎麼用 AI 串接、清洗與篩選公開資料?
API 資料取得怎麼開始?用臺北市 YouBike 公開資料,練習請 AI 寫程式下載 JSON、保留原始檔、檢查欄位與異常,再篩選成 CSV。從可重跑的小案例,建立自己的資料處理流程。
每次做報表前都要下載一份 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。因為兩者都早於下載時間,表格會各自留下,讓使用者知道它們描述的時間不同。
這次資料沒有觸發程式列出的異常檢查。但這只代表通過本例的規則,後續若要拿來做特定用途,仍要檢查該用途需要的條件。
型別與異常記錄攤開之後,篩選結果才有可以回頭核對的依據。
本文程式實跑的欄位對照,快照時間為 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 官方文件。