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

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

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

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

Python

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

Q&A

1回答

1193閲覧

TwitterAPIライブラリtweepy更新に伴うエラー

morisia

総合スコア0

Twitter

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

Python

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

0グッド

0クリップ

投稿2022/04/18 04:02

編集2022/04/19 21:45

tweepy更新によるエラー

tweepyのバージョンが更新されたのに伴い、メソッドが新しくなりこれまで使用できていたコードがエラーを吐き使えなくなりました。
コードはツイッターでフォロバされていない人を古い順からリムるというプログラムになります。

訂正点

エラーコードをよく見てみたらこちらのエラーではなく、違うエラーでした。

followers = api.followers_ids

line30はこちらのエラーになります。

print("ID:{}のフォローを解除しました。".format(api.get_user(f).screen_name))

Traceback (most recent call last): line 30, in <module> print("ID:{}のフォローを解除しました。".format(api.get_user(f).screen_name)) line 46, in wrapper return method(*args, **kwargs) TypeError: get_user() takes 1 positional argument but 2 were given

こちらはどのように訂正すればエラー改善可能でしょうか?

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

引用テキスト

followers = api.followers_ids(SCREEN_NAME) AttributeError: 'API' object has no attribute 'followers_ids'

はじめ上記のエラーが表示され

followers = api.followers_ids

というメソッドが新らしいものになっていたため、tweepy公式サイトhttps://docs.tweepy.org/en/stable/api.htmlを参考に上記メソッドを

followers = api.get_follower_ids

こちらのものに変更しましたが、以下のエラーが出てきてしまいます。
tweepyの更新前は問題なく使用できていたのですが、どのようにすれば下記エラーが表示されずにできるでしょうか?

エラーメッセージ

line 46, in wrapper return method(*args, **kwargs) TypeError: get_follower_ids() takes 1 positional argument but 2 were given

該当のソースコード

python

1import tweepy 2 3keys = dict( 4 screen_name = '× × × ', 5 consumer_key = '× × × ', 6 consumer_secret = '× × × ', 7 access_token = '× × × ', 8 access_token_secret = '× × × ', 9) 10 11SCREEN_NAME = keys['screen_name'] 12CONSUMER_KEY = keys['consumer_key'] 13CONSUMER_SECRET = keys['consumer_secret'] 14ACCESS_TOKEN = keys['access_token'] 15ACCESS_TOKEN_SECRET = keys['access_token_secret'] 16 17auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 18auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 19api = tweepy.API(auth) 20 21followers = api.get_follower_ids(SCREEN_NAME) 22friends = api.get_friend_ids(SCREEN_NAME) 23 24cnt = 0 25for f in friends [::-1]: 26 if cnt >= 1: 27 break 28 if f not in followers: 29 cnt += 1 30 print("ID:{}のフォローを解除しました。".format(api.get_user(f).screen_name)) 31 api.destroy_friendship(f)

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

tweepy公式サイトのメソッド
https://docs.tweepy.org/en/stable/api.html

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

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

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

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

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

guest

回答1

0

api.get_follower_ids(SCREEN_NAME)
のように、キーワード引数を省略してしまうと、エラーになります。

api.get_follower_ids(screen_name=SCREEN_NAME)

のように、キーワード引数(screen_name)を明示的に指定する必要があります。

get_user、destroy_friendshipについては
プログラム上、user_idを指定しようとしているので、
user_id=~~という形で明示的に指定する必要があります。

修正後全文

py

1import tweepy 2 3keys = dict( 4 screen_name = '× × × ', 5 consumer_key = '× × × ', 6 consumer_secret = '× × × ', 7 access_token = '× × × ', 8 access_token_secret = '× × × ', 9) 10 11SCREEN_NAME = keys['screen_name'] 12CONSUMER_KEY = keys['consumer_key'] 13CONSUMER_SECRET = keys['consumer_secret'] 14ACCESS_TOKEN = keys['access_token'] 15ACCESS_TOKEN_SECRET = keys['access_token_secret'] 16 17auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 18auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 19api = tweepy.API(auth) 20 21followers = api.get_follower_ids(screen_name=SCREEN_NAME) 22friends = api.get_friend_ids(screen_name=SCREEN_NAME) 23 24cnt = 0 25for f in friends [::-1]: 26 if cnt >= 1: 27 break 28 if f not in followers: 29 cnt += 1 30 print("ID:{}のフォローを解除しました。".format(api.get_user(user_id=f).screen_name)) 31 api.destroy_friendship(user_id=f)

Traceback (most recent call last): line 30, in <module> print("ID:{}のフォローを解除しました。".format(api.get_user(f).screen_name)) line 46, in wrapper return method(*args, **kwargs) TypeError: get_user() takes 1 positional argument but 2 were given

こちらのエラーについては

print("ID:{}のフォローを解除しました。".format(api.get_user(user_id=f).screen_name))

というように、fの前に「user_id=」を追加してください。

投稿2022/04/18 06:09

編集2022/04/19 12:44
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

morisia

2022/04/18 10:17

回答くださりありがとうございます。 SCREEN_NAMEをscreen_nameに変えるということでしょうか?
退会済みユーザー

退会済みユーザー

2022/04/18 10:49

> SCREEN_NAMEをscreen_nameに変えるということでしょうか? いいえ、SCREEN_NAMEの前に「screeen_name=」を追加する必要がある、という意味です。
morisia

2022/04/19 12:10

丁寧にありがとうございます。 すみません、エラー箇所を別のものと勘違いしておりました。 質問文の方に訂正点を記載したので、ご存知でしたらこちらを目にしてもらえると助かります。
退会済みユーザー

退会済みユーザー

2022/04/19 12:45

追記しました。 「f」の前に「user_id=」を追加してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問