PythonのTwitter制御ライブラリTweepy〜リツイートされたツイートの抽出とリツイートしてくれたユーザー名の取得〜

目次

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時間(もしくは、ある特定の期間中)でリツイートしてくれた人への感謝のツイートなので、時間指定をする必要があります。

次回は今回のプログラムを改良して、時間の概念を入れていきましょう。

ということで今回はこんな感じで。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる