一、前由
前2天有位夥伴反應一個問題,之前讀取線上的 空氣品質指標(AQI) 資料時可以秒開,可是現在已經換成新的網址,結果讀取時間變得得慢,想請教大家有沒有解法。
1. 空氣品質指標(AQI) 舊網址:http://opendata2.epa.gov.tw/AQI.json
2. 空氣品質指標(AQI) 新網址:ttps://data.epa.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate desc&format=JSON
二、測試、找原因
直接用瀏覽器開AQI 舊網址,果然秒開;接著瀏覽器再開新 AQI 網址,心裡默數,回應時間不一定,從6秒~11秒都有,換成 Windows PowerShell終端機,利用 curl 指令來抓取新網址,也是一樣的回應時間。
查了資料,發現新網址是環保署的服務,也有提供
API 的操作手冊, 裡面有提供 filter 來過濾回傳的內容資料,參考操作手冊,直接在網址上
加上 filter 的條件,情況還是一樣,而且 filter 條件並沒有作用。
不死心,又查了一下資料,有篇文章「MicroPython 空氣品質 AQI 獲取之方式」有提到抓取資料改成要申請 API_KEY、換成 HTTPS 協定,以及利用 filters 的 API 語法來指定查詢的項目。所以我就去申請了一組 API_KEY 準備看看是否正常,唉!無效,還是一樣慢,API 語法也沒有作用……
總覺得不太可能提供給全國查詢的服務會這麼慢,所以直接利用 php 去抓網頁資料,Guess What ?
秒回啊!
三、實作
利用簡單的語法寫了簡單抓不同城市的 AQI 資料,回應速度快,滿意,結案!
<h2>空氣品質指標(AQI)查詢</h2>
<form action="" method="POST">
<select name="county" id="">
<option value="新北市">新北市</option>
<option value="高雄市">高雄市</option>
<option value="臺北市">臺北市</option>
<option value="臺中市">臺中市</option>
<option value="臺南市">臺南市</option>
</select>
<input type="submit" value="查詢">
</form>
<?php
if (isset($_POST["county"]) && $_POST["county"] != "") {
$county = $_POST["county"] ?? '新北市';
$key = 'e8dd42e6-9b8b-43f8-991e-b3dee723a52d';
$filter = 'county,EQ,' . $county;
$url = sprintf('https://data.epa.gov.tw/api/v2/aqx_p_432?filters=%s&api_key=%s&format=json', $filter, $key);
$data = file_get_contents($url);
$jsondata = json_decode($data);
echo ('<h2>' . $county . '</h2>');
var_dump($jsondata->records);
}
四、後記
後來發現 Windows 底下的 curl 指令有點"不好操控",利用 Linux 環境直接下 curl 指令,回應速度也是秒開。