2017年7月17日 星期一

[Ted好玩專欄:AI2] 紫外線強度查詢App抓虫記@Ted好玩自學工坊


紫外線強度查詢App抓虫記@Ted好玩自學工坊
Ted Lee
Jul. 17, 2017

Line:ted2016.kpvs
Email:Lct4246@gmail.com
Blog(泰布布):http://lct4246.blogspot.tw/
URL(Ted's Bu Bu):https://sites.google.com/site/lct4246/
FB(Ted's BuBu):https://www.facebook.com/ted.lee.10420321
88x31.png[1]
本文將以手把手的方式帶領讀者破解《紫外線強度查詢[2]一文的抓虫奇幻之旅!


  • 現象:下載該文文末的getUV_v2.aia安裝後執行時發生如图1的錯誤!

图1:getUV_v2.aia執行錯誤畫面。

  • 錯誤分析
1.觀察:仔細觀看图1的錯誤說明,它指出是List(就是C、Java…的陣列(array)結構)的索引值(index)过大(图2) 。
图2:錯誤訊息指出List的索引值異常。


2.比对:原著上伝的時間為2015年6月8日,而筆者測試的時間為2017年7月16日。隨後筆者詢問原著阿吉老師(曾吉弘),他表示此範例發表後陸續在課堂上教學時皆能正常執行!故應該研判可能肇因為新舊版程式執行环境的相容性(compatibility)資料格式(data format)有改或API呼叫方式有異动…。


图3:原著上伝的日期。


图4:中央氣象局釋出的34筆全省各縣市紫外線開放資料的JSON格式檔。

而剩下的程式則依各縣市名稱而將每筆資料切出SiteNameUVIPublishAgencyCountyWGS84LonWGS84LatPublishTime七個欄位值──編譯程式(compilers)的專業術語稱為标記(tokens)

图5:將中央氣象局的全省各縣市紫外線資料讀入json變數之中。

所以,我們將此json變數印出在畫面上(图6),並將原中央氣象局的JSON資料丟號到線上版的JSON剖析程式对照之(图7)。

图6:在app中將json變數印出。

图7:图4的JSON資料之視覺化呈現。

一比較图6及图7後,眼尖的讀者應該赫然發現了大白的弟弟小白(真「像」大白):欄位名稱順序不一樣!

图6:County、PublishAgency、PublishTime、SiteName、UVI、WGS84Lat、WGS84Lon
图7:SiteName、UVI、PublishAgency、County、WGS84Lon、WGS84Lat、PublishTime

而且,图6是照英文字母順序由小到大排序(sorted)的!
  • 結論:最後,我們將原始程式的經緯度取出標記的欄位順序調整如图8所示即大功告成,修改後的程式為getUV_V3_TedLee_07172017.aia。此外,請留意JSON、C、Java、Android…類似陣列結構的東東都是從0起跳,但這個AI2是從1喔!


图8:取經緯度時切割標記的欄位順序調整。

  • 高手必練1:將图8改為欄位順序不固定時仍可順利抓到正確的欄位值。
  • 高手必練2:选完縣市後立即出該縣市的紫外線指數。

参考資料:
  1. 六種授權條款
  2. [App Inventor 教學] 取得中央氣象局即時紫外線強度資料,CAVEDU教育团隊技術部落格,曾吉弘。