ヤマムギ

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

Message

メールアドレスが公開されることはありません。

  関連記事

Google Apps ScriptでAdmin SDK Directory Serviceを使ってユーザの最終ログイン情報一覧を出力する

GoogleAppsで使わなくなったアカウントを確認する方法として、最終ログイン …

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

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

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

本日は配列です。 いつものごとくマークダウンで記載したのでそのままJetpack …

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

本日は例外。 いつものごとくマークダウンで記載したのでそのままJetpack M …

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

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

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

本日は繰り返し処理。 配列や演算でひっかけてくる問題に苦戦。 繰り返しだけに頭を …

WordPressの記事を公開日時に関係なくソート順を変更する

PostMash Customを使う WordPressのプラグインでPostM …

Googleカレンダーの予定をPHPからXMLで取得してWebページに表示する(現在廃止されたAPIなので使えません)

ご注意 ※下記の記事で使用していたAPIは2016年現在使用出来なくなっています …

PHP 共通ヘッダ、フッタの内容をページによって動的に変更する

共通ヘッダ、フッタ それぞれ必要な内容を書いたheader.php、footer …

Java SE 7 Silver受験直前 練習問題総確認 2015/2/14

カーリング中継見ながら、iTunesシャッフルでかけながら、練習問題。 集中って …