TwitterAPIを利用して投稿することのできるTwitterのBotを作成しようとしていたところ、以下の様なエラーが発生しましたが、ネットにはあまり有益な情報がなかったので記事を書きました。
発生したエラー:401 Unauthorized Read-only application cannot POST.
エラー内容:読み取り専用のアプリケーションでは投稿することはできません
結論:「読み取り専用」から「読み書き両様」に変更した設定を反映させるためには、keyとtokenを更新・再作成して新しくしたものを使用する必要がある。
原因:更新前のkeyとtokenを使用した場合、設定が反映されない
前提条件:OS -> Windows
Pythonでtweepyというライブラリを使用している
Twitterの開発者(Developer)用アカウントを登録している
投稿などの機能を追加したい場合は、「読み取り専用(Read-only)」でなく「読み書き可(Read-and-Write)」へ設定を変更する必要があります。
Read-onlyからRead-and-Writeへ設定を変更する方法は、以下の外部ブログ記事を参考にしてください(他の記事を参考にしていただいてもかまいません)。
https://classynode.com/2022/08/myfirst_twitterapi/
Read-onlyからRead-and-Writeへ設定を変更しても同様のエラーが表示されたので、何が足りないのか確かめたところ、keyとtokenを更新して、新しく作成したkeyとtokenを使う必要があるということが分かりました。
Twitterの開発者用のページ(Twitter Developer Portal)の自分のアプリの設定画面から"keys and tokens"というkeyとtokenを変更できるページがありますので、そこから各項目で"Regenerate"(再作成)を選択し、新しく作り直したkeyとtokenを利用してプログラムを書き換えましょう。
参考コード
####################################################
import tweepy
#XXXのところへ、新しく更新したkeyとtokenを入力します
API_KEY="XXX"
API_KEY_SECRET="XXX"
BEARER_TOKEN="XXX"
ACCESSS_TOKEN="XXX"
ACCESS_TOKEN_SECRET="XXX"
auth = tweepy.OAuthHandler(API_KEY,API_KEY_SECRET)
auth.set_access_token(ACCESS_TOKEN,ACCESS_TOKEN_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True)
user = api.get_user(screen_name="Twitterアカウント名(@は除く)")
message = "Read-onlyからRead-and-Writeへ設定を変更しました"
api.update_status(message)
####################################################