🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3988閲覧

PythonでTwitterのフォロワー情報を取得したい(Twitter API)

1995nihong

総合スコア24

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/15 15:30

編集2021/03/15 15:44

下記のサイトを参考に、PythonでTwitterのフォロワー情報を取得したいと思っています。
https://fresopiya.com/2019/04/05/getfollowerinfo/#i-5

フォロワー数の少ないアカウントでは、これでcsvをエクスポートするところまでできるのですが、
フォロワーの多いアカウントだと、実行が長時間に及んだ挙句、エラーが帰ってきてしまいます。

環境は、Jupyter Notebookで動かしています。

何か改善案はありますでしょうか?

ちなみに下記のようなエラーメッセージです。

Failed to send request: ('Connection aborted.', ConnectionResetError(10054, '既存の接続はリモート ホストに強制的に切断されました。', None, 10054, None))

Python

1CONSUMER_KEY = "" 2CONSUMER_SECRET = "" 3ACCESS_TOKEN = "" 4ACCESS_TOKEN_SECRET = "" 5 6import tweepy 7auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 8auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 9api = tweepy.API(auth,wait_on_rate_limit = True) 10 11followerIDs = api.followers_ids("ユーザーID") 12 13followerDatas = [] 14for followerID in followerIDs: 15 followerData = {} 16 data = api.get_user(followerID) 17 followerData["Name"] = data.name 18 followerData["Follow"] = data.friends_count 19 followerData["Follower"] = data.followers_count 20 followerData["Description"] = data.description 21 followerData["TweetCount"] = data.statuses_count 22 followerDatas.append(followerData) 23 24%matplotlib inline 25import pandas as pd 26 27pd.set_option("display.max_rows", 1000) 28df = pd.DataFrame(followerDatas).loc[:,["Name","Follow","Follower","TweetCount","Description"]] 29 30#ファイル出力 31df.to_csv("submit.csv",index=False)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純に、実行が終了するまでプログラムを起動したままにしておける普通のPython実行環境を使いましょう。


https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids

該当のAPIは15分に15回だけしか利用が許されていなく、1回5000件までしか取れません。
30万のフォロワーに対して1時間、300万のフォロワーに対して10時間かかるのはどうしようもありません。

複数のアカウントとアプリを登録して鍵情報を使い分けるといった手段もありえます。
一応、「同一内容を複数アカウントでツイート」のように、Twitterが"しないで"と明に言っている行為には該当してはいないと思います。
しかしながら同一IPからの多重アクセスといった行為にどのような監視をしているのかはわからないので、"リスクなどは自分自身で判断する"必要があると思います。


(追記)
すみません。コードを読み違えました。
api.get_user(followerID)の部分でrate_limitが回復するまで待たされる方が、時間がかかる主な原因でしょうね。ピントがずれた回答になってしまいました。
(rate_limit制限の分待たされるしそれを回避するのは無理、という結論が変わることはありませんが)

さて、5000件を超えるフォロワーの取得ですが

https://docs.tweepy.org/en/v3.5.0/cursor_tutorial.html

で解説されているCursorという機能がtweepyに用意されています。

python

1followerIDs = api.followers_ids("ユーザーID") 2 3followerDatas = [] 4for followerID in followerIDs: 5 ...

の部分を

python

1followerIDs = tweepy.Cursor(api.followers_ids, "ユーザーID") 2 3followerDatas = [] 4for page in followerIDs.pages(): 5 for followerID in page: 6 ...

とすることで可能です。
followers/ids API が rate_limit制限に引っかかると、followerIDs.pages()がウェイトで待たされます。そこは元の回答の通りです。

followers/ids API の rate_limit制限と users/show API の rate_limit制限は別々で、
users/show APIの方が回復が遅いので、followers/ids の実行効率がよくないでしょう。

投稿2021/03/15 16:22

編集2021/03/16 00:53
quickquip

総合スコア11231

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1995nihong

2021/03/16 00:16

1万程度のフォロワーだったのですが、そもそも1度に5000件までしか取得できないのですね(公式ドキュメントをしっかり読み込んでいませんでした。。) 5000件ずつに区切り、複数回かけて取得もできるのでしょうか? 1回目:1~5000人目 2回目:5001~10000人目 のような指定です。 初心者質問で恐縮ですが、ご確認いただけますと幸いです。
1995nihong

2021/03/17 23:12

ご丁寧にありがとうございました。 まだ少し勉強不足なので、ご提示いただいたドキュメントなど読み込んでから試行錯誤してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問