subscriber 気象庁から防災情報XMLを受信
subscriber構築しXMLファイルを受信した結果
前回、subscriber構築しXMLファイルの受信を開始しました。
構築後、2か月ほどたちますが、大量のファイルが取得できています。
今回は、XMLファイルの解析を行います。
XMLの受信件数
subscriberを構築して、気象庁からXMLファイルを取得できるようになり、受信を始めたところ、1時間あたりに平均約60ファイル受信されます。
(受信する種類は、もらえる情報すべてを申請しています)
1日で 60*12=720
1ケ月で 720*30=21,600
結構な量です。
XMLファイルを展開
受け取っているだけでは意味がありませんのでXMLファイルを読んでみることにします。
7月16日に発生しました大阪府北部地震を例にとってみます。
XMLはこのような形で受信されました。
<?xml version="1.0" encoding="UTF-8"?> <Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/"> <Control> <Title>震源・震度に関する情報</Title> <DateTime>2018-06-17T23:07:35Z</DateTime> <Status>通常</Status> <EditorialOffice>気象庁本庁</EditorialOffice> <PublishingOffice>気象庁</PublishingOffice> </Control> <Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/"> <Title>震源・震度情報</Title> <ReportDateTime>2018-06-18T08:07:00+09:00</ReportDateTime> <TargetDateTime>2018-06-18T08:07:00+09:00</TargetDateTime> <EventID>20180618075838</EventID> <InfoType>発表</InfoType> <Serial>2</Serial> <InfoKind>地震情報</InfoKind> <InfoKindVersion>1.0_1</InfoKindVersion> <Headline> <Text>18日07時58分ころ、地震がありました。</Text> <Information type="震源・震度に関する情報(細分区域)"> <Item> ~(この後も続く)
読み込みは次の処理で読み込みます。
$xmldata = simplexml_load_file(ファイルパス) // 主要な部分だけ print "<br><br>Control"; print "<br>---------------------------------------------------------<br>"; foreach ($xmldata->Control as $data) { print "情報名称 :".$data->Title."<br>"; print "発表時刻 :".$data->DateTime."<br>"; print "運用種別 :".$data->Status."<br>"; print "編集官署名 :".$data->EditorialOffice."<br>"; print "発表官署名 :".$data->PublishingOffice."<br>"; } print "<br>Head"; print "<br>---------------------------------------------------------<br>"; foreach ($xmldata->Head as $head) { print "標題 :".$head->Title."<br>"; print "発表時刻 :".$head->ReportDateTime."<br>"; print "基点時刻 :".$head->TargetDateTime."<br>"; print "Event ID :".$head->EventID."<br>"; print "情報形態 :".$head->InfoType."<br>"; print "Serial :".$head->Serial."<br>"; print "InfoKind :".$head->InfoKind."<br>"; print "InfoKindVer :".$head->InfoKindVersion."<br>"; print "Headline :".$head->Headline->Text."<br>"; } // print "<br>Body"; print "<br>---------------------------------------------------------<br>"; foreach($xmldata->Body as $key => $value) { print "マグニチュード:".$value->Earthquake->children('jmx_eb',true)->Magnitude."<br>"; foreach($value->Earthquake->children('jmx_eb',true)->attributes() as $a => $b) { echo $a,' : ',$b,"<br>"; } print "<br>Earthquake->Hypocenter->Area"; print "<br>---------------------------------------------------------<br>"; foreach($value->Earthquake->Hypocenter->Area as $item) { print "Name :".$item->Name."<br>"; print "Code :".$item->Code."<br>"; } }
読み込んだ結果は次の通りです。
無事読み込めました。
気象庁からリアルタイムで警報、速報などの情報が手に入ります。
アイデア次第では、いろいろと使えますね。
[前の記事](続)subscriber の構築をして気象庁の防災情報を取得
[次の記事]subscriber 気象庁から防災情報XMLを受信(PUSH型提供終了検討)