🦔

【Python】Twitter APIでフォロワー一覧を取得してみる

2021/05/02に公開

Twitter APIの使い方を学ぶ目的で、自分のアカウント(別アカウントでも公開垢なら可能)からフォロワー一覧を取得するコードを作成してみました。

なお、公開アカウントでのみ試しています。
あと、Twitter APIのアクセストークン情報を取得するまでの手続きについては、割愛しています。

今回は、Bearerトークンで用いた方法で実施してみたいと思います。
BearerはOAuth 2.0で規定されているものです。
Twitter APIではOAuth 1.0も利用可能ですが、後者のほうがアクセス可能な範囲が広いようです。

詳しくは公式サイトをご覧下さい。

Bearerについては、以下のサイトが参考になるかも。

コード

Bearerトークンは取得済みという前提ですが、
HTTPリクエストヘッダーにトークンを付け、HTTPリクエストを飛ばす例です。
レスポンスにはJSONが返されます。

注意点として、リクエスト回数に制限があります(※詳細はこちら)。

今回、HTTPリクエスト用のライブラリとしてRequestsを使用します。

GETリクエストはこんな感じで飛ばします。
戻り値にはResponseオブジェクトが戻されます。

res = requests.get(url, params=payload, headers=headers)

今回使用するAPIのURLは下の通りです(詳細な仕様はGET /2/users/:id/followersを参照)

url = 'https://api.twitter.com/2/users/[id]/followers'

payloadはURLパラメータの指定で、max_results=100は1回のリクエストあたり100件を返すという指示になります。
最大1000まで指定可能のようです。

payload = {'max_results': '100'}

ヘッダにBearerトークンを仕込みます。

headers = {'Authorization': 'Bearer ...'}

うまくいけば、ステータスコード200でレスポンスが返ります。
で、Responseオブジェクトの.json()メソッドを使えば、テキストをパースしてListかdict型にして返してくれます。

json_res = res.json()

importは端折っていますが、フォロワー一覧を取得してfollowersリストに入れるコードの全体は、以下の通りです。

followers = []
while True:
    res = requests.get(url, params=payload, headers=headers)
    json_res = res.json()
    followers += json_res['data']

    if ('next_token' in json_res['meta']):
        payload['pagination_token'] = json_res['meta']['next_token']
    else:
        break

ユーザー一覧はdata配下に羅列され、ID、表示名、アカウント名の3つの情報があります。
meta配下には、data配下の件数と、次の一覧がある場合にはアクセス用トークンが記載されます。

next_tokenがある場合、次のHTTPリクエストヘッダにpagination_tokenとその値を追加してやり、再度リクエストします。
上の例では、next_tokenがなくなるまでループしていますね。

とりあえず、これでフォロワー一覧は取得可能です。

補足

・Pythonプログラムがあるディレクトリをカレントディレクトリにして実行したい場合、以下のようにします。
__file__はPythonプログラムの絶対パスを返します。

os.chdir(os.path.dirname(__file__))

・作っている最中に何度もリクエストをすることになりますが、レスポンス結果をファイルに落としてやるとかすると、アクセス制限を食らって無駄に時間を消費することもなくなります。
pickleを使ってもいいかも。

参考サイト

Requests

Discussion