OpenWhiskを使って、お天気情報をSlackに通知します。
![snip_20161031002150.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Faa203ff0-7bd8-97e9-856f-8bd5f619bbc3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c085fc1de48181f1b4c0399d66ed6975)
お天気情報の取得方式については、以下の記事にて記載しています。
今回は、WeatherCompanyで取得したデータをSlackに通知する流れについて記載します。
Slackのパッケージカタログを使用する
BluemixのOpenWhiskの画面も新しいデザインになりました。可愛いです。
![snip_20161223024154.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F69ec332c-eb50-68a4-17be-f4c540e1c684.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=229be2b88acb998f4c23a23b62e5a8d6)
Slackを使う場合も、Weather Companyと同一です。アクションの編集画面から、右上の「カタログの表示」を選択します。
![snip_20161025222009.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fe09737ff-69c4-319a-26d0-d859c8f5c023.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c5d688c90a77f456cf54184744472d84)
「SLACK」を選択します。
![snip_20161025222036.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Ffe7ff58b-4d65-c20e-6e51-06fd69ab41bf.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=662bb02c017dbfac71314795a9366eae)
Slackのパッケージが表示されます。
![snip_20161025222114.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F928a31ec-22fc-266c-5e75-066960eb4b56.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=169a0bec810b04aae2376219858ad906)
サンプル入力を見てみます。Slackに通知するためには、JSONで以下のようなパラメータを入れてあげれば良いようです。
{
"channel": "myChannel",
"text": "Hello OpenWhisk!",
"url": "https://hooks.slack.com/services/XYZ/ABCDEFG/12345678",
"username": "openwhisk"
}
中身は、SlackのWebhookのURL、ユーザ名、チャンネル名。そして、通知するテキストです。左側のNEW BIDINGを選択します。
![snip_20161223222258.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fd54aeff2-6d40-22e1-4b1a-4e24f6d51ff9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=be9dc0d8d94b0d854c638cadbca47881)
通知したいslackに合わせてurlとchannelを、そして任意のユーザ名を入力して、構成を保存します。これで、あとは通知するテキストを作るだけです。
WeatherCompanyで取得した情報をSlack通知用に加工する
前回の記事で、WeatherCompanyで取得したデータは以下のようなものです。
{
"metadata": {
"latitude": 35.68,
"status_code": 200,
"longitude": 139.76,
...(省略)...
},
"observation": {
"dewPt": 1,
"blunt_phrase": null,
"pressure_tend": 2,
"pressure_desc": "Falling",
...(省略)...
"wx_phrase": null,
"terse_phrase": null,
"uv_index": 3
}
}
必要なパラメータを取得して、Slackに、textパラメータに詰め込んであげるコードを少し書きます。
「アクションの作成」を選択します。
![snip_20161022171511.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F6d8963d6-c0df-8bd4-d75b-08bdc2c3fb84.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6044dc5d458dc39ab5d100539a68fd9f)
アクションは現在、Swift、Node.js、 Python、Dockerが使えます。今回は、Pythonを選択しました。
![snip_20161029203312.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fee3d5ee1-fca5-e5bf-7c2e-d2a63eb2185a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=eee199dd6e9f55ab66de93d9b26f77e8)
コーディングはいつも通り、頑張りません。
import sys
def main(dict):
slack = {}
latitude = dict["metadata"]["latitude"]
longitude = dict["metadata"]["longitude"]
pressure = dict["observation"]["pressure"]
temp = dict["observation"]["temp"]
rh = dict["observation"]["rh"]
message = "temperature:" + str(temp) + "\n" + "Humidity:" + str(rh) + "\n" + "Atomosheric pressure:" + str(pressure)
slack["text"] = message
return slack
WeatherCompanyから受け取ったパラメータが辞書型で受け渡されるので、欲しいパラメータだけ抽出して、slackのtextに詰め込みます。
textは日本語で表示したくて試行錯誤してみたのですが、うまくいかず、仕方なく英語で記載しました。日本語のJSONの受け渡しは可能なのでしょうか?
シーケンスで、処理の流れを指定して実行
アクションの準備はできました。それぞれのアクションを組み合わせた「シーケンス」を作って、実行してみます。先ほど作成したアクションから、右下「シーケンスにリンク」を選択します。
![snip_20161223225348.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fa694017d-1d9f-8696-b3bb-bd7bd57fd703.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=092dc3797aae2cfb214f0bd648194cdd)
先ほど設定したSLACKを選択します。
![snip_20161223225422.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Faae2c26c-f0b7-8b43-b28e-16353bc34ace.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a47310a423011214368effe955c46fc3)
左側のBINDは、今回設定したBINDを選択してください。
「シーケンスに追加」をクリックします。
![snip_20161223225637.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fa1cd1816-fd31-1275-393f-4e82d229ded6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e952b799aa62959f297f79300bb2011d)
今回作ったWeather_to_slackから、Slackパッケージに渡す流れができました!
次は、データ取得元のWeatherCompanyを追加します。右下「拡張」を選択します。
![snip_20161223225705.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F119b5aaf-d36b-aae9-c38e-dac8445a1f29.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0d1d95f426e42d1b6f9af66cc061377d)
「WEATHER」を選択します。
![snip_20161223225732.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fbf80134d-3dc8-ae34-1f7a-4e87fa98ec8a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d4a7e4d1dbc9f52f1a655ad575a6f481)
WEATHERも、左側のBINDは前回設定したBINDを選択し、「シーケンスに追加」をクリックします。
![snip_20161223225755.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2Fe6820a6b-fb10-41eb-a74f-3f6b64703e53.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e85bef6f4ad83b32f10aafa493be7a6f)
繋がりました!!
![snip_20161223225832.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F8a6d36f3-f883-ff89-f519-ad0dd7611b09.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9dabb55195c5ef6585b61b01365b7b7a)
・・・が、アクション実行順が、コレジャナイ。ソコジャナイ。
でも大丈夫です。Weatherのアクションの右上についている矢印をクリックすることで、アクションの実行順を入れ替えることができます。
- Weatherでお天気情報を取得して
- 作ったアプリケーションでお天気情報をslackのtextに詰め込む加工をして
- slackに投げる。
のアクションの流れを変更します。
![snip_20161223225906.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F5f5ded93-9d27-9da1-552a-a935f6d4ace9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c5c332887cf9bd98aa398681bf6d60a9)
正しい順番になりました!
右下の「アクションシーケンスの保存」をクリックし、シーケンスの名前をつけます。
![snip_20161223225958.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F745287be-3618-f241-0ce0-e71c59818caa.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=db03907a837959218e2b55fe72b3df30)
保存されました!
作成したシーケンスをクリックし、「このシーケンスを実行」をクリックすると
![snip_20161223230045.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F86aa9ee4-9eff-f7c3-bad0-b57107ab94ce.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ccca4298e7b3102222b825c793701b55)
お天気情報がSlackに通知されます。
![snip_20161031002150.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F60109%2F4d3aab93-0ceb-07c0-c966-34fabff2e4a6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2136a69742672c1817dd4c2c2095d5ae)
おわりに
この検証を行ったときから、Watson系のパッケージカタログが拡張されております。TextToSpeechやSpeechToTextなどもぜひ使ってみて遊んでみようと思います。