[人工智障計畫] #4 突發,到底震完沒?|用氣象署資料 API 來做地震訊息模組吧!

更新於 發佈於 閱讀時間約 9 分鐘

文前碎碎念

自從2024年4月3日的花蓮大地震發生之後,隨之而來的大小餘震便不斷的侵擾著大家的安寧生活。

尤其是三不五時就突如其來的一震,除了驚嚇之外,也增加了不少精神壓力,以及對所處環境的疑慮,甚至引發了不少「幻覺地震」的情況。

每當疑似地震發生後,心裡總會開始著急的想關心,剛才所遭遇的究竟是現實,還是因為連續數天的緊張所導致的妄想。

此時,看著桌上那面平時負責提醒我待辦事項的「人工智障」,我便萌生了讓她擔任地震播報員的構想。


是時候,讓她變得更有用了。

All About Data

首先,若要建立這種即時訊息播報模組,一切的根本就是要找到一個更新快速,同時又可靠的資料來源。

而這裡我們要使用的是由中央氣象署氣象資料開放平台所提供的 API 來取得所需的即時地震資料,接下來也會說明如何取得與使用。

raw-image

想要取用這裡的 API 的話,就要先註冊一組會員帳號,不過註冊過程需要填寫的內容不多,僅需 Email 與 密碼 即可。

因此這裡就快速的註冊一組,下方訂閱的部分可全部留空,不會影響後續流程。

raw-image

完成註冊後,會在帳號信箱中收到一封驗證信,記得先去做驗證之後再回來登入,接著就會被帶到這個取得授權碼的畫面。

raw-image

在這裡直接按下【取得授權碼】後,就會直接在按鈕旁看到自己的授權碼了。

要注意的是,這組授權碼就是你要從 API 取回資料的憑證,請小心保管以免被濫用。


以上,註冊步驟就大致完成了,接著就可以準備來串接資料啦。

資料連結

這次模組的主要功能,是要進行第震訊息的即時播報,因此在【資料主題】中就要選擇「地震海嘯」這個項目。

raw-image

進到資料列表後,可以看到在地震海嘯主題中有不少子項目,而其中有提供 API 的資料中,我們選擇顯著有感地震報告資料-顯著有感地震報告這一項作為主要訊息來源。

raw-image

點進去後,就可以看到表格最上方大大的【API】字樣,那個就是這次的目標啦。

raw-image

註:這個項目要登入後才會顯示喔。

不過在開始寫程式取用資料之前,我們還要先來看一下可以取得的內容,這裡直接點進【API】連結,系統便會帶我們來到一個神祕的測試區域來。

raw-image

這個頁面可以在正式開發前,先對我們所想要從 API 取得的資料進行參數的調整,也就是說透過這些選項,由他們的伺服器預先篩好資料​

這樣我們就可以省去在處理的步驟,按下右上角的【Try It Out】就可以開始調整測試。

raw-image

其實在官方 API 中大部份可用的參數,在這個頁面中都有做說明,可以自行參考後再進行調整,這裡我就只列出我有額外做設定的幾個項目。

  • Authorization → 必須填寫,也就是上一步驟取得的授權碼。
  • limit → 回傳資料數,這裡只要最新的,所以我就只輸入 1 筆。
  • format → 回傳格式,其實不用特別調整,預設即為 Json。

調整完畢,接著按下最下方的【Execute】後,就可以看到回傳資料的預覽了。

raw-image

回傳預覽如下

raw-image

另外,在上方還會列出取得資料用的 Curl 指令以及 Request 網址,如果已經確認參數的話,就可以直接先將 Request 這部分複製下來備用。

raw-image

