Skip to main content

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

はてなブログから引っ越しました(2019/10/21)

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

OpenWhiskでの開発

メニューから[OpenWhisk]を選択します。

メニュー

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

選択画面

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

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

アクションの作成

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

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

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

シーケンスにリンク

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

[WEATHER]を選択します。

新規アクション・シーケンスの構成

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

NEW BINDING

[サービス・インスタンスのプロビジョニング]をクリックします。

サービス・インスタンスのプロビジョニング

[OK、準備ができました]をクリックします。

OK、準備ができました

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

Weather Company Data

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

作成

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

Weather Company Dataの表示

[OK、新規サービス・インスタンス]をクリックします。

サービス・インスタンスのプロビジョニング

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

構成の保存

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

シーケンスに追加

[これは適切なようです]をクリックします。

これは適切なようです

[シーケンス名]を入力して、[アクション・シーケンスの保存]をクリックします。

アクション・シーケンスの保存

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

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

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

[アクションの作成]を選択します。

アクションの作成

アクションの名前を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;
}

作成した[マイ・シーケンス]を選び、[拡張]をクリックします。

アクション・シーケンス・ビューワー

[MY ACTIONS]を選択します。

新規アクション・シーケンスの構成

[convertMessage]を選択して、[シーケンスに追加]をクリックします。

convertMessageを選択

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

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

カタログに戻り[Watsonサービス]からサービスを作成します。

Watsonサービスを選択

[Language Translator]を選択し、[作成]をクリックします。

Language Translatorを選択

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

[WATSON TRANSLATOR]を選択します。

WATSON TRANSLATORを選択

[translator]を選択します。

translatorを選択

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

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

シーケンスの実行

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

このシーケンスを実行

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

アクションの呼び出し中

実行結果です。

呼び出しコンソール

元の英語

Partly cloudy. Low 7C.

翻訳した日本語

一つには曇り。 低7C。

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

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

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

感想

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