subscriber 気象庁から防災情報XMLを受信

2018/08/05PHPPHP,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型提供終了検討)

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