Tweepy
前回、PythonでTwitterを制御するためのライブラリTweepyを使って自分発のツイートの中から、リツイートされたものを取得し、さらにリツイートしたユーザーIDを取得しました。

ただこの状態ではある特定のツイート数のうち、リツイートされたものを取得している状態です。
今回は特定の期間のツイートに対し、リツイートされたツイートを取得し、リツイートしたユーザーIDを取得するようにプログラムを改変していきましょう。
ということでまずは前回のおさらいから。
最初のセルはTwitter 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)
実行結果
次にリツイートされたツイートのIDを取得します。
<セル2>
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を取得します。
<セル3>
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']
これをもとに時間の概念を入れていきましょう。
datetimeモジュール
日時を扱うには「datetimeモジュール」を使うのが便利です。
datetimeモジュールは前に日時を取得し、フォーマットを変更するということを解説しています。

今回は現在日時の取得、時間の変更、時間の比較を使います。
それぞれ実際に試しつつ、解説をしていきましょう。
まずは現在日時の取得です。
「import datetime」でdatetimeモジュールをインポートして、「datetime.datetime.now()」で現在日時を取得します。
<セル4>
import datetime
time_now = datetime.datetime.now()
print(time_now)
実行結果
2021-01-12 21:49:24.068956
ツイートの日時の取得
次にツイートの日時の取得を行います。
こちらはdatetimeモジュールではなく、tweepyライブラリで行います。
先ほどリツイートされたツイートはIDを取得していますので、そのIDを「api.get_status(ツイートID)」とすることでそのツイートの情報を取得できるようになります。
そして「.created_at」とすることでツイートした時間を取得できます。
<セル5>
for ids in rt_ids:
tw_status = api.get_status(ids)
print(tw_status.created_at)
実行結果
2021-01-10 09:08:03
2021-01-10 02:39:58
2021-01-09 22:39:16
2021-01-09 12:05:02
これで取得できたと喜ぶのは早いです。
実はこの時間は協定世界時となっているため、日本の時間よりも9時間遅くなっています。
そこで取得した時間に9時間足すことで、日本時間に変更します。
ここで再度datetimeモジュールを使います。
ある日時に対して、特定の日数や時間を足したり引いたりするには、「datetime.timedelta()」を使うのが便利です。
例えば1日を取得したい場合には「datetime.timedelta(days=1)」とすることで、1日という時間を取得することができます。
また1時間を取得したい場合には「datetime.timedelta(hours=1)」、1週間を取得したい場合には「datetime.timedelta(weeks=1)」とすることで取得できます。
この単位としては、「weeks」、「days」、「hours」、「minutes」、「seconds」、「milliseconds」、「microseconds」を使うことができます。
「month」がないのはちょっとびっくりしましたが、月によって日数が違うことを考えるとないのも納得ですね。
それではツイート時間に9時間足すことで日本時間に変更していきましょう。
<セル6>
for ids in rt_ids:
tw_status = api.get_status(ids)
print(tw_status.created_at + datetime.timedelta(hours=9))
実行結果
2021-01-10 18:08:03
2021-01-10 11:39:58
2021-01-10 07:39:16
2021-01-09 21:05:02
特定の期間のツイートのみを取得
次に時間の比較をすることで、特定の期間にしたツイートのみを取得していきましょう。
ここでも使うのは「datetime.timedelta」です。
まずは1日の間のツイートで、リツイートされたツイートのIDを取得してみましょう。
<セル7>
tweets = tweepy.Cursor(api.user_timeline, id="@Nori_3PySci").items(100)
time_now = datetime.datetime.now()
rt_ids = []
for tw in tweets:
if time_now - (tw.created_at + datetime.timedelta(hours=9)) <= datetime.timedelta(days=1):
if (tw.text.startswith('RT')) or (tw.text.startswith('@')):
pass
else:
if tw.retweet_count >= 1:
rt_ids.append(tw.id)
print(rt_ids)
実行結果
[]
ここではif文を使って、「time_now – (tw.created_at + datetime.timedelta(hours=9)) <= datetime.timedelta(days=1)」とすることで、現在時間からツイートした時間を引いて、その差分が1日以下になるものを選別しています。
ただ残念ながら、1日の間でリツイートされたツイートはなかったようで、空のリストが表示されてしましました。
そこで期間を7日間にしてみましょう。
<セル8>
tweets = tweepy.Cursor(api.user_timeline, id="@Nori_3PySci").items(100)
time_now = datetime.datetime.now()
rt_ids = []
for tw in tweets:
if time_now - (tw.created_at + datetime.timedelta(hours=9)) <= datetime.timedelta(days=7):
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]
今度は4つのツイートIDが表示されました。
これで特定期間内に自分発のツイートでリツイートされたツイートIDを取得し、リツイートしてくれたユーザーIDを取得することができました。
次回は取得したユーザーIDを使って、感謝のツイートしてみましょう。

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