IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

N年後‧探討利用Google Map API‧將Yahoo Weather數據應用在地圖之上

01. 經過N年後,PHP版本不斷更新,舊有程式碼不能再使用,更是常常發生之事,特別是那些需要依靠外來資料的程式碼。今天的題目,就是如何把舊有的程式碼,在武漢肺炎疫情下作一次更新。

02. 之前要取得Yahoo Weather的資料,可直接用URL連結取得。但自2019年Yahoo Weather改用了OAuth的機制,要取得Yahoo Weather的資料,就非要授權利用OAuth 2.0方法取得資料。幸好『Yahoo Weather API Documentation』有內容,清楚列明多款程式碼,如何取得Yahoo Weather資料,只要作少少改動,便能取得Yahoo Weather資料。

03. 既然要更新舊有程式碼,順便再看看之前用開的PHP Framework原來也有更新,但原來更新的不只是版本,程式設計更用了另一種模式。亦即是,要改的,不單是舊有程式碼,更要學習PHP Framework的新設計方法。想想需要的只是一個可以用的程式,更重要是N年後,PHP版本再更新,除非是有功能已經不再建議使用(deprecated),否則根本沒有需要,再花時間在PHP Framework更新上。正如Windows 7明明是用得不錯也沒有問題,Microsoft硬要強迫轉用Windows 10,但我電腦的工作卻和Windows 7一點分別也沒有,只有比之前更慢了。

04. 決定了方向,將之前在PHP Framework的程式,再花時間拆回傳統的PHP程式碼,程式基本上已經可以運行。

05. 但程式一直出現的反應遲緩問題,不知是更新了PHP版本定是OS原因,今天看起來只有更遲緩。之前的做法,是在取得Google Map的縮放(zoom)數值後,用AJAX取得JSON城市串列,再用串列一個個讀取城市的天氣資料,看似是一步步取得資料的方法,但卻也是反應遲緩問題所在,因為每次也需要等待取得及確認JSON資料,先可以再作下一步行動。所以今次更改了這部份設計,直接將Google Map縮放(zoom)數值用AJAX方式交由伺服器的PHP程式作運算,之後將需要的城市天氣資料,以陣列(array)方式傳回資料。

06. 之前時間一直以香港為中心,即是明明是加拿大溫哥華的天氣資料,卻也只顯示香港時間,好處當然是香港用戶知道當地現時天氣資料,但壞處就是當溫哥華用戶看到天氣資料時,卻和他的時區不一樣,變相用處不大。而也因為這個問題,引伸出不單是時區問題,更有冬夏令時間時區的分別。固程式也會因應JSON資料內的時區資料再作運算。

07. 最後,用戶自訂的城市設計,因應Yahoo Weather API改動,所以設計為只要輸入城市及國家資料,程式便自己尋求對應的WOE ID。好處當然是不用用戶去尋找WOE ID資料,但有時當然是Yahoo Weather API找不到需要的WOE ID。

08. 也是因為上面的原因,原來城市數目預設有417個,今次也會減少為250個。

09. 完成後的結果。



發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *