Python 及 iOS 捷徑|使用 Untangle 取得澳門天文台未來七日天氣預報
我之前介紹過澳門政府數據開放平台 data.gov.mo 中有若干數據可以使用,包括獲取澳門停車場剩餘車位量,今次介紹同樣是 XML 格式的澳門天文台 API,取得未來七日天氣預報。
API 網址為:https://xml.smg.gov.mo/c_7daysforecast.xml
由於 API 來源是 XML,同樣的我建議使用 Untangle 庫拆解。
每逢遇到新的API,我們先拆解一下這個API的結構及包含的各項資訊欄位。從天文台網站的說明文檔可以得知,當中的狀態會有預測的最高溫及預測的最低溫度。
另外亦有天氣狀態對照表。如果我們希望使用這個對照表,由於這個對照表不是純數字,而是有英文字母的一個 key-value 對,看來是需要使用Python的 Dict 字典類型。
而其他欄位,說明文檔沒有說明,但從文字可以看到有溫度、濕度、天氣簡述文字等。
首先我們嘗試連接API,看是否能正確取得相關資訊。Untangle會將XML轉化成為Python物件,所以我們可以通過 dir
來查看取得的 XML 元素結構樹。
dir
打開第一層是最頂的元素,作為更只有一個,再打開第二層,可以看到兩個元素節點, Custom
是我們需要的,再打開可以見到七個 WeatherForecast
。這分別對應七天天氣預測中的每一天。
由於 WeatherForecast
有七個。所以打開這層將會得到一個 list 列表,列表數量七個,對應就是每一日的天氣預測。我們可以使用 for 循環讀出每日的數據。
在 for 循環中,我們的視野從宏觀的列表變成微觀的單格處理思維。針對每一格,我們繼續通過 dir
查看每日天氣的 XML 元素樹結構,可以看到每日天氣包括以下溫度濕度等各項屬性
這時我們可以按功能需求看我們需要那些屬性。例如純粹只顯示最低溫度,則需要 Temperature[1]
當中的 Value
的 cdata
。列印出來讀出以下結果。
咦,每個數字是哪一天也不清楚呢。所以我們可以順便把日期的欄位 ValidFor
也一併印出。
現在資料開始實用了。
我們進一步把最高溫度也印出,就可以有一個像樣的七日天氣預報了。若想再詳細一點,也可以把天氣狀態描述也打印出來。
就這樣,要詳細還是要簡單,端看各位如何使用每日天氣中的各資訊欄位。
以下為最終的版本,省去了詳情描述,只顯示日期及最低最高溫。
import untangle url = "https://xml.smg.gov.mo/c_7daysforecast.xml" data = untangle.parse(url) for forecast in data.SevenDaysForecast.Custom.WeatherForecast: date = forecast.ValidFor.cdata high = forecast.Temperature[0].Value.cdata low = forecast.Temperature[1].Value.cdata print(f"{date}: {low} 至 {high} 度")
而當我們把這個資訊放到 iPhone 上使用 Pyto 運行,則可以在電話中運行查看。
另外若配合捷徑app,可以設定使用語音通過語音觸發 Siri 運行這段 Python 程序,再取得印出來的數據然後讀出來。又或者配合之前提及捷徑的每日定時自動觸發功能。
以下為繼承《iOS 捷徑自動化之每朝說早晨及讀隨機金句》例子的指令塊,最後執行天氣預報讀音。
— 麥麥寫的 麥誠 Makzan,2022-02-03。