Duramenteです。
今月のテーマがBotということで、ここ最近使い始めたSlackで動くBotを作成しました。
この記事では、
- Slack Botの作成方法
- Bot作成でつまづいた部分
- 簡単な機能実装例
を紹介します。
参考サイト
Slack BotでGoogle検索するとbotkitで作ってみたというブログなどが多かったため、以下のサイトを参考にbotkitで作成したりもしたのですが、JavaScriptにあまり慣れていないため途中で断念しました。
http://toach.click/slack-botkit/
どうしようかと思っているときに、Pythonで作成してみたという以下のブログを発見したので、参考にさせていただきました。
Slack Botの作成
先ほどのブログを参考に、
・Slack Botアカウントの作成
・Pythonライブラリのインストール
・botの起動
の順で進めてSlack Botを起動することができました。
しかし、この後プラグインスクリプトの作成を行なうのですが、ここで少しつまづいてしまいました。プラグインスクリプトの内容がBotに反映されないのです。
default_replyに記述した反応になってしまいます。
どうやらslackbot_settings.pyにプラグインに関する設定を記述しないといけないようで、以下のコードを追加することで解決しました。
PLUGINS = [
'plugins'
]
ちゃんと反応してくれました。
天気情報を出力させる
プラグインの問題が解決したので、ここからBotに機能を追加していきます。
今回は、Botへ「天気」とメッセージを送ると天気情報を返信してくれる機能を追加したいと思います。
天気の情報取得には以下のAPIを用いています。
json形式でデータを返してくれるので、そこから必要な情報を取得し、Botが教えてくれるようにします。
以下のコードをrespond.pyに追加することで機能が追加できます。
@respond_to('天気') def weather(message): import urllib import json url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=' # '130010'とすると東京の情報を取得してくれる # ここを変えれば任意の地域の天気情報を取得できる city_id = '130010' html = urllib.request.urlopen(url+city_id) jsonfile = json.loads(html.read().decode('utf-8')) text = jsonfile['description']['text'] message.send(text)
urlの'city='の後の数字を変更することで、どこの天気情報を取得するかを変更することができます。今回は東京の天気を取得しています。
以下のURLからリクエストする地域のidを取得できます。