読者です 読者をやめる 読者になる 読者になる

OpenWhiskで天気予報サービスを使ってみる

Bluemix上のOpenWhiskから天気予報(英語)を取得して、Watsonに翻訳させるサービスを作ってみました。

OpenWhiskでの開発

メニューから[OpenWhisk]を選択します。 f:id:ysysy:20170305215629p:plain

2通りの開発方法がありますが、今回は[ブラウザーで開発]を選択しました。 f:id:ysysy:20170305215956p:plain

経度、緯度を受付けるアクションを作成

[アクションの作成]を選択して、天気予報サービスに渡す経度と緯度を取得するアクションを作成します。

f:id:ysysy:20170305220438p:plain

名前をsetLocationとして、[アクションの作成]をクリック f:id:ysysy:20170305221445p:plain

次のコードを入力して、[ライブにする]をクリックします。 このコードでは、緯度と経度を受け取り、そのまま返却します。緯度、経度の入力がない場合は、デフォルト値として東京の緯度、経度を返却します。

function main(params) {
    var msg={};
    msg.latitude=params.latitude || "35.66";
    msg.longitude=params.longitude || "139.73";
    return msg;
}

[シーケンスにリンク]をクリックして、天気予報を取得する処理を次に追加します。 f:id:ysysy:20170305222821p:plain

天気予報を取得する処理の追加

[WEATHER]を選択します。 f:id:ysysy:20170305222928p:plain

[NEW BINDING]をクリックします。

f:id:ysysy:20170305223217p:plain

[サービス・インスタンスのプロビジョニング]をクリックします。 f:id:ysysy:20170305223346p:plain

[OK、準備ができました]をクリックします。 f:id:ysysy:20170305223505p:plain

[Weather Company Data]を選択します。

f:id:ysysy:20170305223702p:plain

画面下の[作成]をクリックします。

f:id:ysysy:20170305223827p:plain

この画面が表示されたらサービス・インスタンスの作成は完了です。元の画面に戻ります。 f:id:ysysy:20170305224040p:plain

[OK、新規サービス・インスタンス]をクリックします。 f:id:ysysy:20170305224159p:plain

作成したサービス・インスタンスが選択されていることを確認して、[構成の保存]をクリックします。画面上の名前の入力(今回はgetWeatherDataとしました。)も忘れずに! f:id:ysysy:20170305224648p:plain

[シーケンスに追加]をクリックします。

f:id:ysysy:20170305225624p:plain

[これは適切なようです]をクリックします。 f:id:ysysy:20170305232759p:plain

[シーケンス名]を入力して、[アクション・シーケンスの保存]をクリックします。 f:id:ysysy:20170305232900p:plain

[完了]をクリックします。

取得したデータを加工するアクションを作成

次に取得した天気予報データのうち、当日の"narrative"を抽出するアクションを作成します。

[アクションの作成]を選択します。 f:id:ysysy:20170305220438p:plain

アクションのは名前をconvertMessageとして作成しました。コードは次のようになります。取得したデータをWatsonに渡すため、メッセージを加工しています。

function main(params) {
    var msg={};
        // 翻訳先の言語は日本語
    msg.translateTo="ja";
        // 翻訳元の言語は英語
    msg.translateFrom="en";
    // 天気予報サービスから取得した当日の"narrative"を取得
    msg.payload=params.forecasts[0].narrative;
        // ログ出力用
    console.log(msg.payload);
    return msg;
}

作成した[マイ・シーケンス]を選び、[拡張]をクリックします。 f:id:ysysy:20170305233421p:plain

[MY ACTIONS]を選択します。 f:id:ysysy:20170305232227p:plain

[convertMessage]を選択して、[シーケンスに追加]をクリックします。 f:id:ysysy:20170305233733p:plain

[変更の保存]をクリックします。

翻訳サービス(WATSON TRANSLATOR)の追加

カタログに戻り[Watsonサービス]からサービスを作成します。 f:id:ysysy:20170305235805p:plain

[Language Translator]を選択し、[作成]をクリックします。 f:id:ysysy:20170305235941p:plain

OpenWhiskのマイ・シーケンスに戻り、[拡張]をクリックします。

[WATSON TRANSLATOR]を選択します。 f:id:ysysy:20170305232227p:plain

[translator]を選択します。

f:id:ysysy:20170306000611p:plain

[NEW BINDING]の横の青色のマークを選択して、[シーケンスに追加]をクリックします。 f:id:ysysy:20170306000447p:plain

[変更の保存]をクリックします。

シーケンスの実行

[このシーケンスを実行]をクリックします。

f:id:ysysy:20170306000910p:plain

[この値で実行]をクリックして、シーケンスを実行します。 f:id:ysysy:20170306001020p:plain

実行結果です。 f:id:ysysy:20170306001144p:plain

元の英語

Partly cloudy. Low 7C.

翻訳した日本語

一つには曇り。 低7C。

翻訳精度がいまいちですね。ちなみにGoogle翻訳だと

晴れときどき曇り。 低い7C。

こちらの方がマシですね。

感想

サーバーレスで天気予報や翻訳サービスなどを簡単に呼び出せるのはとても便利ですね。アイデア次第でサービスを組み合わせて、面白いサービスが作れそうです。本当は取得した結果をTwitterにつぶやくようにしたかったのですが、時間がなくできませんでした。また今度挑戦してみます。それにしてもBluemixのコンソールは遅いです。もう少し改善しないものでしょうか。。。