【Python】Twitter APIでフォロワー一覧を取得してみる
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を使ってもいいかも。
Discussion