前回までで、話しかけたら答えてくれるSlack botが完成しました!
今は話しかけたことに反応するだけなので、今度は情報をどこかからもってきて教えてくれるようなbotを作りたい…
そんなわけで、時間と天気を教えてくれるSlack botも作ってみました。
時間を教えてくれるSlack bot
「今何時?」と聞いたら「◯時◯分だよ!」と答えてくれるbotを作ります。
Pythonにはたくさんのライブラリがあって、それをインポートすると自分でコードを書かなくてもいろいろできるというスーパー優秀な機能があるわけです。(他の言語のことはわからないので、Pythonだけのものじゃないかもしれないですが…)
今回はそれを活用していきます!
と偉そうに言っているものの、これも参考にしていた記事にサンプルが載ってたのでほぼコピペです。笑
記事はこちら。
PythonでSlackのBotを作成する方法を現役エンジニアが解説【初心者向け】
datetimeライブラリをインポートする
日時を知るにはdatetimeが必要です。
import datetime
上記のようにdatetimeをインポートします。
メンションに反応して時間を教えてくれるようにコードを書く
次に、メンションあり(@botの名前)で反応するように、コードを書きます。
respond_to('今何時?') def time(message): dt_now = datetime.datetime.now() message.reply(dt_now.strftime('%H時%M分') + 'だよ!')
「datetime.datetime.now()」というのが、現在時刻を知るために使うコードです。
語尾は自分が好きものに設定します。
これで時間を知るためのSlack botは完成です!!
botの写真
天気を教えてくれるSlack bot
次は天気です。
天気を教えてくれるライブラリなどはないので(時間も場所も多すぎる!)自分で取りに行かねばなりません。
今回は、東京の天気を教えてくれるbotを作ります。
情報を取得するためのライブラリをインポート
ライブラリはどの場面でも活用されるものなんですね。
こちらは、Yahoo天気をスクレイピングしていた方の記事を参考に作りました!
ただ、スクレイピングはあまり高頻度で行うと「攻撃」とみなされる可能性があるので気をつけなければならないみたいです。
import urllib3 from bs4 import BeautifulSoup #アクセスするURL url = 'https://weather.yahoo.co.jp/weather/jp/13/4410.html' #URLにアクセスする 戻り値にはアクセスした結果やHTMLなどが入ったinstanceが帰ってきます http = urllib3.PoolManager() instance = http.request('GET', url) #instanceからHTMLを取り出して、BeautifulSoupで扱えるようにパースします soup = BeautifulSoup(instance.data, 'html.parser')
こちらは、上記の記事からまるっと使わせていただきました。
「urllib3」や「BeautifleSoup」なるライブラリを活用して、指定したURLから情報を取得するようです。
戻り値を色々いじって扱えるデータにしています。
メンションに反応して天気を教えてくれるようにコードを書く
こちらは、元のコードそのままでは使えないのでちょっと書き換えます。
@respond_to('今日の天気は?') def weather_today(message): # CSSセレクターで天気のテキストを取得します。 # 今日の天気 tenki_today = soup.select_one('#main > div.forecastCity > table > tr > td > div > p.pict') message.reply("今日の天気は" + tenki_today.text + 'だよ〜') input() @respond_to('明日の天気は?') def weather_today(message): # 明日の天気 tenki_tomorrow = soup.select_one('#main > div.forecastCity > table > tr > td + td > div > p.pict') message.reply("明日の天気は" + tenki_tomorrow.text + 'だよ〜') # 一瞬で画面が消えないよう入力されるまで待機 input()
さっきアクセスしたURLから必要なデータを取り出してきているのかな?
いい感じに形を整えることができました。
写真or twittter