blognwblog気象庁防災情報XMLを受け取る気象庁が、2012年12月、ホームページで防災情報XMLというXML形式でのデータ提供を開始しました。利用できなかったものが誰でもホームページから利用できるようになったので、これは大きな進歩と言えるでしょう。このデータを利用するためには、PubSubHubbubと呼ばれるプロトコルに対応したsubscriberを用意する必要があり、単にRSSリーダーやウェブクローラーでURLを監視していればデータを入手できるというものでもありません。ここでは、まずsubscriberの作成について、今さら感はありますが、簡単に解説します。気象庁防災情報XML(以下「JMX」)は、各種電文(天気予報や地震情報など)が発表されると、まずPubSubHubbubのハブと呼ばれるサーバーを介してPOSTリクエストにより配信通知が送られてきます。そこで、まずsubscriberには、これに含まれるURLをたどって更新されたXMLを入手するという機能が必要です。加えて、ハブは定期的に(数日間に一回)更新を継続して受け取る意思があるかGETリクエストにより確認してきますので、これに回答する購読意思確認の機能が必要です。これらの2つのまったく異なる機能を単一のURLで提供しなければいけないのが少々やっかいなところです。PubSubHubbubのフィード受信登録はsubscriber側で行うのですが、今回のJMX公開は一応「試行的」という位置づけのため、気象庁側で行います。このため、あらかじめ気象庁に届け出た情報をベースに、ハブから「引き続き購読するってことでいいの?」と確認が来ます。ランダムな文字列が用いられます。(自分が)気象庁に届け出た任意の文字列であること、を確認できれば良いでしょう。これらのパラメータに問題がなければ、ステータスコードは200、本文にはhub.challengeで与えられた文字列をそのまま応答として返すと、購読意思を確認したことになります。このとき、hub.challengeはそのまま返す必要があり、前後に無駄な空白や改行文字を加えてはならないことに注意が必要です。基本的には、POSTリクエストで送られてきたHTTPボディ部分をフィードとして読み取ります。ここで送られてきたデータが真正なものかどうか確認したいのですが、現段階ではできないものと考えて良いでしょう。非公式には、HTTPヘッダ中のX-Hub-Signatureヘッダがhub.verify_tokenをキーとした(フィードの)ハッシュであるという情報もありますが、これが将来的に保証されているわけではありません。User-AgentヘッダがAppEngine-GoogleでありIPアドレスがGoogleのものであることが確認できれば「それっぽい」ことは言えるでしょうが、Googleの持つIPアドレス空間は膨大であり、また、User-Agentも将来にわたって固定されるわけではありませんから、あくまで「それっぽさ」(尤度)を確認できるにとどまります。Atomフィードには電文自体は含まれていないので、具体的な電文の中身はAtomフィード中に含まれるURLをたどる必要があります。Atomフィードは複数の電文の更新情報を含んでいますし、それぞれの電文のダウンロードに数分以上かかる場合もありますので、いったんフィードをキューに放り込んで後から解析しながらダウンロードするなどの手法も良いでしょう。気象庁の防災情報XMLを受け取るためには、以上の2つの機能を実装していく必要があります。まぎすとるさん)あたりが見つかります。ちなみに当サイトではPHPを用いてデータベースにAtomフィードとともにXML電文を保存しています。大まかなフレームワークは以下のとおりです。$entries);}?>もちろん実際にはもう少し例外処理などを加えて頑強にする必要があります。フィード及びXML電文はデータベースに保存していますがその処理については上記スクリプトからは省いています。保存したデータについては、こちらの記事をご覧ください。気象庁防災情報XMLを受け取るpubsubhubbubの構築の参考にさせていただいています。気象庁の登録の前にでpubsubhubbubのサイトでsubscriberのテスト登録がのっていますがnoriさんは、問題なく登録できたでしょうか?登録をかけるとステータス408と409が返ってくるのですがそのようなことはありませんでしたか?ちなみに下記のサイトになります。PM@どんさん、コメントありがとうございます。PubSubHubbubのサイトでは特に問題ありませんでした。408はタイムアウトなので、ひょっとするとサーバーの負荷が高まっているとか、そういったことかも知れません。WordPress.。