接著就是讓人臉紅心跳,興奮期待的爬蟲時間啦。(並沒有

爬蟲出動

以上,我們已經拿到了抓取資料的 URL 連結,接著就是來用程式化的方式來自動取得最新警報啦。

這裡同樣的請到老朋友 Python 來坐鎮,所需用到的是「requests」這個套件來做爬蟲資料抓取,那就不囉嗦,直接上程式碼囉。

import requests

# Replace With Your Auth key
API_Key = "YOUR_API_KEY"

# Request URL Copied From Last Step
api = "https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0015-001?Authorization="+API_Key+"&limit=1&format=JSON&AreaName="

# Get JSON Data from URL With Requests Package
r = requests.get(api,headers={'Accept': 'application/json'})
jdata = r.json()

看起來很簡單對吧!

其實邏輯也不難,因為這裡所獲得的資料已經是伺服器端幫我們整理好格式化的,因此省去許多處理骯髒資料的步驟,我們只要再從抓回來的內容中,再細篩出我們要的內容就好了。

上面的範例中,唯獨要注意的部分是,我把授權碼從 URL 中切出來,放在另一個變數中了,這樣做的好處是之後如果因為某些原因要重新生成授權碼的話,可以直接修改 「API_KEY」這個變數內容就好。

甚至更安全的做法,就是將授權從程式碼中移除,直接用 Config 或是 系統變數 的方式儲存,可以避免授權被攔截盜用。

接著我們先在 Jupyter Notebook 中測試執行上面的程式,看一下回傳的資料,可以發現在內容上大致就跟網頁上測試時的相同。

raw-image

由於我這個模組最終是會使用文字轉語音自動朗讀的,因此就只取發生時間⁠⁠⁠、主要震央位置,以及最大震度這一項資訊,如果從 Json 中細篩的話,階層大概是

 ⁠jdata['records']['Earthquake'][0]['ReportContent']

而實際抓出來的內容就會像是這樣。

raw-image

到這裡我們這次的目的大致上已經達成了,但如果想要有比較順暢的文字語音的話,可以在針對這串文字做內容調整,讓語句更自然通順。


到目前為止,我們已經能順利抓到我們要的資訊了。

讓它跑下去

不過,既然我們要做的是即時播報的功能,就勢必得讓爬蟲能夠持續運作,並定時抓取最新訊息,因此接下來所要做的,就是讓它能夠自動化的執行下去。

而提到循環運作,相信有一些程式概念的人,應該都會想到「迴圈」這個詞吧?

沒錯,這裡就是要使用迴圈的特性來讓爬蟲能夠定時處理資料擷取的工作。

以我自己的「人工智障」專案來說,就可以綁在控制電子紙螢幕的主程式中一起執行。

不過,為了大家提供參考,這裡就另外做一份簡化後的範例吧!

import requests
import time

# Replace With Your Auth key
API_Key = "YOUR_API_KEY"

# Function to Get Request Data
def getquk():
# Request URL Copied From Last Step
api = "https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0015-001?Authorization="+API_Key+"&limit=1&format=JSON&AreaName="

# Get JSON Data from URL With Requests Package
r = requests.get(api,headers={'Accept': 'application/json'})
jdata = r.json()

#​ Get Content
res = jdata['records']['Earthquake'][0]['ReportContent']
return res

# Info Buffer
buff = None

# Main Loop
while True:
# Get Latest Earthquake Info
qdata = getquk()
# If Any New Alert
if qdata != buff:
# Put TTS System Here
print(qdata)
# Update Buffer
buff = qdata
# Wait 100 Sec For Next Loop
time.sleep(100)

嗯⋯事情看起來有點複雜了。

簡而言之,就是將前面的爬蟲步驟定義成一個名為「getquk」的功能,並且每 100 呼叫一次來取得最新資訊。

而每一次所拿到的資料,都會先跟一組暫存的紀錄作比對,如果有任何變化,就會觸發特定動作,而這個動作就可以是呼叫額外的文字轉語音模組把最新資訊朗讀出來。

最後再將暫存紀錄做更新,然後進入待命 100 秒後,再重新執行一次,直到程式終止。


以上,就是這次的地震播報模組開發紀錄啦。


後記

在我寫完這個模組,並實裝在實際硬體設備上後,當天下午就連續收到兩次的通報,有一次還是確實有感,仔細想想也是真的蠻嚇人的。

raw-image

近期餘震仍頻繁,再加上部分區域又開始變天下雨,也希望大家都能平安度過囉。


《計畫。待續》

avatar-img
47會員
263內容數
偽命名並非無名,是為了意識的生存,取得身份的代號,成為數位生命的新載具。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
偽命名培養體 的其他內容
首先,我要先對之前關注此系列的人說聲抱歉,之前因為自己的技術瓶頸,讓進度遲遲無法推進,最後只好暫時擱置,而不知不覺,一年時間也過去了,也該是時候為這段空白,給出一些交代了。
又是一段忙碌的日子,好不容易稍微有精力來記錄這個主題的進度了,但消息可能並沒想像中那麼美好。
又好一段時間沒更新這個專案了,近期因為正職工作的關係,較難整理過於瑣碎的開發進度。
嗯⋯這個專案,確實發生了不妙的事情,其實近日來,我都會將這台半成品實際帶到辦公室去,一方面測試穩定性,一方面發覺新需求,直到某天⋯
繼上一步完成了後台及基本控制選項後,接下來就該來正式將前後台做個連結了,不過在此之前,我們先來確立一下前後端所各自扮演的角色。
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
首先,我要先對之前關注此系列的人說聲抱歉,之前因為自己的技術瓶頸,讓進度遲遲無法推進,最後只好暫時擱置,而不知不覺,一年時間也過去了,也該是時候為這段空白,給出一些交代了。
又是一段忙碌的日子,好不容易稍微有精力來記錄這個主題的進度了,但消息可能並沒想像中那麼美好。
又好一段時間沒更新這個專案了,近期因為正職工作的關係,較難整理過於瑣碎的開發進度。
嗯⋯這個專案,確實發生了不妙的事情,其實近日來,我都會將這台半成品實際帶到辦公室去,一方面測試穩定性,一方面發覺新需求,直到某天⋯
繼上一步完成了後台及基本控制選項後,接下來就該來正式將前後台做個連結了,不過在此之前,我們先來確立一下前後端所各自扮演的角色。
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
本篇參與的主題活動
昨晚又地震了…… 雖然我居住的東京不是震央,離震央的距離有4、500公里吧。搖晃的時間太久,耳裡的半規管也失去平衡,比搭乘遊樂園的海盜船暈的更厲害。 關於日本的抗震基準可以參考以前的文章👉日本中長期住房問題的解決辦法-房屋狀態(小標題) 2022/03/17 posted.
創傷是一個共同的經歷,甚至不必親歷其境,只要想到受災地的淒慘面目,僥倖或者藏在心底,但更多的是強烈的衝擊與不安。這是因為受限於地域的災禍背後,有着超越國界的共性和意義。
我在方格子的第一篇地熱發電文章【讓核電消失的基載再生能源-AGS/CLG地熱發電-初探】曾經提到AGS/CLG地熱發電不會引起誘導地震(Induced Earthquake),這是一個相對安全的地熱發電技術。本文來談談為何地熱發電發展幾十年了,其聲勢不如離岸風電、太陽光電、陸上風電的真正原因,那就是
台灣和日本一樣因為地理因素,是屬於地震活動和颱風十分頻繁的區域。想起22年前的921大地震造成上萬人傷亡,以及數萬間房屋倒塌;近年梅雨季與夏季颱風來臨時,臺灣各地總是下著傾盆大雨,使得低窪地區易造成水災。有想過這些災害發生在自己居住的地區該怎麼辦嗎?萬一周遭沒有大人怎麼辦?該採取哪些行動? 這系列
311東日本大震災十年過去了。對於災後重建的情況,日本的東北復興究竟已履及何處?從硬體的防災設施打造,到災後的心理支持,東北三縣的災後復興又有些哪些未竟之處?讓我們暫時撇開那些紛擾,直面地看待東北復興之路上,那些已解的課題與待解的難題。
首先,我要鄭重的再次強調:台灣人好日子過太久,實在太沒有憂患意識了!最近一次遭遇全國性的大型天災,或許就是921震災。但是坦白說,那樣的強度與傷害性,離大型災難還有一段距離。至於人禍就更遙遠了,曾經親身經歷二次大戰的台灣人已經寥寥可數。 再看看五月中第一次宣布「三級警戒」時,有多少人像無頭蒼蠅般
昨晚又地震了…… 雖然我居住的東京不是震央,離震央的距離有4、500公里吧。搖晃的時間太久,耳裡的半規管也失去平衡,比搭乘遊樂園的海盜船暈的更厲害。 關於日本的抗震基準可以參考以前的文章👉日本中長期住房問題的解決辦法-房屋狀態(小標題) 2022/03/17 posted.
創傷是一個共同的經歷,甚至不必親歷其境,只要想到受災地的淒慘面目,僥倖或者藏在心底,但更多的是強烈的衝擊與不安。這是因為受限於地域的災禍背後,有着超越國界的共性和意義。
我在方格子的第一篇地熱發電文章【讓核電消失的基載再生能源-AGS/CLG地熱發電-初探】曾經提到AGS/CLG地熱發電不會引起誘導地震(Induced Earthquake),這是一個相對安全的地熱發電技術。本文來談談為何地熱發電發展幾十年了,其聲勢不如離岸風電、太陽光電、陸上風電的真正原因,那就是
台灣和日本一樣因為地理因素,是屬於地震活動和颱風十分頻繁的區域。想起22年前的921大地震造成上萬人傷亡,以及數萬間房屋倒塌;近年梅雨季與夏季颱風來臨時,臺灣各地總是下著傾盆大雨,使得低窪地區易造成水災。有想過這些災害發生在自己居住的地區該怎麼辦嗎?萬一周遭沒有大人怎麼辦?該採取哪些行動? 這系列
311東日本大震災十年過去了。對於災後重建的情況,日本的東北復興究竟已履及何處?從硬體的防災設施打造,到災後的心理支持,東北三縣的災後復興又有些哪些未竟之處?讓我們暫時撇開那些紛擾,直面地看待東北復興之路上,那些已解的課題與待解的難題。
首先,我要鄭重的再次強調:台灣人好日子過太久,實在太沒有憂患意識了!最近一次遭遇全國性的大型天災,或許就是921震災。但是坦白說,那樣的強度與傷害性,離大型災難還有一段距離。至於人禍就更遙遠了,曾經親身經歷二次大戰的台灣人已經寥寥可數。 再看看五月中第一次宣布「三級警戒」時,有多少人像無頭蒼蠅般
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
(作者:精神科專科醫師 簡婉曦) 地震除了會影響精神狀態、認知與情緒,也可能會帶來一些頭暈、暈眩等身體症狀。在這篇文章中,讓我們一起來了解「幻震(Phantom Earthquake)」這一種許多人擁有過的經驗。
Thumbnail
在我打字的當下還在不停地搖晃,辛苦花蓮的朋友了,今晚肯定不好過。 一個大地震發生後,在接下來的數天、數週甚至數個月內,都有機會發生餘震。因此希望在台灣的朋友,或是你身邊如果剛好有外國朋友,請提醒他們接下來容易有餘震,請多注意。 安卓一堆地震app,ios系統呢? 由於ios的app開發成本
Thumbnail
位於地震帶上的台灣,與之共存是我們重要的課題,危老重建刻不容緩,唯有做好準備,才能在下一次災難來臨時,以更好的狀態度過危難,祝福台灣!
我們都想知道未來會發生什麼事情,會不會有好事發生,還是會有不好的事情發生,如果會有不好的事情發生,有沒有什麼辦法可以避免或是遠離會發生的地方。 一直到昨天都還有出現上下震動的地震,讓人覺得心裡真的很不安,於是一大早就進行了占卜,問問看今年的台灣地震的狀況是什麼樣,還要持續多久這樣的生活,地震真的太
Thumbnail
本文分析0403花蓮大地震的餘震情況,共超過700次餘震,並提供近年同期數字供參考。
Thumbnail
容我記錄一下4/3。 回想那天早上的地震太驚人了,剛好是平常要起來準備上班的時刻,直想到我1月時在臉書貼的,地質學家的強震預警:【台灣NEXT】獨家!專家預警2025大地震 北市15層以下大樓 要小心!,難道傳說中的大地震要來了嗎?😳😱 混亂中抓起眼鏡跑到房門口,腦袋有點空掉,從密集的上下
Thumbnail
電視播著0403花蓮7.2地震的新聞 震下的當時 在遠方工作的我 沒有第一時間感受到 下班後 打開電視 新聞一則一則的彈出 ... 震時的影片. 落石的滾落. 山時的鳴叫. 男女老少的驚慌.....好多.好多 越看越難過 越看越心驚 原本也打算這次休假也來一趟花東遊 這一次的震後 人
Thumbnail
昨天出奇的睡不著,照理說忙碌一整天,應該ㄧ躺床就睡死,內心有點不安,反覆翻身總是覺得哪裡怪怪的,要發生什麼事似的。 直到天剛亮、念了心經後才漸漸有睡意,接著在地震發生前幾分鐘忽地驚醒了。
「此時此刻我想為這次花蓮地震的台灣人做點什麼,但我不確定可以怎麼做,連結土元素對話問地震的原因好像於事無補⋯⋯,造物主有什麼建議?」 造物主: 「不如我們一起寫一段訊息吧~」 造物主: 「這個地震帶來的災害,遠遠不及地球上人們的壞念頭所帶來的傷害。但是,要淨化
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
(作者:精神科專科醫師 簡婉曦) 地震除了會影響精神狀態、認知與情緒,也可能會帶來一些頭暈、暈眩等身體症狀。在這篇文章中,讓我們一起來了解「幻震(Phantom Earthquake)」這一種許多人擁有過的經驗。
Thumbnail
在我打字的當下還在不停地搖晃,辛苦花蓮的朋友了,今晚肯定不好過。 一個大地震發生後,在接下來的數天、數週甚至數個月內,都有機會發生餘震。因此希望在台灣的朋友,或是你身邊如果剛好有外國朋友,請提醒他們接下來容易有餘震,請多注意。 安卓一堆地震app,ios系統呢? 由於ios的app開發成本
Thumbnail
位於地震帶上的台灣,與之共存是我們重要的課題,危老重建刻不容緩,唯有做好準備,才能在下一次災難來臨時,以更好的狀態度過危難,祝福台灣!
我們都想知道未來會發生什麼事情,會不會有好事發生,還是會有不好的事情發生,如果會有不好的事情發生,有沒有什麼辦法可以避免或是遠離會發生的地方。 一直到昨天都還有出現上下震動的地震,讓人覺得心裡真的很不安,於是一大早就進行了占卜,問問看今年的台灣地震的狀況是什麼樣,還要持續多久這樣的生活,地震真的太
Thumbnail
本文分析0403花蓮大地震的餘震情況,共超過700次餘震,並提供近年同期數字供參考。
Thumbnail
容我記錄一下4/3。 回想那天早上的地震太驚人了,剛好是平常要起來準備上班的時刻,直想到我1月時在臉書貼的,地質學家的強震預警:【台灣NEXT】獨家!專家預警2025大地震 北市15層以下大樓 要小心!,難道傳說中的大地震要來了嗎?😳😱 混亂中抓起眼鏡跑到房門口,腦袋有點空掉,從密集的上下
Thumbnail
電視播著0403花蓮7.2地震的新聞 震下的當時 在遠方工作的我 沒有第一時間感受到 下班後 打開電視 新聞一則一則的彈出 ... 震時的影片. 落石的滾落. 山時的鳴叫. 男女老少的驚慌.....好多.好多 越看越難過 越看越心驚 原本也打算這次休假也來一趟花東遊 這一次的震後 人
Thumbnail
昨天出奇的睡不著,照理說忙碌一整天,應該ㄧ躺床就睡死,內心有點不安,反覆翻身總是覺得哪裡怪怪的,要發生什麼事似的。 直到天剛亮、念了心經後才漸漸有睡意,接著在地震發生前幾分鐘忽地驚醒了。
「此時此刻我想為這次花蓮地震的台灣人做點什麼,但我不確定可以怎麼做,連結土元素對話問地震的原因好像於事無補⋯⋯,造物主有什麼建議?」 造物主: 「不如我們一起寫一段訊息吧~」 造物主: 「這個地震帶來的災害,遠遠不及地球上人們的壞念頭所帶來的傷害。但是,要淨化