Python

TwitterAPI v2でツイート検索やユーザー情報を取得するサンプルコードまとめ集

この記事は約10分で読めます。

 

2021年の11月にTwitterAPIの仕様変更が実施されてV2が標準になったのをきっかけにTwitterAPIのラッパーライブラリのTweepyもV2用にバージョンアップが行われました。

 

それにより関数の名前や引数などがV1.1の書き方と変わっているケースが多く、ネットの情報もV1.1とV2.0のものが混在していて自分もググっていて混乱するので、Tweepy(TwitterAPI v2)でツイート検索やユーザー情報を取得するサンプルコードを纏めてみました。TwitterAPI v2の使い方などで困っている人の助けになれば幸いです。

 

Tweepyのインストール

 

Tweepyはバージョンで関数名などが変わっているため、バージョンを統一します。本記事では4.10.0を使用しています。バージョンを指定してPIPでライブラリをインストールする場合は以下のコマンドを実行してください。

 

#Tweepyのインストール
$ pip install tweepy==4.10.0

 

ライブラリの読み込みとAPIの設定

 

import tweepy
from datetime import datetime
from datetime import timedelta
import json
import requests
import traceback
import os
import pandas as pd

# ライブラリのバージョン確認 tweepyのバージョンは4.10.0です
print(f'tweepyのバージョンは{tweepy.__version__}です')

consumer_key = 'xxx'
consumer_secret = 'xxx'
access_token = 'xxx'
access_token_secret = 'xxx'
bearer = 'xxx'

#APIインスタンスの作成
client = tweepy.Client(bearer)
api = tweepy.Client(None, consumer_key, consumer_secret, access_token, access_token_secret)


 

ツイート検索

 

# ツイート取得
import pprint
for tweet in tweepy.Paginator(client.search_recent_tweets, query='ワンピース lang:ja -is:retweet',
    tweet_fields=['id','created_at','entities','public_metrics','attachments','text','author_id','lang',],
    user_fields=['description','protected','name','username','public_metrics','profile_image_url'],
    expansions='author_id',max_results=10).flatten(limit=1):
    pprint.pprint(tweet.data)

tweet_id = tweet.data['id']
print(f'サンプルツイートID:{tweet_id}')

 

lang:ja は検索結果を日本語のツイートのみ絞る

-is:retweetはRTを除外すること指定しています。

 

他の検索条件のクエリについては以下参照

https://yonoi.com/twitter-search-command/

 

 

<実行結果>

{
'author_id': '196098708',
'created_at': '2022-09-17T12:48:26.000Z',
'entities': {'mentions': [{'end': 16, 'id': '241810950', 'start': 3, 'username': 'hirayama8emi'}]}, 
'id': '1571118883427483649', 
'lang': 'ja', 
'public_metrics': {'like_count': 0, 'quote_count': 0, 'reply_count': 0, 'retweet_count': 127}, 
'text': 'RT @hirayama8emi: まぁたんゆりりん夜の部!\n' '\n' 'まちこの想像力と、べーせんの神対応と、ゆいとんのきゅるんとした可愛いさ!見習いたい…!w\n' '恋バナで盛り上がったのとっても楽しかったなー!\n' '\n' '爆モテナイトという事でワンピースを着ました!メイクさんとゆいとんがTシャツ…'
}

 

中身は変わりますが、こんな感じの情報が取得できます。

今回は例なので1件だけを取得するようにしていますが、

max_resultsとLimitは数字を変えれば取得件数が増えます。

 

また「tweet_id」は下のコードでいいねやRTを行う際に使用します。

「author_id」はツイート主のアカウント内部IDを指します。

 

アカウント情報を取得する

 

いいね・RTのサンプルアカウントは私自身のアカウントを使います。

Twitterアカウント→ @python_mllover

 

user=api.get_user(username='python_mllover',
                    user_fields=['description','protected','name','username','public_metrics','profile_image_url']
                    ,user_auth=True)
print(user)

 

<実行結果>

Response(data=<User id=965799286117027841 name=ミナピ(ピン) username=python_mllover>, includes={}, errors=[], meta={})

 

user_fieldsで指定しているプロフィール内容やフォロー数・フォロワー数などの情報が一見取得出来ているようには見えませんが、ちゃんと取得できています。user_fieldsの情報は以下のようにして抽出することができます

 

# アカウントのフォロー・フォロワー情報を取得する
print(user.data.public_metrics)

 

<実行結果>

{‘followers_count’: 2582, ‘following_count’: 2505, ‘tweet_count’: 900, ‘listed_count’: 6}

 

参照:https://qiita.com/aki4003/items/5bc6b97ef496bd094edd

 

アカウントのフォロワー情報を取得する

 

#ユーザーのフォロワーを出力
followers_data = api.get_users_followers(id=965799286117027841,user_auth=True)
followers_data

 

実行すると以下のようにフォロワーのアカウント情報を取得することができます。

 

<実行結果>

Response(data=[<User id=1571085711524401152 name=ななは username=IaeBGMnjLFKtbGY>, <User id=1567934684868354048 name=謙一朗☘ビジネス案内人/フリーランス username=qinylngbijines3>,…

 

アカウントのツイートを取得する

 

# 特定のユーザーのツイートを取得する
api.get_users_tweets(965799286117027841, max_results=100,user_auth=True)

 

その他引数などは公式ドキュメント参照

 

アカウントのフォロー情報を取得する

 

#フォロー取得
follows_data = api.get_users_following(id=965799286117027841,user_auth=True)
print(follows_data)
実行すると以下のようにフォロワーと同じようにフォローしているアカウントの情報を取得することができます。
<実行結果>
Response(data=[<User id=1571085711524401152 name=ななは username=IaeBGMnjLFKtbGY>, <User id=1567934684868354048 name=謙一朗☘ビジネス案内人/フリーランス username=qinylngbijines3>,…

ツイートを行う

 

# ツイート
api.create_tweet(text="テストテスト")

 

特定のツイートにリプライを送る場合は引数の「in_reply_to_tweet_id」でツイートIDを指定します

 

# リプライを送る
api.create_tweet(
  text=text,
  in_reply_to_tweet_id=tweet_id
  )

 

ツイートにいいねを付ける

 

# いいねを付ける
api.like(tweet_id)

ツイートをリツイートする

 

# リツイートを行う
api.retweet(tweet_id)

 

ユーザーをフォローする

 

# フォロー
api.follow(target_user_id=965799286117027841)

 

<実行結果>

Response(data={‘following’: True, ‘pending_follow’: False}, includes={}, errors=[], meta={})

 

target_user_idは数値の内部IDを指定する必要があります。

‘pending_follow’は鍵垢をフォローした場合にTrueとなります。

 

ユーザーをフォロー解除(リムーブ)する

 

# フォロー解除
api.unfollow_user(target_user_id=965799286117027841)

 

ユーザーをブロックする

 

# Tweepy経由でユーザーをブロックする
api.block(target_user_id=904318848622510080)

 

ユーザーをブロック解除する

 

# Tweepy経由でユーザーのブロック解除する
api.unblock(target_user_id=904318848622510080)

 

ユーザーをミュートにする

 

# Tweepy経由でユーザーをミュートにする
api.mute(target_user_id=904318848622510080)

 

ユーザーをミュートを解除する

 

# Tweepy経由でユーザーのミュートを解除する
api.unmute(target_user_id=904318848622510080)


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました