PythonでSlackBotを開発しよう企画の第3回目。今回は、Twitterで話題になっているツイートを探して教えてくれる機能を実装し、返答内容を追加する方法を紹介します。
今回紹介する内容を応用すれば、割となんでもBotで完結できそうな予感がしてます。
現在日時を教えてくれる機能の実装
まずは、「今何時?」と聞いたら今日の日時を教えてくれるように実装します。slack_settings.pyとrun.pyを以下のように変更します。
slack_settings.py
PLUGINS = [
"slackbot.plugins"
]
↑ slackbot.pluginsというプラグインを利用できるように追加する。
run.py
# coding=utf-8 from slackbot.bot import Bot from slackbot.bot import respond_to from slackbot.bot import listen_to import re from datetime import datetime # 「@bot名 今何時?」とメッセージすると時間を教えてくれる @respond_to('今何時?') def now(message): strftime = datetime.now().strftime("%Y/%m/%d %H時%M分%S秒っすね") message.reply(strftime) def main(): bot = Bot() bot.run() if __name__ == "__main__": main()
↑ 「@respond_to」で「@Bot名」以降の特定の文字列の入力を検知して、処理を行います。message.reply("文字列")で、文字列を返してくれます。
ファイルの記述ができたら、以下のコマンドでherokuにlocalの変更内容を反映させ、herokuアプリケーションを再起動します。
$ git add {変更したファイルパス名} $ git commit -m "{コミット名}" $ git push heroku master $ heroku restart
これで実装は完了です。Slackで実際に話しかけてみると。。。
今の日時を教えてくれました!
日時を教えてくれるだけだとさすがに寂しいので、もっと有益な回答してくれるように実装していきましょう。
話題のツイートを教えてくれる機能の実装
Twitterから特定の文章で100検索をして、いいね数が多いものの上位5件を表示するようにしてみましょう。まずは以下のようにrun.pyファイルを編集します。
run.py
# coding=utf-8 from slackbot.bot import Bot from slackbot.bot import respond_to import tweepy import os @respond_to('searchTweet (.*)') def search_tweet(message, word): # twitterのアクセス情報 auth = tweepy.OAuthHandler(os.environ['CONSUMER_KEY'], os.environ['CONSUMER_SECRET']) auth.set_access_token(os.environ['ACCESS_TOKEN'], os.environ['ACCESS_TOKEN_SECRET']) api = tweepy.API(auth) post_text = '' message.send('「' + word + '」でtweet検索するね...') search_results = api.search(q=word, lang='ja', result_type='recent', count=100) # 検索結果を辞書{検索結果, いいね数}に詰めていく result_dictionary = {} for result in search_results: user = result.user favorite_count = result.favorite_count tweet_link = 'https://twitter.com/' + user.screen_name + '/status/' + str(result.id) result_text = '\n' + user.name + '@(' + user.screen_name + ')\n' + result.text + '\n(' + str(favorite_count) + 'いいね)' +tweet_link + '\n' result_dictionary.setdefault(result_text, result.favorite_count) if len(result_dictionary) == 0: message.send('ツイート見つからなかったす。') return # いいね数が多い(valueの降順)ものからユーザー情報とつぶやき文章を取得 loop_count = 0 for k, v in sorted(result_dictionary.items(), key=lambda x: -x[1]): loop_count += 1 post_text = post_text + '-------------------------------------------------------' + k # 5個分のツイートが取れたらループ中断 if loop_count >= 5: break message.send(post_text) def main(): bot = Bot() bot.run() if __name__ == '__main__': main()
↑ やっていることとしては、TwitterAPIを使ってTweetを検索し、その中でいいね数の多いもの上位5つを表示するようにしてる感じですね。「loop_count >= 5」の数を変えれば表示するツイート数を変えることもできます。
ファイルの編集ができたら、TwitterAPIのアクセスキーをHerokuに登録していきます。
↓TwitterAPIはここを参照。そもそもAPIキー用意していないなら、こちらを参考に設定しましょう。
APIキーを登録できたら、ファイルの変更を反映して、Herokuを再起動していきます。
$ git add {変更したファイルパス名} $ git commit -m "{コミット名}" $ git push heroku master $ heroku restart
これでSlackBotがいい感じに話題のつぶやきを返してくれるようになったはずです。話しかけてみましょう。「イケダハヤト」とかで検索してみると...
↓ 検索しても見つからなかった場合
これで気になった言葉で話題のつぶやきを探すことができるようになりました!
まとめ
今回はTwitterAPIとSlackBotライブラリを利用してBotが返答してくれる機能を実装してきました。
もっと他のAPI活用すれば便利な機能作れそう。割と職場でSlackを活用する場面が多いので、いろいろ触って機能追加していこうと思います!次回はCoingeckoとか仮想通貨チャート情報サイトのAPIを活用して相場情報を回答してくれるように実装していこうと思います!
↓ こちらを参考にして今回の実装をしました。
Pythonをしっかり学びたい方向け
最後に、Pythonをしっかり学びたいという方向けにおすすめの学習ツールを紹介しておきます。
スッキリわかるPython入門 スッキリわかるシリーズ
そもそもPythonの書き方が分からないという方はこちら、安いし分かりやすいのでオススメです。
プログラミング言語 Python 3 入門
このコースで学べること
- Pythonの基礎(データ、制御フロー、関数、データ構造、モジュール、例外(エラー)、クラス、入力と出力、標準ライブラリ)
- ターミナルを使用したPythonの実行
- PyCharmを使用したPython ファイルの作成・デバッグ実行
Pythonの基礎の基礎が丁寧に開設されていて、Python初心者の方でもPythonへの理解が深まりやすいUdemyのコースです。
Pythonの仕組みを基礎からしっかりと理解しておきたい方にオススメです。
【プログラミング言語 Python 3 入門】をUdemyで見てみる
Pythonで作業の自動化・効率化
Pythonでのプログラミング学習中の方向けに、Noteでより詳細なプログラミングチュートリアルを配信しているので、そちらもチェックしてみてください( ・v・)/
では!