slackでいろいろ遊ぶ その1
毎朝天気予報を送信するボットを作る
モチベーション
自宅にはテレビを置いてない。天気予報アプリを見る習慣もない。すると朝玄関を出たら雨でげんなりってことがよくある。
これを見た。
なるほど、毎朝slackに通知を送れば楽しそう。作ってみよう。 言語はPHP。コードは常時稼働してるraspberry pi において、cronで定期実行すればできそうな気がする...。
というか、まずslackのアカウントを作らねば...。
slack api test でテキストを送信する
- tokenの発行
そもそもslackを使うこと自体初めて。なので簡単なところから始める。 slack api からweb apiにいく。 下の方へスクロールすると、「Generate test tokens」がある。これをクリック。 ここで発行されたtokenをメモメモ...。
- api/METHOD のMETHODを決める
web apiによるとapi のurl はhttps://slack.com/api/METHOD らしい...。METHODってなんぞ。
先人の知恵を借りよう。
これを参考に以下のようなコードを書いた。
<?php $baseurl= "https://slack.com/api/chat.postMessage"; $token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //token $channel = "#yyyyyyyy";//投稿したいチャンネル名 $text = 'Hello,Slack!'; $channel = urlencode($channel); $url = $baseurl. '?token=' . $token . '&channel=' . $channel . '&text=' . $text . '&as_user=true';//trueは自分から、falseだとapi testerからメッセージが贈られる。 $json = file_get_contents($url); $json = json_decode($json); print_r($json); ?>
実行すると、ok と返ってくる。また、slackにもテキストが送られた。 そして、METHODの部分は実行したい動作に置き換えるようだ。 ブラウジングしていると、
を見つけた。METHODに当てはめる部分を一覧で見れる。今回はメッセージを送るだけなのでchat.postMessageだけ試した。
livedoor の天気予報apiから予報データを取得
天気データは以下のサイトから頂く。
weather_hacks
http://weather.livedoor.com/weather_hacks/webservice
全国の地点定義表から自分の住んでる地域のidを見つける。 千葉県 千葉 にしたいので、id="120010" だ。
天気情報を取得するコードは以下のようにした。
<?php header('Content-Type: text/html;charset=UTF-8'); $baseurl = "http://weather.livedoor.com/forecast/webservice/json/v1"; $cityid = '120010'; $url = $baseurl . '?city=' . $cityid; $options = array( 'http' => array( 'method' => 'GET', 'header' => 'Content-Type: application/json', ), ); $json = file_get_contents($url,false,stream_context_create($options)); $json = json_decode($json,true); echo '<pre>'; print_r($json); echo '</pre>'; ?>
こんな感じで取得できた。
まとめ
Slackのapiは意外と簡単に使える。また、webに情報も多いのでそれほど困らなかった。 ただ、現状だとテキストを送るだけなのでよりリッチなメッセージを送れる Incoming Webhooks を使ってみたい。