仮想サーファーの波乗り

仮想サーファーの日常

プログラミング・エンジニアのスキルアップ・ブログ運営などに関してよく書く雑記ブログ

➡ Udemyで8/27(木)まで割引セール開催中! 1,200円〜で普段の90%以上OFF!

PythonでSlackBot開発③「Twitterで話題のツイートを教えてくれる」


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で実際に話しかけてみると。。。

f:id:virtual-surfer:20180401155500p:plain

今の日時を教えてくれました!


日時を教えてくれるだけだとさすがに寂しいので、もっと有益な回答してくれるように実装していきましょう。


話題のツイートを教えてくれる機能の実装

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に登録していきます。

f:id:virtual-surfer:20180401160007p:plain

↓TwitterAPIはここを参照。そもそもAPIキー用意していないなら、こちらを参考に設定しましょう。

f:id:virtual-surfer:20180401151101p:plain


APIキーを登録できたら、ファイルの変更を反映して、Herokuを再起動していきます。

$ git add {変更したファイルパス名}
$ git commit -m "{コミット名}"
$ git push heroku master
$ heroku restart


これでSlackBotがいい感じに話題のつぶやきを返してくれるようになったはずです。話しかけてみましょう。「イケダハヤト」とかで検索してみると...

f:id:virtual-surfer:20180401154700p:plain


↓ 検索しても見つからなかった場合

f:id:virtual-surfer:20180401154847p:plain


これで気になった言葉で話題のつぶやきを探すことができるようになりました!


まとめ

今回はTwitterAPIとSlackBotライブラリを利用してBotが返答してくれる機能を実装してきました。

もっと他のAPI活用すれば便利な機能作れそう。割と職場でSlackを活用する場面が多いので、いろいろ触って機能追加していこうと思います!次回はCoingeckoとか仮想通貨チャート情報サイトのAPIを活用して相場情報を回答してくれるように実装していこうと思います!


↓ こちらを参考にして今回の実装をしました。

github.com


Pythonをしっかり学びたい方向け

最後に、Pythonをしっかり学びたいという方向けにおすすめの学習ツールを紹介しておきます。


スッキリわかるPython入門 スッキリわかるシリーズ

そもそもPythonの書き方が分からないという方はこちら、安いし分かりやすいのでオススメです。


プログラミング言語 Python 3 入門

f:id:virtual-surfer:20191207103500p:plain

このコースで学べること

  • Pythonの基礎(データ、制御フロー、関数、データ構造、モジュール、例外(エラー)、クラス、入力と出力、標準ライブラリ)
  • ターミナルを使用したPythonの実行
  • PyCharmを使用したPython ファイルの作成・デバッグ実行

Pythonの基礎の基礎が丁寧に開設されていて、Python初心者の方でもPythonへの理解が深まりやすいUdemyのコースです。

Pythonの仕組みを基礎からしっかりと理解しておきたい方にオススメです。


【プログラミング言語 Python 3 入門】をUdemyで見てみる


Pythonで作業の自動化・効率化

Pythonでのプログラミング学習中の方向けに、Noteでより詳細なプログラミングチュートリアルを配信しているので、そちらもチェックしてみてください( ・v・)/

note.mu


では!