Sassyブログ

好きなことで暮らしを豊かにするブログ

TweepyでTwitterAPIを利用し始めた時に遭遇しそうなエラーの対処法

始めに

Twitter運用をする際に自動化している方はそこそこいるかと思います。

自分でBotを作らなくても外部のサービスを利用して定期的にツイートを送信していたり。

今さらですがPythonのTweepyというライブラリを使ってTwitter Botを作ってみました!

https://www.tweepy.org/

とりあえずは1日1回ツイートするBotです。

今後育てていく予定です。

私が作成したTwitterBotはHerokuというPaasを提供しているサービス上で動かしています。

jp.heroku.com

今回はTwitterBotを作成したときに合わせてTwitter APIの申請も行ったのですが、いざ実行したときに発生したエラーについて解決方法を共有していきたいと思います。

前提

Twitterデベロッパーサイトにてアカウント申請が完了済で特別設定等を行っていない場合

453 - You currently have Essential access which includes access to Twitter API v2 endpoints only.・・・省略

デベロッパーアカウント作成後にクレデンシャル情報を取得してBotに設定した後、プログラムを実行した時に以下のエラーが発生しました。

453 - You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve

これはTwitter API v1 と v2の両方を利用する際にはアカウントが「Elevated」となっている必要があります。

おそらくTweepyの実装がv1とv2のAPIが混在しているのではないでしょうか。

このままだとTweepyが使えないので、Elevated accessに申し込みます。

まずは以下のデベロッパーサイトへログインしてください。

developer.twitter.com

f:id:y_saiki:20220221185554p:plain

表示されたページ内にある「Apply for Elevated」をクリックしましょう。

その後に表示されるページにていくつかの質問に英語で答えていく必要があります。

1. In English, please describe how you plan to use Twitter data and/or APIs. The more detailed the response, the easier it is to review and approve.

翻訳してみます。

TwitterのデータやAPIの使用方法を英語で説明してください。 回答が詳細であるほど、レビューと承認が容易になります。

Twitter上のデータやAPIの利用方法について説明してくださいと述べています。

こちらを私は以下のように解答しました。

【英文】
For the Twitter API, we primarily use the Tweet feature to regularly post the content of our most popular blogs.
We will use the Twitter data to analyze popular tweets in our account, but we do not intend to display it externally.

【翻訳】
Twitter APIについては、主にツイート機能を使用し自身の最も人気のあったブログのコンテンツを定期的に投稿します。
Twitterのデータについては、自分のアカウントで人気のあるツイートの分析に使用しますが、外部に表示するつもりはありません。

2. Please describe how you will analyze Twitter data including any analysis of Tweets or Twitter users.

翻訳してみます。

ツイートやTwitterユーザーの分析を含め、Twitterデータを分析する方法を説明してください。

Twitterデータの分析方法の説明を求めています。

私は以下のように回答しました。

【英文】
I want to understand what kind of people are accepting popular tweets from my own tweets, and analyze to decide what kind of tweets should be made.

【翻訳】
自分のツイートから人気のあったツイートがどのような人から受け入れられているのかを把握し、どのようなツイートをしていくべきかの判断を行うための分析をしたい。

2. Will your app use Tweet, Retweet, like, follow, or Direct Message functionality?

翻訳してみます。

アプリはツイート、リツイート、いいね、フォロー、ダイレクトメッセージ機能を使用しますか?

Twitterの機能についての利用方法を説明してくださいと述べています。

私は現状ツイートのみを使いたかったので以下のように解答しました。

【英文】
As of now, we don't expect to use the Tweet, Retweet, Like, Follow, or Direct Message features. Basically, I plan to use only the tweet function.

【翻訳】
今のところツイート、リツイート、いいね、フォロー、またはダイレクトメッセージ機能を利用する想定はありません。基本的にはツイート機能のみ利用する予定です。

3. Do you plan to display Tweets or aggregate data about Twitter content outside of Twitter?

こちらについては私としては不要だったので「No」としました。

4. Will your product, service or analysis make Twitter content or derived information available to a government entity?

こちらについても上記同様不要だったので「No」としました。

これで申請したところすぐに承諾されたので再度実行しました。

実行結果は失敗でしましたが、元々発生していたエラーメッセージは表示されなくなりました。

tweepy.errors.Unauthorized: 401 Unauthorized

次に発生したエラーメッセージです。

tweepy.errors.Unauthorized: 401 Unauthorized

認証されていないようです。

調べたところ、権限周りの問題のようです。

権限を確認してみたら、案の定「Read」のみとなっていました。

以下、設定後のスクショですが画像の通りになっていれば疎通がうまくいくと思います。

まずはアプリの設定画面へ移動します。

行き方はダッシュボードから登録済みのアプリの右側にある歯車アイコンをクリックします。

その中に「User authentication settings」という項目があるので、そちらの「Edit」ボタンをクリックします。

f:id:y_saiki:20220221191300p:plain

編集画面の下の方にいくと以下の画像のような項目があるのでOAuth 1.0の方にチェックを付けます。

f:id:y_saiki:20220221191302p:plain

チェックを付けた後、以下の画像の項目が表示されるので App permissionsRead and write のみチェックを付けます。

f:id:y_saiki:20220221191305p:plain

さらに下へ移動するとCallback URIWebsiteURLが必須項目となっているのでHerokuで吐き出されたURLを設定しておきます。

f:id:y_saiki:20220221191826p:plain

これで保存してください。

保存後は、クレデンシャル情報を再生成する必要があります。

クレデンシャル情報再生成後に設定して実行したら上手くいきました!

最後に

少し申請周りで時間を取りましたが、2~3時間ほどで出来ました!

Heroku + Tweepy でのTwitterBotは簡単に作れて便利ですね。

Pythonを勉強する必要がありますが、自分でいじれた方が外部サービスでは上手くできない細かいことができるようになるので是非TwitterBotを作ってみてはいかがでしょうか?