質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Twitter

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

Python

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

Q&A

1回答

1329閲覧

Twitter APIで指定ユーザーのフォロワーをフォローしたい2

yuutayaro

総合スコア1

Twitter

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

Python

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

0グッド

0クリップ

投稿2021/07/02 12:24

編集2021/07/03 13:23

指定ユーザーのフォロワーをフォローするプログラムを作成しております。

二度目の同じような質問です。
スパムやフォロー上限の観点からfor文内でのフォロー実行に回数を設けたいのですがエラーが発生して動きません。

わかる方ご教授いただければ幸いです。

該当のソースコード

Python

1CONSUMER_KEY = "設定済" 2CONSUMER_SECRET = "設定済" 3ACCESS_TOKEN = "設定済" 4ACCESS_TOKEN_SECRET = "設定済" 5cnt=0 6 7from logging import exception 8from numpy import asmatrix 9import tweepy 10cursor = -1 11while cursor != 0: 12 auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 13 auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 14 api = tweepy.API(auth, wait_on_rate_limit=True) 15 itr = tweepy.Cursor(api.friends_ids, id='@設定済', cursor=cursor).pages() 16 try: 17for friends_ids in itr.next() ,cnt < 100: 18 try: 19 user = api.get_user(friends_ids) 20 user_info = [user.screen_name] 212 api.create_friendship(user_info) 22 print(user_info) 233 cnt = cnt +1 24 except tweepy.error.TweepError as e: 25 print(e.reason) 26 except ConnectionError as e: 27 print(e.reason) 28 cursor = itr.next_cursor

発生している問題・エラーメッセージ

Python

1Twitter error response: status code = 400 2[{'code': 108, 'message': 'Cannot find specified user.'}] 3Twitter error response: status code = 431 4[{'code': 108, 'message': 'Cannot find specified user.'}]

試したこと

・上記ソースを実行した
・指定ユーザーのフォロワーを取得するまでの挙動は確認した。(下記文を無くして実行しました)
1.,cnt < 100
2. api.create_friendship(user_info)
3. cnt = cnt +1

・各エラーコードについて調べ修正したりしました。
Twitter error response: status code = 400
→api keyとaccess tokenが未設定または間違っているかもと調べたサイトにて記載があったため
apiとaccess tokenをdevelopサイトにて再発行、そしてソースコードに代入

記載元
http://westplain.sakuraweb.com/translate/twitter/API-Overview/Error-Codes-and-Responses.cgi

[{'code': 108, 'message': 'Cannot find specified user.'}]
→この原因がわかっていない。
ソースコード番号2の部分で()内に入れているuser_infoが間違っていると推察はしているが書き方がわからない

Twitter error response: status code = 431
→これもわかっていない
リクエストヘッダーが大きすぎるのが原因と記載がありましたがイメージが掴めていない

記載元
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/431

イメージ説明

使用言語:Python
使用API :Twitter API
使用ソフト:VScode

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

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

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

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

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

guest

回答1

0

https://docs.tweepy.org/en/v3.10.0/api.html#API.create_friendship

API.create_friendship(id/screen_name/user_id[, follow])
Parameters: id – Specifies the ID or screen name of the user.

create_friendshipの第1引数(id)は、ユーザのIDでもscreen_nameでもよいので、

python

1 for friends_id in itr.next(): 2 try: 3 api.create_friendship(friends_id) 4()

でいいのでは。

少なくとも"idのリスト"は渡せないことになってます。
渡してみると質問の通りのエラーになりますね。

投稿2021/07/03 06:38

quickquip

総合スコア11038

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

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

yuutayaro

2021/07/03 06:49

度々ご回答ありがとうございます。リスト形式では渡せないのですね。 イメージではリストで渡せば itr next()で順々にフォローしていくと思っています。 認識はあっていますでしょうか? また400エラー、431エラーももしよければご教授お願い致します。
quickquip

2021/07/03 06:52 編集

itr.next() で返ってくるのが要素がintのリスト。 回答のソースでfriends_idに入ってくるのがint。 create_friendshipに渡せるのはintかstr。リストは渡せません。
yuutayaro

2021/07/03 07:10

説明ありがとうございます。こちらでもnextの使い方を調べて恐らく理解出来ました。
yuutayaro

2021/07/03 07:47

400、431エラーの経験、推察などもしあれば宜しくお願い致します。 400はAPI keyなどの変数設定ミスかもと調べてあったので試して 431については検討もついていない状態です。
quickquip

2021/07/03 08:35

431は確かに"ヘッダが大きすぎる"ですね。再現性がないと調べられなさそうです。
yuutayaro

2021/07/03 08:51

下記URLにて431エラーの解決方法が記載されておりました。 https://www.shinentai.com/http-error-431-chrome/ キャッシュやcookieクリアで直るとのことで試したのですが直りませんでした。 そもそもvscodeでコーディングしたりキャッシュの情報みたいなものがヘッダーに入るというのがよくわかっておりません。 twitter developやtwitter個人のキャッシュなどは存在するのでしょうか?
quickquip

2021/07/03 10:07

再現性がある……? コードとTraceback全体があるといいかもしれません。
yuutayaro

2021/07/03 13:24

コードは当質問の記載が全量となります。 trcebackについて更新しました。このような記載からエラーが追えたりするのでしょうか?
quickquip

2021/07/03 15:37 編集

質問のコードは期待通りに動かないと断言できますよ。 上であるといいと書いたのは「再現できるパラメータが書かれていて他の人が実行できるコード」です。
quickquip

2021/07/03 15:37 編集

それはそれとして、渡してはいけないパラメータを渡した時にこんなエラーになるんです、これはなぜでしょうか、と聞いているわけですから、完全に時間の無駄でしょう。
quickquip

2021/07/03 15:38

Tracebackはtweepyがエラーを隠蔽してraiseし直しているので、確かにこれでは分からないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問