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]をクリックします。
[サービス・インスタンスのプロビジョニング]をクリックします。
[OK、準備ができました]をクリックします。
[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]を選択して、[シーケンスに追加]をクリックします。
[変更の保存]をクリックします。
翻訳サービス(WATSON TRANSLATOR)の追加
カタログに戻り[Watsonサービス]からサービスを作成します。
[Language Translator]を選択し、[作成]をクリックします。
OpenWhiskのマイ・シーケンスに戻り、[拡張]をクリックします。
[WATSON TRANSLATOR]を選択します。
[translator]を選択します。
[NEW BINDING]の横の青色のマークを選択して、[シーケンスに追加]をクリックします。
[変更の保存]をクリックします。
シーケンスの実行
[このシーケンスを実行]をクリックします。
[この値で実行]をクリックして、シーケンスを実行します。
実行結果です。
元の英語
Partly cloudy. Low 7C.
翻訳した日本語
一つには曇り。 低7C。
翻訳精度がいまいちですね。ちなみにGoogle翻訳だと
晴れときどき曇り。 低い7C。
こちらの方がマシですね。
感想
サーバーレスで天気予報や翻訳サービスなどを簡単に呼び出せるのはとても便利ですね。アイデア次第でサービスを組み合わせて、面白いサービスが作れそうです。本当は取得した結果をTwitterにつぶやくようにしたかったのですが、時間がなくできませんでした。また今度挑戦してみます。それにしてもBluemixのコンソールは遅いです。もう少し改善しないものでしょうか。。。