yamamanx

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年、ユーザ企業システム部門通算8年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

 - Java, Twilio, Web , , ,

ad

ad

Message

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

  関連記事

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

さて、9/26の試験を目指して久しぶりに試験勉強を始めます。 今月は非常に忙しい …

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

練習問題4日目。 とりあえずひと通り終了。 317問中288問正解、90.85% …

スパムリファラーサイトのアクセスをAnalyticsで除外する(2017/3/2現在)

アクセス数とかそんなに気にしないのですが。 嘘です。 リファラーサイトからのアク …

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

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

Java SE 7 Silver模擬テストの結果気になる問題をメモ 2015/2/13

違う種類の模擬テスト1回目。 90問中77問正解。 正解率85%。 まだまだ不安 …

Java SE 7 Silver 試験対策セミナーで模擬問題の解説をマークダウンでメモってみた

Java SE 7 Silver 試験対策セミナーに行って、模擬問題にチャレンジ …

CentOS6.5(32bit)にOracle公式サイトからJDK8をインストール

CentOS6.5(32bit)にOracle公式サイトからJDK8をインストー …

Oracle Java SE7 Silverを受験してみて

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

Mac OS X Yosemite にnode.js + mongodb 環境を作る

node.jsインストール nodejs.orgサイトで「INSTALL」ボタン …

sitemap.xml(sitemap-misc.xml)とrobots.txtを設置する

起きたら結構な雨でしたので、とりあえずサーバのエラーログを眺めていると、goog …