ヤマムギ

growing hard days.

*

Twilio APIでOpenWeatherMap APIで取得した天気情報を毎朝モーニングコールする

      2015/10/18


owm-twilio

OpenWeatherMap APIのJsonから取得した気温と天気の情報を、TwilioのAPIを使って毎朝5時にモーニングコール設定してみました。
ソースコード詳細は、GitHubを見ていただければと思います。

デモ動画です。

※SlidShareに発表資料をアップしましたので、概要はこちらをご確認ください。

OpenWeatherMap API Jsonから天気情報を取得する

Twilio APIでメッセージを送るために、次のようなXMLを動的に作成します。

取得する情報は今とおよそ6時間後、12時間後の天気と気温です。

JsonをString変数へ格納

2種類のJsonをString形式で扱う事にしました。

抜粋していますので、全体はGitHub GenerateJsonString.javaを見てください。

指定URLのContentをBufferedReaderに入れて読んだ情報をStringBuilderに追加していきます。

今の天気情報の取得

まず今の天気情報を取得するために、OpenWeatherMap APIのCurrentを取得します。
タイプは「Weather」です。
解析用のクラスは次のようになりました。
抜粋していますので、全体はGitHub WeatherJson.javaを見てください。

クラスの階層化や配列のところは少し調べながら作りました。
APIのURLを叩いて得られるJsonの形式にあわせて作っていく感じです。

JsonをGsonを使ってパースする

JsonのパースはGsonライブラリを使ってやりました。

抜粋していますので、全体はGitHub GenerateXMLFile.javaを見てください。

GsonのfromJsonで解析用クラスを引数に渡してJavaオブジェクト化しています。

XMLに設定するメッセージのための文字列を生成しています。

およそ6時間後と12時間後の予報の取得

OpenWeatherMAP APIの「Forecast」では3時間単位で今の時間帯を含む未来のデータが取得出来ます。

まずは、解析用クラスです。
抜粋していますので、全体はGitHub ForecastJson.javaを見てください。

先ほどの「Weather」より階層がひとつ深くなっています。

およそ6時間後と12時間後のJsonのパース

抜粋していますので、全体はGitHub GenerateXMLFile.javaを見てください。

リストの順番はOpenWeatherMAP APIの仕様を信じるとして添え字で3番目と5番目がおよそ6時間後、12時間後になるはずなのでこれでXMLメッセージ用のStringを生成しています。

XMLファイル生成

ここまでで得たStringでXMLを生成します。

XMLはTwilioの仕様どおりに作成します。

抜粋していますので、全体はGitHub GenerateXMLFile.javaを見てください。

voiceはaliceにしています。
で、やってみて思ったのですが、今のところ漢字の読み間違いはないです。
凄いですね。

Twilio APIを使って自動で電話をかける。

プログラムから電話をかける

素晴らしく簡単です。

抜粋していますので、全体はGitHub TwilioCall.javaを見てください。

propertiesファイルから各パラメータを取得しているので、それぞれ簡単に説明を書きます。

  • ACCOUNT_SID,AUTH_TOKEN
    Twilioのサイトでログインして、「Show API Credentials」で表示されます。
    twilio-api-credentials

  • To
    かけたい相手の電話番号です。

  • From
    発信元となる電話番号です。
    Twilioで購入した電話番号となります。
    トライアルアカウントでは無料です。
    twilio-phonnumber

  • Url
    生成したXMLを置いているURLです。

mainメソッドで各処理を実行する

ほとんどはXML生成のためのコードで、Twilioは本当に数行のコードで出来ました。

毎朝5時に自動で電話をかける

root権限で実行してもらいます。

エラー処理、ログなどはこれから実装していきます。

@yamamanx

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー1年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。

また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - Java, Twilio, Web , , ,

ad

ad

  関連記事

「POODLE」SSL3.0の脆弱性対応

各社が騒ぎ立てている「POODLE」 Padding Oracle On Dow …

Java SE 7 Silver対策勉強をしながらメモ 2015/1/27

だんだんなんだか日記じみてきましたが、試験対策メモをいつものごとくマークダウンで …

Oracle Java SE7 Silverを受験してみて

受験の目的 Goldの前提条件だから Gold資格を取得する目的は技術レベルを理 …

Java SE 7 Silver対策勉強をしながらメモ 2015/2/8

今日から練習問題を再確認。 ひと通りテキストを終えた安心感からかイージーミスが連 …

Java SE 7 Silver対策勉強をしながらメモ 2015/2/2

本日はクラス定義とオブジェクト。 一気に範囲が広がった感。 いつものごとくマーク …

ホームページ、自作サイトにアメブロの新着情報を掲載する

MagipieRSSを使用 なので下記サイトでダウンロード http://mag …

Java SE 7 Silver対策勉強をしながらメモ 2015/2/6

本日は例外の続き。 これで参考書の章立てはとりあえず終了!! 明日からは模試と練 …

Java SE 7 Silver対策勉強をしながらメモ 2015/2/9

練習問題2日目。 同じ問題にひっかかる。つまづく。 集中力が足りない。 途中から …

Java SE 7 Silver対策勉強をしながらメモ 2015/2/3

本日は継承。 眠すぎるのでちょっとだけ。 本当に少しだけでもいいから続ける。それ …

C#でOpenWeatherMap APIを使って天気情報を取得する

C#でOpenWeatherMapAPIを使って現在の天気を取得してみました。 …