Makzan
Makzan

我管理世界職業技能競賽之網站技術項目、舉辦本地設計與開發賽事、開課分享技術心得。一個用網頁來表達自己的作家。

Python 及 iOS 捷徑|使用 Untangle 取得澳門天文台未來七日天氣預報

我之前介紹過澳門政府數據開放平台 data.gov.mo 中有若干數據可以使用,包括獲取澳門停車場剩餘車位量,今次介紹同樣是 XML 格式的澳門天文台 API,取得未來七日天氣預報。API 網址為:https://xml.smg.gov.mo/c_7daysforecast.xml

我之前介紹過澳門政府數據開放平台 data.gov.mo 中有若干數據可以使用,包括獲取澳門停車場剩餘車位量,今次介紹同樣是 XML 格式的澳門天文台 API,取得未來七日天氣預報

API 網址為:https://xml.smg.gov.mo/c_7daysforecast.xml

澳門天文台七日天氣預報 API

由於 API 來源是 XML,同樣的我建議使用 Untangle 庫拆解。

每逢遇到新的API,我們先拆解一下這個API的結構及包含的各項資訊欄位。從天文台網站的說明文檔可以得知,當中的狀態會有預測的最高溫及預測的最低溫度。

天氣中的 Type 欄位意思,當中 1 及 2 為預測最高及最低溫度

另外亦有天氣狀態對照表。如果我們希望使用這個對照表,由於這個對照表不是純數字,而是有英文字母的一個 key-value 對,看來是需要使用Python的 Dict 字典類型。

天氣狀態代碼對應狀態

而其他欄位,說明文檔沒有說明,但從文字可以看到有溫度、濕度、天氣簡述文字等。

首先我們嘗試連接API,看是否能正確取得相關資訊。Untangle會將XML轉化成為Python物件,所以我們可以通過 dir 來查看取得的 XML 元素結構樹。

dir 打開第一層是最頂的元素,作為更只有一個,再打開第二層,可以看到兩個元素節點, Custom 是我們需要的,再打開可以見到七個 WeatherForecast。這分別對應七天天氣預測中的每一天。

使用 dir 查看 Untangle 拆解的元素樹物件

由於 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 運行,則可以在電話中運行查看。

Pyto 運行介面

另外若配合捷徑app,可以設定使用語音通過語音觸發 Siri 運行這段 Python 程序,再取得印出來的數據然後讀出來。又或者配合之前提及捷徑的每日定時自動觸發功能。

在自動化捷徑中加入運行 Pyto 功能

以下為繼承《iOS 捷徑自動化之每朝說早晨及讀隨機金句》例子的指令塊,最後執行天氣預報讀音。

iOS 捷徑的 Pyto 運行指令塊

— 麥麥寫的 麥誠 Makzan,2022-02-03。

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论