【Tweepy】Twitter API v2:タイムラインからリツイートを抽出[Python]

  • URLをコピーしました!
目次

Twitter API v2

前回、TweepyからTwitter API v2を使って、ツイートの情報を取得する「.get_tweet」を試してみました。

今回は自分のタイムラインからリツイートを取得する方法を見ていきましょう。

ちなみに自分のツイートをリツイートされたという意味ではないのに注意です。

あくまでも自分のタイムライン上に流れてきた誰かのリツイートを取得する方法です。

ということでAPIに接続していきますが、とりあえずTwitter API v2とv1.1の両方で接続しておくのが間違いがなさそうなので、両方で接続することにします。

import tweepy

BT = "Your bearer token"
CK = "Your API key"
CS = "Your API secret"
AT = "Your Access token"
ATS = "Your access token secret"

client = tweepy.Client(bearer_token=BT, consumer_key = CK, consumer_secret=CS, access_token=AT, access_token_secret=ATS)

それでは始めていきましょう。

自分のタイムラインを取得

まずは自分のタイムラインを取得していきます。

タイムラインを取得するには「.get_home_timeline()」です。

timeline = client.get_home_timeline()

print(timeline)

実行結果
Response(data=[<Tweet id=1548276490327928832 text='RT @sujinii_asset: 大切なお願いです\n\n『お金の勉強』
をしよう。「投資は怖いから貯金だけ」の考えの人は将来必ずお金に困ります。私は20代後半からお金の勉強を始めたが「20代前半
(中略)
したい、と無在庫物販(せどり)を始めてから本…'>], includes={}, errors=[], meta={'next_token': '7140dibdnow
9c7btw4228my88hs58fvqlv1yy9hnztpv4', 'result_count': 60, 'newest_id': '1548276490327928832', 'oldes
t_id': '1548276433528557570'})

リツイートを取得

次にリツイートされたツイートを抽出していきます。

実はリツイートされたツイートにはその文章の最初に「RT」が挿入されています。

また各ツイートのデータは「data」に、さらに各ツイートの文章は「text」に格納されています。

そのため今回の場合、まずは「timeline.data」で各ツイートのリストを取得し、それぞ一つずつ取り出し、「.text」で文章を取得します。

さらにif文を使って「startswith(‘RT ‘)」で先頭に「RT 」があるものだけ抽出します。

ということでこんな感じ。

retweet = []
for tweet in timeline.data:
    if tweet.text.startswith('RT '):
        retweet.append(tweet)
        
print(retweet)

実行結果
[<Tweet id=1548276490327928832 text='RT @sujinii_asset: 大切なお願いです\n\n『お金の勉強』をしよう。
「投資は怖いから貯金だけ」の考えの人は将来必ずお金に困ります。私は20代後半からお金の勉強を始めたが「20代前半から始めて
(中略)
28557570 text='RT @nmsm_free: 副業月収ごとの生活変化のまとめ💡\n\n5万➡︎月1でプチ贅沢な外食できる\n\n10万➡︎気兼ね
なく飲みにいける\n\n20万➡︎貯金しつつ月1旅行できる\n\n50万➡︎仕事辞めたろ!←脱サラ\n\n仕事辞めたい、脱サラしたい、と無
在庫物販(せどり)を始めてから本…'>]

ちなみにリスト内包表記を使うとこうなります。

retweet = [tweet for tweet in timeline[0] if tweet.text.startswith('RT ')]

さらにもう一歩進んで、リツイートのツイートIDだけ抜き出すには、各リツイートのデータに対し、「.id」をつければ取得できます。

つまり今回の場合はこうなります(リスト内包表記)。

retweetid_list = [tweet.id for tweet in timeline[0] if tweet.text.startswith('RT ')]

リツイートしたアカウントIDを取得

次にそのリツイートは誰がしたのか、アカウントIDを取得してみます。

その場合は、先ほど取得したリツイートのツイートIDと「.get_tweet(ツイートID, expansions=[‘author_id’])」を使います。

authorid_list = []
for retweetid in retweetid_list:
    retweet = client.get_tweet(retweetid, expansions=['author_id'])
    authorid_list.append(retweet.includes['users'][0]['id'])

実行結果
[754583862781448192, 1287646491889119233, 1221433401892167680, 715304072492879872, 
1385183060468002821, 1440571931309187079, 824946265599275008, 1500373122100252672, 
(中略)
2982335484, 1303241272962899968, 1515465979475918848, 1246705092436221952, 1102854507631828992, 
745451614920597504]

元のツイートのIDを取得

次にリツイートされた元のツイートのIDを取得してみましょう。

その場合「.get_tweet」を使い、オプションに「tweet_fields=[‘referenced_tweets’]」を追加します。

「tweet_fields」で取得した値は「.data.referenced_tweets」にあります。

ツイートIDだけ取得する場合は、さらに「.data.referenced_tweets[0][‘id’]」とします。

originaltweetid_list = []
for retweetid in retweetid_list:
    originaltweet = client.get_tweet(id=retweetid, tweet_fields=['referenced_tweets'])
    print(originaltweet)
    print(originaltweet.data.referenced_tweets)
    originaltweetid_list.append(originaltweet])
    
print(originaltweetid_list)

実行結果

ということで自分のタイムラインからリツイートを抽出、そのツイートIDやアカウントID、さらにはリツイートの元のツイートIDを取得する方法でした。

次回は自分のアカウントの情報を取得する方法を試してみましょう。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次