Tweepy
前回、PythonでTwitterを制御するためのライブラリTweepyを使って作りたいアプリケーションの概要と特定ユーザーのツイートの取得を解説しました。

今回はさらにTweepyで自分のツイートの中からリツイートされたツイートを抽出し、さらにリツイートしてくれたユーザー名の取得を行ってみましょう。
ということでまずは前回同様APIへの接続を行います。
<セル1>
import tweepy
consumer_key = 'API keyを入力'
consumer_secret = 'API key secretを入力'
access_token = 'Access tokenを入力'
access_token_secret = 'Access token secretを入力'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
実行結果
それでは始めていきましょう。
リツイート数の取得
まずは自分のタイムライン上のツイートのリツイート数の取得を行います。
リツイート数は取得した特定のツイートに対して「.retweet_count」で取得することができます。
<セル2>
tweets = tweepy.Cursor(api.user_timeline, id="@Nori_3PySci").items(15)
for tw in tweets:
print(tw.retweet_count)
実行結果
0
0
0
0
0
35
0
0
0
0
0
2
91
0
0
「tweepy.Cursor(api.user_timeline, id=”@Nori_3PySci”).items(15)」で@Nori_3PySciのタイムライン上の15個のツイートを取得しています。
そして変数tweetsに格納した後、for文を使ってツイートを一つずつ取り出し、変数twに格納します。
そして「tw.retweet_count」とすることで、そのツイートのリツイート数を取得しています。
しかし問題は自分がリツイートやリプライしたツイートも含まれる、つまり自分がツイートしたものでないツイートも含まれてしまうという点です。
ということで自分のツイートのみ取得してみましょう。
自分発のツイートのみ取得
自分が発信したツイートのみ取得するには、逆の考え方をし、リツイート、もしくはリプライ以外のツイートを取得することで、自分のツイートのみを取得します。
リツイートしたツイートは「.text.startswith(‘RT’)」、リプライのツイートは「.text.startswith(‘@’)」で取得できます。
つまりTwitter APIで取得したツイートのテキストデータの最初に「RT」とあるとリツイートを示しており、「@」があるとリプライを示しているということになります。
そしてどちらもないものが自分発のツイートということです。
ということで自分発のツイートをより分け、そのリツイート数を表示してみるとこんな感じになります。
<セル3>
tweets = tweepy.Cursor(api.user_timeline, id="@Nori_3PySci").items(50)
for tw in tweets:
if (tw.text.startswith('RT')) or (tw.text.startswith('@')):
pass
else:
print(tw.retweet_count)
実行結果
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
悲しいかな、全然リツイートされていません。
今回の目的は自分発のツイートに対するリツイート数を取得することで、それができたのでよしとしましょう。
リツイートされたツイートのIDを取得
次にリツイートされたツイートのIDを取得していきます。
ツイートのIDを取得するには「.id」で取得できます。
リツイートされたもの、つまり「.retweet_count」が1以上のツイートをより分け、IDを取得します。
<セル4>
tweets = tweepy.Cursor(api.user_timeline, id="@Nori_3PySci").items(100)
rt_ids = []
for tw in tweets:
if (tw.text.startswith('RT')) or (tw.text.startswith('@')):
pass
else:
if tw.retweet_count >= 1:
rt_ids.append(tw.id)
print(rt_ids)
実行結果
[1348194883274739719, 1348097218755002368, 1348036645405089792, 1347877037168422913]
少しずつ最初に取得するツイート数を多くしていっているのは内緒です。
リツイートしてくれたユーザーのIDを取得
次にリツイートしてくれたユーザーのIDを取得します。
そのためにはリツイートされたツイートのIDを使って、リツイートの情報を取得し、そこからユーザーIDを取得します。
最初の「リツイートされたツイートのIDを使って、リツイートの情報を取得する」には「api.retweets(id=ツイートのID)」で取得できます。
その後、「ユーザーIDを取得する」には「.user.screen_name」を使います。
<セル5>
rt_users = []
for ids in rt_ids:
retweets = api.retweets(id=ids)
for rt in retweets:
rt_users.append("@" + rt.user.screen_name)
print(rt_users)
実行結果
['@hishihari', '@aikoku2004', '@wfV5wUj0WPOmdtq', '@kanta_traveler', '@IshikawaRpch', '@Y_D_O_harumichi']
ちなみに今回はこの後、このユーザーIDをツイートしますが、各ユーザーに通知が届くように、最初に@をつけておきます(メンションというらしいです)。
これでリツイートしてくれたユーザー名の取得ができました。
ただこのままではタイムライン上のあるツイート数中のツイートに対するリツイートとなってしまいます。
最終的に行いたいのは24時間(もしくは、ある特定の期間中)でリツイートしてくれた人への感謝のツイートなので、時間指定をする必要があります。
次回は今回のプログラムを改良して、時間の概念を入れていきましょう。

ということで今回はこんな感じで。
コメント