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

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

ただいまの
回答率

87.35%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 265

score 1

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

使用言語:Python
使用API :Twitter API

下記の手順をプログラムに落とし込み開発したいと思っております。

1.OAuth認証を行いログイン
2.指定ユーザーのフォロワー取得
3.フォロー実行

プログラム実行時にエラーが発生しております。
質問の仕方など至らぬ点あるかと思いますが、回答頂ければと思います。

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

 File "d:\ダウンロード\python\フォロワー欄フォロー取得\test.py", line 16, in <module>
    follower_ids = pd.Series(api.followers_ids())
  File "C:\python\lib\site-packages\tweepy\binder.py", line 253, in _call
    return method.execute()
  File "C:\python\lib\site-packages\tweepy\binder.py", line 234, in execute
    raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 215, 'message': 'Bad Authentication data.'}]

該当のソースコード

import tweepy
import pandas as pd
from tweepy import api

def get_twitter_api():
   API_key = "設定済"
   API_secret = "設定済"
   Access_token ="設定済"
   Access_secret = "設定済"
   screen_name = "設定済"
   auth = tweepy.OAuthHandler(API_key, API_secret)
   auth.set_access_token(Access_token, Access_secret)
   api = tweepy.API(auth, wait_on_rate_limit = True)
   return api,screen_name

follower_ids = pd.Series(api.followers_ids())

follower_dic = {}
for index,follower_ids in enumerate(follower_ids):
   print(index)
   try:
       user = api.get_user(id = follower_ids)
   except tweepy.error.TweepError as e:
       print(e)
   follower_dic[user.screen_name] = user.description
df = pd.DataFrame(follower_dic.values(),index = follower_dic.keys()).reset_index()
df.columns= ["screen_name","profile"]

def follows(api,follower_ids):
    target = api.get_user(id = follower_ids)
    followCount = 0

    if target.protected == False and followCount<100 :
        try:
            api.create_friendship(follower_ids)
            followCount = followCount+1
            print("follow" + str(follower_ids))
        except:
            print("Follow error" + str(follower_ids))

試したこと

API KEYとaccess tokenの再発行で解決したと記載があったので
再発行をしましたが解決にはいたりませんでした。

参考
https://teratail.com/questions/236548

補足情報(FW/ツールのバージョンなど)

Python 3.9.5

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • quickquip

    2021/07/02 15:08

    このコードだと
    follower_ids = pd.Series(api.followers_ids())
    の行でapiがNameErrorを起こすはずです。
    ですから、「実行されているコードをちゃんと書いてない」か、「"実行されている"コードと、"実行していると思っている"コードが食い違っている」可能性があります。

    前者であれば動くコードを質問に書いてください。

    キャンセル

  • quickquip

    2021/07/02 15:09 編集

    Jupyterあたりを使っているなら「実行したあと消した」コードがあった可能性もあります。(↑のバリエーションですが)

    キャンセル

  • yuutayaro

    2021/07/02 18:14

    回答ありがとうございます。コードの食い違いは起きておりません。またVScodeというエディタを使用しております。
    動くコードを記載とのことですが現在投稿している問題で止まっているため
    記載することができません。

    tweepy.error.TweepError: [{'code': 215, 'message': 'Bad Authentication data.'}]

    上記エラーコードについて何か知っていましたら解決方法を教えて頂けますでしょうか。

    お手数をおかけしますが宜しくお願い致します。

    キャンセル

  • quickquip

    2021/07/02 18:20

    失礼しました。from tweepy import api してますね。

    キャンセル

回答 1

checkベストアンサー

+1

https://github.com/tweepy/tweepy/blob/v3.10.0/tweepy/init.py#L21

# Global, unauthenticated instance of API
api = API()


というようにtweepy.apiは「tweepy.APIの、グローバルな認証されていないインスタンス」として定義されているので、それを使って呼び出したら認証されていないエラーが出て当たり前です。
(こんなグローバル変数があったなんて知りませんでした。使えないものなので知らなかったことに不思議はないですが)


get_twitter_api関数を作った(わざわざ関数にした)意図が分からないのでなんとも言えないのですが、関数を書いている時点では、

api, screen_name = get_twitter_api()
follower_ids = pd.Series(api.followers_ids())

としようと考えていたのに上の行を書き忘れてしまった、あたりかと推測しました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/07/02 19:26

    回答いただきありがとうございます。とても助かりました。
    初歩的なことかもしれませんが関数を作らずただただ定義でもよかったですよね。
    (参考にしたソースで使っていたのでそのまま使用しました。)

    提示した問題が解決し、更に問題が発生したのですがその場合は投稿を別にするのが
    teratailのルールだったりしますでしょうか?

    キャンセル

  • 2021/07/02 21:08

    後から検索で辿り着いたりした人のこととかを考えると、別質問の方がいいですね。
    回答者側としても、いつでもTeratailを見ているわけではないですし。

    キャンセル

  • 2021/07/02 21:15

    丁寧に回答ありがとうございます。
    とっても感謝しております。

    キャンセル

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

  • ただいまの回答率 87.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る