はじめに
Twitterボット向けにリプライが送られたら、それに反応できるようにするために、Twythonでmentionのデータを取得する方法をまとめます。
前提知識
リプライとメンションの違い
リプライ:ツイートの先頭に「@ユーザー名」がついているもののこと。
メンション:ツイートに「@ユーザー名」がついているもののこと。
つまり、リプライはメンションの特別な一種です。そのためリプライデータを取得するためには、まずメンションデータを収集する必要があります。*1
JSONとは
JSONとは(JavaScript Object Notation)は、軽量のデータ交換フォーマットです。人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行なえる形式です。
https://www.json.org/json-ja.html
Twitter APIの返り値の形式が基本的にはJSON形式となっています。そのため、JSONデータの扱い方を知っておく必要があります。*2
mentionのデータの取得の流れ
1. ボットのスクリーンネームを取得する
#ボットのユーザー情報取得 bot_credentials = twitter.verify_credentials() #スクリーンネームを表示する print(bot_credentials['screen_name'])
ツイッターアカウントごと固有の名前をscreen_nameと呼びます。verify_credentialsから得られるJSONデータにscreen_nameが含まれるので、これを利用します。
2. ボットのタイムラインから最新のツイートを取得する
bot_name = bot_credentials['screen_name'] bot_timeline = twitter.get_user_timeline(screen_name = bot_name,count = 5) print(bot_timeline[0]) #JSONデータそのままなのでごちゃごちゃデータ print(bot_timeline[0]['id']) #ツイートごとのユニークid表示 print(bot_timeline[0]['text']) #ツイート文の表示
screen_nameとcount(取得するツイート数)を指定して、タイムライン情報を取得します。これもJSONデータです。最新は先頭の要素へアクセスすることで取得できます。
3. ボットの最新ツイート以降のメンションを取得する
bot_mentions = twitter.get_mentions_timeline(count=10, since_id=bot_timeline[0]['id']) print (bot_mentions[0]['text']) print (bot_mentions[0]['text'].find(bot_name))
countとsince_id(メンションの取得起点となるid)を指定して、メンション情報を取得します。このtextの先頭にボットのスクリーンネームがあればリプライと判定できます。
twython仕様書
適宜下記のtwython仕様書を確認すると良いです。
Developer Interface — Twython 3.8.0 documentation
実装ソースコード
ファイル構成
ファイル名 | 役割 | 備考 |
---|---|---|
get_mention.py | mentionのデータを取得する | |
auth.py | キー情報を記載する |
get_mention.py
#!/usr/bin/env python # coding: utf-8 import twython import json import pprint from collections import OrderedDict # twitter configuration from twython import Twython from auth import ( consumer_key, consumer_secret, access_token, access_token_secret ) twitter = Twython( consumer_key, consumer_secret, access_token, access_token_secret ) def main(): #pprint.pprint(twitter.verify_credentials()) bot_credentials = twitter.verify_credentials() bot_name = bot_credentials['screen_name'] bot_timeline = twitter.get_user_timeline(screen_name = bot_name,count = 5) print (bot_timeline[0]['id']) print (bot_timeline[0]['text']) bot_mentions = twitter.get_mentions_timeline(count=10, since_id=bot_timeline[0]['id']) print (bot_mentions[0]['text']) print (bot_mentions[0]['text'].find(bot_name)) if __name__ == '__main__': main()
auth.py
ツイッターへアクセスするため、下記のような認証コードファイルも必要です。詳細はこちら。
#*には各種キーを入れる consumer_key = '********' consumer_secret = '********' access_token = '********' access_token_secret = '********'
実行結果例
pi@raspberrypi:~/holy_ground_bot $ python get_mention.py 1053859760078905344 サマーウォーズの聖地は長野県の上田市ですっ! @Holy_Ground_ こんにちは 1
こんにちは
— YU2TA7KA (@UGKGbrothers) 2018年10月21日