iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
自我挑戰組

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

【Day 16】台電主站 403:官網擋程式,隔壁主機免 key 給 JSON(實測 2,639.7 萬瓩)

  • 分享至 

  • xImage
  •  

先講結論:taiwan-power 的技能文件裡有一句看起來像玩笑的警告——「台電主站會 403,要走 service.taipower.com.tw」。2026-09-23 實測:www.taipower.com.tw 帶瀏覽器 UA 是 403,不帶 UA 也是 403;隔壁 service.taipower.com.tw 的 opendata 路徑是 200,0.7KB,目前用電 2,639.7 萬瓩、預估備轉率 21.88% 綠燈,一次給齊。地雷圖鑑再添一條:正門關著的時候,先找官方自己開的側門。

正門 403,側門 200

台電官網掛在 CDN 後面,擋海外與程式存取。實測兩次:帶 Mozilla/5.0 的 UA 打 https://www.taipower.com.tw/ 回 403,空手(curl 預設 UA)打也回 403——不是 UA 的問題,是 IP 與存取型態的問題。

但台電不是不給資料。同一個機構的 service.taipower.com.tw 把「今日系統供需狀況」做成免 key 的 JSON,不用註冊、不用登入。政府資料的門常常不止一扇:官網是給人看的,opendata 主機是給程式走的。在官網門口吃 403,不代表資料不存在,代表走錯門。

0.7KB 裝四段:現在、預估、昨日、即時

回傳的 records 只有 4 個物件,時間軸卻很完整:目前用電(curr_load)、今日預估(尖峰負載、備轉容量、備轉率、燈號、尖峰時段)、昨日實績(yday_ 開頭整套同欄位)、即時最高供電(real_hr_ 開頭,附更新時刻)。一份 690 bytes 的 JSON,把「電夠不夠」這件事的四個時間切面全包了。

2026-09-23 03:40(台灣時間)發布的一批,實測整理:

欄位 實測值
目前用電 2,639.7 萬瓩(使用率 67%)
今日預估尖峰負載 3,800.0 萬瓩(13:00-16:00)
預估備轉容量率 21.88%(綠燈)
昨日尖峰負載 3,686.2 萬瓩(備轉率 26.17%,綠燈)
即時最高供電 3,892.0 萬瓩(01:45 更新)

五種燈號,和兩種曆法並存

備轉容量率的燈號對照:綠燈 ≥ 10%(供電充裕)、黃燈 6-10%(吃緊)、橘燈 < 6%(警戒)、紅燈是備轉容量低於 900MW——注意紅燈看的是絕對值不是百分比——黑燈是備轉轉負(限電準備)。今天 21.88%,穩穩的綠燈。

格式地雷有兩個半。第一:publish_time 是民國年(115.09.23(三)03:40),real_hr_peak_time 卻是西元(2026.09.23 01:45)——同一份 JSON 兩種曆法並存,不轉換就回報,年份直接差 1,911 年。第二:success 是字串 "true" 不是布林值,型別比對會咬人。剩下半個:result.resource_id 永遠是 "-",純裝飾,別拿它當依據。對了,單位是萬瓩,1 萬瓩 = 10 MW。

實測:一行拿今日備轉率

curl -sm 20 -A 'Mozilla/5.0' 'https://service.taipower.com.tw/data/opendata/apply/file/d006020/001.json' \
| jq -r '.records[1] | "\(.publish_time) 預估尖峰 \(.fore_peak_dema_load) 萬瓩,備轉率 \(.fore_peak_resv_rate)% (\(.fore_peak_resv_indicator))"'

2026-09-23 實測輸出:

115.09.23(三)03:40 預估尖峰 3800.0 萬瓩,備轉率 21.88% (G)

錯誤處理(寫進 SKILL 的規矩)

  • 403 不代表沒資料:主站被 CDN 擋是常態,一律走 service 主機的 opendata 路徑。
  • 凌晨跨日:午夜前後 records 可能混到前一天,回報必附 publish_time,讓使用者自己判斷時點。
  • curl 失敗先帶瀏覽器 UA 重試;持續失敗就回報資料源異常——不編備轉數字。
  • 這支只看全台總量;分區限電名單、個別電號用電量不在範圍,如實說不支援。

第 16 天。能驗證的才寫進文件——這次連「官網會擋人」這件事本身都是當場實測出來的,帶不帶 UA 都 403。


上一篇
【Day 15】1,180 場停車剩位:-9 不是停滿,CI 上線當晚抓到真漂移
系列文
30 天養大一個開源專案:baodao-skill 從零開始16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言