習志野技術研究所

あれやこれやしたい習志野在住の人間が書いています。他人のマネばかりですが、初心者目線で躓いたところ等まとめたいです。

slackでいろいろ遊ぶ その1

毎朝天気予報を送信するボットを作る

モチベーション

自宅にはテレビを置いてない。天気予報アプリを見る習慣もない。すると朝玄関を出たら雨でげんなりってことがよくある。

これを見た。

天気予報をSlackに通知する on Heroku

なるほど、毎朝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でSlackに通知を送る

これを参考に以下のようなコードを書いた。

<?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の部分は実行したい動作に置き換えるようだ。 ブラウジングしていると、

https://api.slack.com/methods

を見つけた。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>';
 ?>

こんな感じで取得できた。 f:id:Narashino-tech:20161002094921p:plain

まとめ

Slackのapiは意外と簡単に使える。また、webに情報も多いのでそれほど困らなかった。 ただ、現状だとテキストを送るだけなのでよりリッチなメッセージを送れる Incoming Webhooks を使ってみたい。

参考サイト