[GAS]気象庁防災情報XMLをパースして地震情報を取得
- t_o_dと申します。
- 気象庁が公開している気象庁防災XMLを利用すれば精度の高い天気や地震といった情報を取得できます。
- そこでGASを利用してこのXMLをパースして地震情報(震度や場所)を取得する方法を記録いたします。
環境
- mac OS Monterey 13.0
- Google Apps Script
手順
取得するデータ決め
- まず気象庁防災XMLからどの情報を取得したいかを決めます。
- 今回は地震火山(高頻度)フィードを利用して以下を取得することにします。
- 時刻
- 場所
- 震度
- ※仕様がまとまったページはこちらになります
スクリプトエディタ起動
- Googleドライブを開き、新規で「Google Apps Script」を作成してスクリプトエディタを起動してください。
コード記述
- 以下の内容をスクリプトエディタの任意のgsファイルに記述。
function main(){ const quakes = getEartuQuakes() if(!quakes){ return } console.log(quakes) } // 地震情報取得 function getEartuQuakes(){ // ネームスペース const atom = XmlService.getNamespace("", 'http://www.w3.org/2005/Atom'); const seismology1 = XmlService.getNamespace("", 'http://xml.kishou.go.jp/jmaxml1/body/seismology1/') // コンテンツ取得 const res = UrlFetchApp.fetch('https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml') const xml = XmlService.parse(res.getContentText()) const root = xml.getRootElement() const entries = root.getChildren('entry', atom) const earthQuakeContents = entries.filter(entry => { const content = entry.getChildText('content', atom) return /震度情報/.test(content) }) // 地震がない時 if(!earthQuakeContents?.length){ return null } const targetEarthQuakes = earthQuakeContents.map(e => { // 対象地震詳細情報取得 const link = e.getChild('link', atom).getAttribute('href').getValue() const res = UrlFetchApp.fetch(link) const xml = XmlService.parse(res.getContentText()) const root = xml.getRootElement() const bodies = root.getChildren('Body', seismology1) const earthQuake = bodies[0].getChild('Earthquake', seismology1) const intensity = bodies[0].getChild('Intensity', seismology1) // 発生時刻 const originTime = earthQuake?.getChildText('OriginTime', seismology1) // 発生場所 const areaName = earthQuake?.getChild('Hypocenter', seismology1).getChild('Area', seismology1).getChildText('Name', seismology1) // 震度 const maxInt = intensity?.getChild('Observation', seismology1).getChildText('MaxInt', seismology1) // 「発生時刻・発生場所・震度」がなければreturn if(!earthQuake || !intensity){ return null } return [ originTime, areaName, maxInt ] }).filter(e => e) return targetEarthQuakes }
実行
- 修正後、main関数を実行して、以下のような実行ログとなることを確認します。
- 以上です。
まとめ
- GASではXMLをパースする関数が標準で用意されており非常に便利です。
- 防災情報XMLは気象に関するさまざまなデータが用意されているので適宜活用していきたいと感じました。
参考
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。