Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【コピペでできるpython】twitter apiを使ってフォロワーのtwitter idを取得してみよう!

twitter api get follower twitter id

万物は流転する。令和のヘラクレイトスことゆきとです。

 

今日はtwitter apiを使ってフォロワーのtwitter idを取得していきます。

*前回の記事の続きです。まだみてない方は前回の記事をみてください!と言いたいところではありますが、今回の記事だけをみても理解できるように書いていますので、前回の記事はみなくても大丈夫です笑 

 

貼るだけ貼っておきます。

www.yukiyukiponsu.work

twitterから情報を取得する方法は2パターン (Beartokenを使うパターン, access tokenを使うパターン)があるのですが、後にいいねやリツートなどもしたいので今回はaccess tokenを使う方法でAPIを使用し、twitterから情報を取得します。

twitterから情報の取得だけをしたい場合、Beartokenを使うパターンでもOKです。

 

詳しい2つの違いなどは下記のドキュメントを参照してください(英語なのは許してください...)

OAuth with the Twitter API | Docs | Twitter Developer

 

それでは作っていきましょう!

前提条件

  • すでにtwitterAPIキーを取得している
  • pythonを触ったことがある
  • やる気がある

もしまだtwitterAPIキーを取得されてない方はこちらのサイトを参考にAPIキーを取得してください。(めちゃくちゃわかりやすくまとめてくれてます)

qiita.com

開発環境

実行結果

実行結果
このような形でフォロワーのtwitter idを取得できます!

今回のソースコードではフォロワーが7万5千人以下の方であれば、一度でフォロワー全てのtwitter idを取得できます。

ソースコード

pprintとjsonは最初から入っていますが、requests_oauthlibはライブラリをインストールする必要があるので、インストールしてください。

ライブラリのインストールpip install requests_oauthlib

以下のソースコードはコピペでOKです!!(一部変えるところがあるので、ちゃんと最後まで読んでくださいね!)

ファイル名 : twitter_get_follower_twitter_id.py

#OAuth認証をするためのライブラリ
from requests_oauthlib import OAuth1Session 
#APIからの返り値を整形して受け取るためのライブラリ https://docs.python.org/ja/3/library/pprint.html
import pprint
#json形式を扱うためのライブラリ
import json

#OAuth認証
try:
    twitter = OAuth1Session("consumer_key", "consumer_secret", "access_token", "access_secret")
    #例) twitter = OAuth1Session("E7OL..", "iJmUt4WU..", "10869..", "VSaWjM..")
except:
    print("twitter認証エラー")

### 自身のツイート内容からtwitter idとフォロワー数を取得 ###

#指定したツイートIDの情報を取得するためのurl
get_tweet_info_url = "https://api.twitter.com/1.1/statuses/show.json?id=1110088233587662848"
#実際にAPIを投げて返り値を受け取る
req_tweet = twitter.get(get_tweet_info_url)

#返り値が正常に帰ってきていない場合、エラーを出す
if req_tweet.status_code != 200:
    print("指定したツイートの情報を取得できませんでした")

#jsonでは処理がしにくいので、jsonを辞書形式に変換
req_tweet_json = json.loads(req_tweet.text)

#通常のprint文だと出力がすごくみづらいので、pprintを使ってみやすくしている
# pprint.pprint(req_tweet_json, width=40)

print("ツイートしたユーザのtwitter id : ", req_tweet_json['user']['id_str'])
print("ツイートしたユーザ名 : ",           req_tweet_json['user']['name'])
print("ツイートしたユーザのフォロワー数 : ", req_tweet_json['user']['followers_count'])

##### 前回の記事からの追加分 #####

#前回ブログで取得したツイートしたユーザのtwitter_idを変数に格納
twitter_user_id = req_tweet_json['user']['id_str']

#フォロワーのtwitter idを入れる配列の初期化
follower_list = []

#ツイートしたユーザのtwitter_idを指定して、そのユーザのフォロワーのtwitter idを取得するためのurl
twitter_get_followers_id_url = "https://api.twitter.com/1.1/followers/ids.json?id=" + twitter_user_id
#実際にAPIを投げて返り値を受け取る
req_tweet = twitter.get(twitter_get_followers_id_url)

#返り値が正常に帰ってきていない場合、エラーを出す
if req_tweet.status_code != 200:
    print("このアカウントのフォロワーを取得できませんでした")

#jsonでは処理がしにくいので、jsonを辞書形式に変換
req_tweet_json = json.loads(req_tweet.text)

#通常のprint文だと出力がすごくみづらいので、pprintを使ってみやすくしている
# pprint.pprint(req_tweet_json, width=40)

#取得したフォロワーのtwitter idを初期化していた配列に格納
follower_list.extend(req_tweet_json['ids'])
#取得したフォロワーのtwitter idを表示
# print(follower_list)
print("取得したフォロワー数 0〜5000 : ", len(follower_list))

#上記のAPIでは一回で5000人のフォロワーのtwitter idしか取得できないので、それ以上フォロワーがいる人の場合下記を追記
# 5001人目のフォロワーのtwitter idをnext_cursorで取得
# print("ネクストカーソル : ", req_tweet_json['next_cursor'])

#何度繰り返し実行したかを記録
count = 1
#5000人単位で区切りがくるので、5000という数字を定義しておく
api_max_get_followers_id_onetime = 5000

#次に控えているフォロワーのtwitter idがなくなるまでフォロワーのtwitter idを取得する
#ただしAPIに制限があるのでそこには要注意!!(15分で15回 = 1回の実行で得られるフォロワーのtwitter idはmax 75000人)
#75000人以上を取得したい場合は、time.sleep(900)を挟んでAPIを再度実行するようなコードを実装してみてください(今回はわかりやすくするためにコードは割愛しますが、要望があれば公開しますね)
while req_tweet_json['next_cursor'] != 0:
    twitter_get_follower_id_api_url = "https://api.twitter.com/1.1/followers/ids.json?id=" + twitter_user_id + "&cursor=" + req_tweet_json['next_cursor_str']
    
    req_tweet = twitter.get(twitter_get_follower_id_api_url)

    if req_tweet.status_code != 200:
        print("このアカウントのフォロワーを取得できませんでした")

    req_tweet_json = json.loads(req_tweet.text)
    follower_list.extend(req_tweet_json['ids'])
    # print("ネクストカーソル : ", req_tweet_json['next_cursor'])
    print("フォロワー数 %d 〜 %d : %d" % (count*api_max_get_followers_id_onetime, (count+1)*api_max_get_followers_id_onetime, len(req_tweet_json['ids']) + count*api_max_get_followers_id_onetime))
    count += 1

print("follower idリスト : ", follower_list)
print("合計フォロワー数 : ", len(follower_list))

このコードのAPIキーの部分(OAuth1..)を自分が取得したものに変えていただいて、コードを実行してください。

pythonの実行python twitter_get_follower_twitter_id.py

これで実行ができるはずなので、最初に示した実行結果と同じ結果になるかを確認してください。

 

無事表示されれば終了です!お疲れ様でした!

どうでしたか?少しでも参考になれば幸いです。

 

それではまた後日!!

参考

今回使用したtwitter apiのドキュメント

自分のtwitter id・名前・フォロワー数の取得 : GET users/show | Docs | Twitter Developer

フォロワーtwitter idの取得 : GET followers/ids | Docs | Twitter Developer