大気の状態を通知してくれるWebアプリを作りました

Pocket

動機

2月14日。
帰宅したら、あるものを渡されました。

昨年末くらいから、育児の合間を縫って、せっせせっせと何かを編んでる姿は見かけてたんです。
てっきり、昨年7月に生まれた息子のための何かを編んでると思っていたら、これだもの。

手編みのマフラー。
それはそれは、大変驚きましたよ。あまりそういうことをするタイプの妻ではないので、なおさらです。

これは僕も手作りの何かをお返しをしたいなと。
という訳で、15日以降、息子が寝た後の時間を使って、コーディングしてました。

皆様にとって、どうでも良い話は、ここまでです。
さて、ここ何日かは、宇宙からの飛来物の話題で持ち切りですが、少し前の話題と言えば、某国から偏西風にのって飛来してきていると言われている微小粒子状物質(PM2.5)でした。そらまめ君が、アクセス過多により、接続しづらくなっていたのも記憶に新しいと思います。
参考:環境省大気汚染物質広域監視システム – そらまめ君

PM2.5。聞くところによると、差し当たっての対応方法は、「数値が高い日は外出を避ける」しかないという話。微粒子用マスクを使えば防げるとは言うものの、守ってあげたい赤ん坊には、マスクなんてつけれない。おちおち洗濯物も干してられません。
他県の状況は分かりませんが、現在でも福岡では、テレビの天気予報のときに、花粉飛散情報と並んでPM2.5の飛散予測が放送されています。テレビだけでなく、そらまめ君や、福岡県の大気観測状況等を確認すれば、数値はわかるけど、毎日毎時見るのは、ちょっとかったるい。できれば、こういった情報は、プッシュ通知をしてほしい。

そんなこんなで、第1弾として作ったのが、PM2.5の観測状況を監視し、設定値を超えた場合にプッシュ通知してくれるWebアプリです。
やはり、晴れた日には、太陽の下に洗濯物を干したいし、散歩にも連れて行ってあげたいものです。
(僕は花粉症持ちなのでPM2.5に関わらず、この時期は外に干せませんが。)

個人用途としては、一応、完成したんですが、一般公開すれば、幾分かは需要もあるんじゃないかなと思いまして、この記事を書いています。ただ、一般公開には超えなければならないハードルがあって、どうしたものかと考えているところです。もし詳しい方がいたら、教えてください!

仕様

CakePHP2実践入門の第11章「コンソール/シェルの利用」と、第16章「ソーシャル連携」の実践をしたかったというのも動機の一つで、CakePHP2.3 + MySQLで制作しています。制作したのは、クローラー兼TwitterBotと、OAuthを用いたアプリケーションの2つです。

クローラー兼TwitterBotの動作については、以下の通りです。
福岡県の大気観測状況のページに対して、1時間に1回リクエストを行い、フェッチした内容をスクレイピングして、DBにキャッシュしています。その後、利用者の設定状況に応じて、通知を行います。

利用者は、OAuthでログインを行い、事前に、自分が知りたい測定局と、警告してほしい数値を設定しておきます。観測値が設定値を上回った場合に、利用者のTwitterアカウントに対してメンションしてくれるようになります。以下、サンプルです。

課題

Twitter APIを用いたアプリの作成は、今回が初めてなので、決して熟知している訳ではないのですが、一般公開を考えた場合、いくつか課題が出てきました。

ツイート数の上限

APIの仕様上、ツイート数には、1,000件/1日という制限があります。一般ユーザがツイートするには十分な数値ですが、BOTの場合は、その限りではありません。仮に24時間連続して通知が必要な場合、 1000 / 24 = 41.666となり、40名程度にしか安定して通知できないということになりそうです。毎時通知はしないとか?うまいやり方はないか、実運用上はどうなのかとか、知りたいところです。
参考:Twitterリミットについて(更新、API、DM、およびフォロー) – Twitterヘルプセンター
参考:結局、Twitter API 1.1で何が変わる? 5つのポイント – @IT

通知センターとの連携

上記の問題を解決する案として、登録者のアカウントを利用してツイートさせるというものが考えられます。以下のサンプルのようなものです。多分、これなら、ツイート数の上限は、気にする必要はないですよね?

これは、及第点ではあるんですが、リアルタイム性を確保するために、できれば、iPhoneで言うところの通知センターと連携させたいと思っています。iPhoneは、他アカウントから自アカウントへのメンションは、以下の参考画像のように通知してくれますが、自アカウントから自アカウントへのメンションは、以下の参考画像のようにはならないようです。Androidでも同様でした。
fukuoka-no-taiki-twitter-bot-app

極力手軽に登録・設定できるようにしたいという思いから、Twitterへのメンションという方法をとっているのですが、他に何かよい方法はありますかね?メール通知も選択肢の一つなんですが、できれば避けたいと思っています。ネイティブアプリ化も、うーん、どうなんだろう?

そもそも論

今は、個人用途、1リクエスト/1時間なので、許容範囲だと思っていますが、Librahackの一件もあるので、APIが公開されていないサイトの情報をスクレイピングして云々するのって、そもそもどうなんでしょうかね?これは、福岡県なりに事前にお伺いをたてるのが、お作法でしょうか。
クローラーでアクセスし、ページをキャッシュすること自体は、特殊なことではなので、常識の範囲内であれば問題なさそうですが、そのまま情報を出してるわけではないですしねー。

今後

何かしらの形で公開できるよう模索してみます。
TwitterBotを運営している人とか、通知系アプリを運営している人とか、ご意見等あればぜひ!

補足

調べていくうちに分かったことですが、PM2.5って、この冬に急に高くなったのではないようですね。ただ単に知らなかっただけで、以前から高い日もあったようです。
例えば、ちょうど1年前の昨年2月の吉塚測定局のデータを見てみると、1日平均30〜50μg/m3(=1日合計700〜1200μg/m3)を超える日が1週間連続で続いていたり、最高で1日平均50.7μg/m3を記録した日があったりと、ちょっと衝撃的でした。以下のサイトで確認することができます。
参考:微小粒子状物質(PM2.5)測定データについて – 環境省
参考:環境数値データベース – 国立環境研究所
* 国の基準値は1日平均35μg/m3以下
* 観測に用いる機器や方法によって結果に違いがでるので、あくまで参考値として。詳しくは粒子状物質 – Wikipediaで。

こういうのを見ていると、マスク屋がマスクを売りたいだけなんじゃ、もとい、あまり過敏になりすぎるのも良くないとも思う一方で、0歳児を抱えている親の身からすると、悪い環境からは少しでも遠ざけたいと言うのが親心なのかなとも思ったりします。
また、某国から飛来してきているという話も、多少とも影響はあるにしても、それだけではないんだろうとも思います。ただ、あのファンタジーの世界かと思わせる写真、あれのインパクトが強すぎた。
参考:これはヤバイ!! 中国の大気汚染、米国が”人間が住めないレベル”と警告!! 肺がん物質PM2.5、1000オーバー

気をつけなければいけないのは、なにもPM2.5だけではないですから、あまり情報に流されすぎない程度に自衛していきたいですね。

Pocket