WFduino第31課JSON格式資料運用
開放資料 (英語:Open data) 指的是一種經過挑選與許可的資料,這些資料不受著作權、專利權,以及其他管理機制所限制,可以開放給社會公眾,任何人都可以自由出版使用,不論是要拿來出版或是做其他的運用都不加以限制。(註1)
政府資訊公開法(註2)有政府資訊公開的相關規定,行政院及各縣市政府也都有相關資料公開網站。(註3)
這些開放的資料很多都是使用JSON格式(註4),因此使用時需要一點點技巧。
WFduino使用了幾個積木,幫助學生可以簡單的解讀這些資料。
——————————–
積木說明
————————
填上將要讀取資料的來源網站網址(副檔名為.json)
JSON資料檔一般都有很多筆資料,每一筆資料裡面有很多不同的欄位存放不同的資料。
填入要讀取第幾筆資料,和要讀取的欄位名稱,執行時就會去找到該筆資料
然後就可以顯示該筆資料內容
可以顯示這個JSON資料檔總共有幾筆資料。
注意:
1.因為網路讀取資料,會因網路品質影響讀取速度,請加[等待…秒],讓資料能順利讀取。
2.因為scratch積木限制,欄位名稱[content]無法直接輸入,請新增變數,再使用設定變數為欄位名稱的方式,填上變數。或是用清單列表。
—————————————
高雄捷運站列車到站廣播系統(資料來源已經不存在)
—————————————-
讀取高捷左營站的列車到站時間資料,顯示資料並說出下一班列車到站時間。
1.高雄捷運動態資料下載,請點選[https://data.kaohsiung.gov.tw/opendata/DetailList_Mrt.aspx],選擇站點,按下載
2.將JSON檔網址複製下來,左營站的網址是:[https://data.kaohsiung.gov.tw/opendata/MrtJsonGet.aspx?site=115]
3.啟動WFduino
4.[雲端積木]前面的方框打勾
5.設計程式
程式說明:
1.主畫面
2.主程式:
1.設定讀取的json檔欄位為[arrival]
2.重複讀取、顯示、廣播到站資料。
3.[說zh這裡是高雄捷運左營站],說出站名
4.[雲端資料JSON從(https://data.kaohsiung.gov.tw/opendata/MrtJsonGet.aspx?site=115)取得],設定要讀取高捷左營站的資料,前面先取得網址。
5.[讀取第1筆欄位(MRT)的雲端資料],讀取json檔第1筆資料中欄位為[arrival]的資料。這裡是指[往南岡山]下一班列車到站時間。
6.[等待5秒],確定網路資料傳輸
7.[說zh………],說出[往南岡山]下一班列車到站時間。
8.讀取第2筆往小港的資料並說出。
程式下載:高捷.sb2
參考資料:蔣天華老師講義
延伸:
1.當到站時,廣播的台詞應該要不同,請修改。
2.配合 [新DiFi第21課OLED(有機發光二極體) ]或[WFduino第33課液晶顯示器(LCD)]或[新DiFi第19課液晶顯示器(LCD)],可以在OLED或LCD上顯示到站資訊。
———————————————
空氣品質指標(AQI)自動警報系統
———————————————
1.啟動WFduino
2.[雲端積木]前面的方框打勾
3.到 (行政院環境保護署-空氣品質監測網) 點連結 http://taqm.epa.gov.tw/taqm/tw/AqiMap.aspx ,查離學校最近的測站名稱,記下來。
4.點右邊連結 [ AQI.sb2 ] (868-3737848.sb2)下載程式,開啟。
5.點右上角[綠旗],輸入[測站名稱],按[Enter]
6.自動顯示現在的AQI值及警示畫面。
PS:測站名稱前的1閃爍表示正在搜尋資料,請稍後。
程式說明:
A、舞台:
用不同顏色來表示空氣品質
B、主程式:
1.先提問[測站名稱],將答案(測站名稱)存入列表備用。
2.到環保署公開資料庫(註5),讀取json資料。
3.先計算要讀的測站是第幾筆資料。
4.讀取測站的AQI值,並加上時間記錄在硬碟中。(註6)
5.依據AQI值,判斷要顯示(說)哪一種警告畫面及背景。(註7)
請自行發揮創意設計。
6.修改程式下面的等待時間可以改變讀取更新的時間。
也可以再加上設定,當空氣品質不好超標時,自動在line群組發出警示訊息,通知全校(群組)老師。
請參考:
WFduino第29課家電也會和你line
http://blog.ilc.edu.tw/blog/blog/868/post/97509/675501
————————————–
PM2.5自動警報系統
———————————–
1.啟動WFduino
2.[雲端積木]前面的方框打勾
3.到 (行政院環境保護署-空氣品質監測網) 點連結 http://taqm.epa.gov.tw/taqm/tw/AqiMap.aspx ,查離學校最近的測站名稱,記下來。
4.點右邊連結 [ PM2.5.sb2 ] (https://2blog.ilc.edu.tw/wp-content/uploads/sites/268/868/868-3740572.sb2)下載程式,開啟。
5.點右上角[綠旗],輸入[測站名稱],按[Enter]
6.自動顯示現在的PM2.5值及警示畫面。
程式說明:
A、舞台:
用不同顏色來表示PM2.5濃度
B、主程式:
1.先提問[測站名稱],將答案(測站名稱)存入列表備用。
2.到環保署公開資料庫(註5),讀取json資料。
3.先計算要讀的測站是第幾筆資料。
4.讀取測站的PM2.5值,並加上時間記錄在硬碟中。(註6)
5.依據PM2.5值,判斷要顯示(說)哪一種警告畫面及背景。(註7)
請自行發揮創意設計。
6.修改程式下面的等待時間可以改變讀取更新的時間。
也可以再加上設定,當空氣品質不好超標時,自動在line群組發出警示訊息,通知全校(群組)老師。
請參考:
WFduino第29課家電也會和你line
http://blog.ilc.edu.tw/blog/blog/868/post/97509/675501
——————————————
顯示所有空氣品質監測資料
——————————————
1.啟動WFduino
2.[雲端積木]前面的方框打勾
3.到 (行政院環境保護署-空氣品質監測網) 點連結 http://taqm.epa.gov.tw/taqm/tw/AqiMap.aspx ,查離學校最近的測站名稱,記下來。
4.點右邊連結 [ 空氣品質監測資料(修改).sb2 ] (https://2blog.ilc.edu.tw/wp-content/uploads/sites/268/868/868-3740629.sb2)下載程式,開啟。
5.點右上角[綠旗],輸入[測站名稱],按[Enter]
6.自動顯示現在的空氣品質監測值。
程式說明:
1.先提問[測站名稱],將答案(測站名稱)存入列表備用。
2.到環保署公開資料庫(註5),讀取json資料。
3.先計算要讀的測站是第幾筆資料。
4.製作一個[監測值名稱]的清單,將要讀取的監測值名稱依序填入。
4.依序讀取測站的各項監測值,並加上時間記錄在硬碟中。(註6)
5.修改程式下面的等待時間可以改變讀取更新的時間。
注意:資料寫入清單請加上等待時間,避免寫入錯誤。
—————————————————————-
儲存資料再利用(google試算表轉換成JSON格式)
—————————————————————–
1.將上面儲存的[air.txt]檔案,存到google雲端硬碟變成google試算表。
請參考WFduino第二十六課資料存取(http://blog.ilc.edu.tw/blog/blog/868/post/97509/657968)
再到第一列上面插入一列空白列,將各欄位名稱填上去。
2.點[檔案],[發佈到網路]
3.點[發佈],[確定]。將google試算表發佈出去。
4.將試算表網址中的[代碼]複製下來(/d/……………./edit#gid),/d/後面到/edit#之間的字,例如:
https://docs.google.com/spreadsheets/d/1U23565222bbv0TZRGotfHVI/edit#gid=2096
5.將[代碼]貼在下面網址中間,
https://spreadsheets.google.com/feeds/list/[代碼]/1/public/values?alt=json
例如:https://spreadsheets.google.com/feeds/list/1U23565222bbv0TZRGotfHVI/1/public/values?alt=json
就完成google試算表的JSON格式了。
6.將上面網址貼在瀏覽器就可以看到google試算表的JSON檔
7.程式運用
取用資料時,讀取積木上的欄位名稱要記得是 [ gsx$+google試算表的欄位名稱 ]
例如:google試算表的欄位名稱為[time],積木上的欄位名稱要變成[gsx$time],要小寫喔
檔案下載:google試算表轉換成JSON.sb2
檔案網址請修改成您的網址才能正確顯示喔!
延伸:
google表單收集的資料,可以製作google試算表,也可以轉成JSON格式,讓scratch使用。
———————-
延伸:
1.中研院PM2.5 開放資料入口網站
https://pm25.lass-net.org/zh_tw/
JSON 格式 API(更新頻率:每 5 分鐘)
空氣盒子的PM2.5開放資料網址如下:
https://pm25.lass-net.org/data/last-all-airbox.json
請寫程式將您家附近測站的PM2.5資料抓下使用。
2.南投地區PM2.5開放資料網址如下:
http://www.airq.org.tw/Home/AboutData_ZH
JSON 格式 API(更新頻率:每 10分鐘)
http://www.airq.org.tw/Home/realtime10m
請寫程式將您家附近測站的PM2.5資料抓下使用。
——————–
註1:
https://zh.wikipedia.org/wiki/%E9%96%8B%E6%94%BE%E8%B3%87%E6%96%99
註2:政府資訊公開法
http://law.moj.gov.tw/LawClass/LawAll.aspx?PCode=I0020026
註3:政府資料開放平臺 http://data.gov.tw/
政府資料開放平臺,是中華民國政府根據《政府資訊公開法》規定,採開放資料的精神,所建立的一個跨部門計畫。
該計畫目前採取了CSV、XML、JSON、OLAP、TXT等格式提供資料集,任何人(包括企業)在其使用規範內,可以利用該平臺所提供的開放資料自由運用(包括重製、改作、公開傳輸、產生衍生物等)。
註4:
https://zh.wikipedia.org/wiki/JSON#WEB.E5.BC.80.E5.8F.91
JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。
JSON原始檔格式不容易判讀,可以利用線上編輯器整理,讓資料更容易觀看。
點 http://json2table.com/ 開啟轉換網頁
將原來的JSON網頁內容,全選複製後貼上這個網頁的最左邊那一欄。
然後點上面的 [ > ]
再點上面的 [ Table ]或 [Tree],就可以看到比較整齊的列表。
註5:OpenData.epa 行政院環境保護署 環境資源資料開放平台
http://opendata.epa.gov.tw/
空氣品質指標(AQI)資料說明
http://opendata.epa.gov.tw/Data/Details/AQI/?show=all
主要欄位說明 | 測站名稱(SiteName)、縣市(County)、空氣品質指標(AQI)、空氣污染指標物(Pollutant)、狀態(Status)、二氧化硫(ppb)(SO2)、一氧化碳(ppm)(CO)、一氧化碳8小時移動平均(ppb)(CO_8hr)、臭氧(ppb)(O3)、臭氧8小時移動平均(ppb)(O3_8hr)、懸浮微粒(μg/m3)(PM10)、細懸浮微粒(μg/m3)(PM2.5)、二氧化氮(ppb)(NO2)、氮氧化物(ppb)(NOx)、一氧化氮(ppb)(NO)、風速(m/sec)(WindSpeed)、風向(degrees)(WindDirec)、資料建置日期(DataCreationDate)、懸浮微粒移動平均值(μg/m3)(PM10_AVG)、細懸浮微粒移動平均值(μg/m3)(PM2.5_AVG) |
空氣品質指標(AQI)資料
http://opendata2.epa.gov.tw/AQI.json
註6:資料存取應用請參考:
WFduino第二十六課資料存取
http://blog.ilc.edu.tw/blog/blog/868/post/97509/657968
註7:
http://taqm.epa.gov.tw/taqm/tw/b0201.html
空氣品質指標(AQI)與健康影響,空氣品質指標(AQI)與活動建議
註8:
http://taqm.epa.gov.tw/taqm/tw/b0201.aspx
空氣品質指標為依據監測資料將當日空氣中臭氧(O3)、細懸浮微粒(PM2.5)、懸浮微粒(PM10)、一氧化碳(CO)、二氧化硫(SO2)及二氧化氮(NO2)濃度等數值,以其對人體健康的影響程度,分別換算出不同污染物之副指標值,再以當日各副指標之最大值為該測站當日之空氣品質指標值(AQI)。
http://taqm.epa.gov.tw/taqm/tw/b0202.aspx
細懸浮微粒( PM2.5 )
PM2.5係指微粒氣動粒徑小於2.5微米,單位以微克/立方公尺表示之,由於PM2.5較PM10更容易深入人體肺部,對健康影響更大,若細微粒又附著其他污染物,將更加深呼吸系統之危害。
懸浮微粒( PM10 )
係指粒徑在10微米以下之粒子,又稱浮游塵。主要來源包括道路揚塵、車輛排放廢氣、露天燃燒、營建施工及農地耕作等,或由原生性空氣污染物轉化成之二次污染物,由於粒徑小於10微米以下,能深入人體肺部深處,如該粒子附著其他污染物,則將加深對呼吸系統之危害。
二氧化硫( SO2 )
除自然界產生外,一般為燃料中硫份燃燒與空氣中之氧結合者,為一具刺激臭味之無色氣體,易溶於水,與水反應為亞硫酸;於空氣中可氧化成亞硫酸,為引起酸雨的主要物質之一。
氮氧化物( NOx )
氮氧化物主要包括一氧化氮(NO)及二氧化氮(NO2),其生成原因係來自燃燒過程中,空氣中氮或燃料中氮化物氧化而成,一氧化氮為無色無味氣體,稍溶於水,燃燒過程生成之氮氧化物以一氧化氮為主要成份,光化學反應中可反應成二氧化氮。
二氧化氮為具刺激味道之赤褐色氣體,易溶於水,與水反應為亞硝酸及硝酸;參與光化學反應,吸收陽光後分解成一氧化氮及氧,在空氣中可氧化成硝酸鹽,亦是造成雨水酸化原因之一。
一氧化碳( CO )
除森林火災、甲烷氧化及生物活動等自然現象產生外,主要來自石化等燃料之不完全燃燒產生,無色無味,比空氣輕,由於一氧化碳對血紅素的親和力比氧氣大得多,因此,可能造成人體及動物血液和組織中氧氣過低,而產生中毒現象。
臭氧( O3 )
係一種由氮氧化物、反應性碳氫化合物及日光照射後產生之二次汙染物。具強氧化力,對呼吸系統具刺激性,能引起咳嗽、氣喘、頭痛、疲倦及肺部之傷害,特別是對小孩、老人、病人或戶外運動者有較大影響,同時對於植物,包括農作物有不良影響,對於人造材料,諸如橡膠(輪胎等)及油漆等,均能造成危害。
http://taqm.epa.gov.tw/taqm/tw/b0203.aspx
即時空氣品質指標(AQI)計算方式如下:
各測項即時濃度依下列公式計算後,再對應下表得出O3、PM2.5、PM10、CO、SO2、 NO2等6個測項之即時副指標值,再取出其中最大值為即時空氣品質指標,該最大值測項即為指標污染物:
O3,8hr | : | 取最近連續8小時移動平均值 (例如今日上午10點發布的O3的8小時濃度平均值,是取今日上午2點至上午9點監測數據的平均值。) |
O3 | : | 取即時濃度值 |
PM2.5 | : | 0.5 × 前12小時平均 + 0.5 × 前4小時平均 (前4小時2筆有效,前12小時6筆有效) |
PM10 | : | 0.5 × 前12小時平均 + 0.5 × 前4小時平均 (前4小時2筆有效,前12小時6筆有效) |
CO | : | 取最近連續8小時移動平均值 (例如今日上午10點發布的CO的8小時濃度平均值,是取今日上午2點至上午9點監測數據的平均值。) |
SO2 | : | 取即時濃度值 |
SO2,24hr | : | 取最近連續24小時濃度平均值 (例如今日上午10點發布的SO2的24小時濃度平均值,是取前1天上午10點至今日上午9點監測數據的平均值。) |
NO2 | : | 取即時濃度值 |
污染物濃度與即時副指標值對照表
- 一般以臭氧(O3)8小時值計算各地區之空氣品質指標(AQI)。但部分地區以臭氧(O3)小時值計算空氣品質指標(AQI)是更具有預警性,在此情況下,臭氧(O3)8小時與臭氧(O3)1小時之空氣品質指標(AQI)則皆計算之,取兩者之最大值作為空氣品質指標(AQI)。
- 空氣品質指標(AQI)301以上之指標值,是以臭氧(O3)小時值計算之,不以臭氧(O3)8小時值計算之。
- 空氣品質指標(AQI)200以上之指標值,是以二氧化硫(SO2)24小時值計算之,不以二氧化硫(SO2)小時值計算之。
—————————————
相關連結:
PM2.5環境監測超簡單(第二十四課)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/652136
WFduino第二十六課資料存取
http://blog.ilc.edu.tw/blog/blog/868/post/97509/657968
空氣品質指標(AQI)自動警報系統(簡易版)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/677018
空氣品質指標(AQI)自動警報系統(WFduino第30課)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/677043
WFduino第29課家電也會和你line
http://blog.ilc.edu.tw/blog/blog/868/post/97509/675501