Twitter API v2
前回、TweepyからTwitter API v2を使って、ツイート、返信(リプライ)、投票付きツイート、メディア付きツイート(v1.1)をしてみました。
今回はツイートの情報の取得の方法を勉強していきます。
特に投票ツイートが他のツイートに比べて情報量が多いので、例として紹介していきます。
流れとしてはツイートをTwitter API v2からして、その情報を取得するとしていきますので、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)
それでは始めていきましょう。
通常のツイートの情報を取得
最初はとりあえず試してみるということで、通常のツイートの情報を取得してみましょう。
ということでツイートをしてそのツイートIDを取得します。
tweet_data1 = client.create_tweet(text='Twitter API v2のテストです。')
print(tweet_data1.data['id'])
実行結果
1546139466502647809
ツイートの情報を取得するにはこのツイートIDが必要です。
そしてツイートの情報を取得するには「.get_tweet(id=ツイートID)」とします。
print(client.get_tweet(id=1546139466502647809))
実行結果
Response(data=<Tweet id=1546139466502647809 text='Twitter API v2のテストです。'>,
includes={}, errors=[], meta={})
このツイートに対してのリツイートや引用リツイート、返信、いいねの数を取得するには、オプションに「tweet_fields=[‘public_metrics’]」を追加して、「情報を格納した変数.data.public_metrics」として取得します。
tweet_data1 = client.get_tweet(id=1546139466502647809, tweet_fields=['public_metrics'])
print(tweet_data1.data.public_metrics)
実行結果
{'retweet_count': 0, 'reply_count': 0, 'like_count': 5, 'quote_count': 0}
これは前に「.get_user」でユーザー情報を取得した時と同じですね。
投票ツイートの情報を取得
次に投票ツイートの情報を取得する方法を紹介します。
前に「expansions」や「〇〇_fields」の取得方法を紹介した時と同様にここでもかなりの時間を浪費しました。
なぜこんなに欲しい情報にアクセスするのが難しいのか理解に苦しみますが、少しでも皆さんのお役に立てれば幸いです。
とりあえず投票ツイートをして、そのツイートIDを取得します。
tweet2 = client.create_tweet(text='Twitter API v2で投票システムのテストです。', poll_options=['回答1','回答2','回答3'], poll_duration_minutes=60)
print(tweet2.data['id'])
実行結果
1546139513961205760
このツイートの情報を「.get_tweet」で取得してみます。
print(client.get_tweet(id=1546139513961205760))
実行結果
Response(data=<Tweet id=1546139513961205760 text='Twitter API v2で投票システムのテストです。'>,
includes={}, errors=[], meta={})
デフォルトの状態ではツイート内容くらいしか取得することができません。
投票ツイート用のexpansionsである「’attachments.poll_ids’」を「.get_tweet」に追加してみます。
print(client.get_tweet(id=1546139513961205760, expansions=['attachments.poll_ids']))
実行結果
Response(data=<Tweet id=1546139513961205760 text='Twitter API v2で投票システムのテストです。'>,
includes={'polls': [<Poll id=1546139513902497793 options=[{'position': 1, 'label': '回答1',
'votes': 0}, {'position': 2, 'label': '回答2', 'votes': 0}, {'position': 3, 'label': '回答3',
'votes': 0}]>]}, errors=[], meta={})
「includes」の中に投票の項目や現在の投票数などが取得できました。
これはこれで役に立つ情報ですが、投票ツイートでは投票できる期限があります。
しかしこのままではその情報を取得できません。
ということで「poll_fields」の情報を取得してみましょう。
「poll_fields」で使えるコマンドを確認するため、わざとエラーを出してみます。
print(client.get_tweet(id=1546139513961205760, expansions=['attachments.poll_ids'], poll_fields=['fields']))
実行結果
---------------------------------------------------------------------------
BadRequest Traceback (most recent call last)
Input In [8], in <cell line: 1>()
----> 1 print(client.get_tweet(id=1546139513961205760, expansions=['attachments.poll_ids'],
poll_fields=['fields']))
(中略)
BadRequest: 400 Bad Request
The `poll.fields` query parameter value [fields] is not one of
[duration_minutes,end_datetime,id,options,voting_status]
これで下記の5種類のコマンドが使えることが分かりました。
- duration_minutes
- end_datetime
- id
- options
- voting_status
idは投票のID、またoptionsは項目なので、expansions=[‘attachments.poll_ids’]で既にデータは取れています。
そこで「duration_minutes」、「end_datetime」、「voting_status」を取得してみましょう。
tweet_data2 = client.get_tweet(id=1546139513961205760, expansions=['attachments.poll_ids'], poll_fields=['duration_minutes', 'end_datetime', 'voting_status'])
print(tweet_data2.includes['polls'][0].duration_minutes)
print(tweet_data2.includes['polls'][0].end_datetime)
print(tweet_data2.includes['polls'][0].voting_status)
実はこれまでのように「.data.duration_minutes」では情報が取得できませんでした。
色々と試してみた結果、「.includes[‘polls’][0].duration_minutes」といった形にするとそれぞれの情報が取得できることが分かりました。
なぜこんなにややこしい場所に格納されているのか理解できませんが、何とかこれで投票ツイートの情報も取得できるようになりました。
ともかくこれでツイートの情報を取得できるようになりました。
次回は自分のタイムラインからリツイートを抽出する方法を見てみましょう。
ではでは今回はこんな感じで。
コメント