【備忘録】Twitter API v2を使ってEssential権限でツイートしてみた


## まえがき

2021年11月にTwitter社はAPIの仕様を変更して、初めて開発する方もすぐに利用できるようにしたそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/a8bc4439-2a06-8df1-f34b-aa6b6d75073d.png)

https://blog.twitter.com/developer/ja_jp/topics/community/2021/build-whats-next-with-the-new-twitter-developer-platform

これによって、従来まで参照として使えていたPythonのコードがエラーを発してしまうようになったため、今回はv2を使ってツイートまでやってみました。
他の記事では「Eleatedにしなくてはツイートできなかったので…」のような記載があったのですが、Essentialアカウントでも権限を変更することでツイートすることができましたので、申請のやり方からコードの記載まで備忘録として記載します。

## つまづいた点

以下のエラーが出て半日くらい調べていた。

`AttributeError: 'Client' object has no attribute 'create_tweet'`

→tweepyのバージョンが4.3.0以上でないとClient.create_tweet()が使えなかった。パッケージのバージョンをアップさせたことで解決。

## おおまかな流れ
1.TwitterDeveloperにてAPIを申請
2.Read権限からRead/Write権限に変更
3.Tokenを再度取得
4.コード実行


## 1. TwitterDeveloperにてAPIを申請
以下のサイトから、Twitter APIの申請を行います。

https://developer.twitter.com/jp/apps/

申請方法は下記サイトがとてもわかりやすかったため参考させていただきました。

https://toxublog.com/blog/twitter_api_apply/


## 2. Read権限からRead/Write権限に変更

APIの申請が許可された直後にTokenを発行すると、「Read権限（読み取り権限）」のみ可能なものが発行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/092e4cad-1157-3a1a-95d4-3c41a2df9d86.png)


これだとツイートができません。そのため読み取りも書き込みもどちらも可能な権限（Read/Write権限）が通るように変更しましょう。


①User authentication settingsの「Edit」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/247a69e5-ec37-c792-192f-1cfd09401c11.png)

②下にスクロールすると「App permissions」という項目が出てくるので、「Read and write」に変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/47dbf9de-6fff-2141-9ed9-0674ee2285b8.png)
※「Read and write and Direct message」でも可能ですが、今回は最低限の権限範囲に絞っています

③（設定していなければ）「Callback URI / Redirect URL」を指定

④「Save」をクリック

これで設定が完了です。

## 3. Tokenを再度取得

このまま先ほど作成したTokenを確認すると、まだ「Read権限」のままだとおもいます。
そのため、Tokenを再度取得する必要があります。

以下の画面から、「Regenerate」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/6363133f-1997-158d-433d-446bbd3507ee.png)

そうすると「本当に発行していいですか？」という確認のページが出るので、改めて「Yes, regenerate」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/d70050cb-7d86-c798-4edc-b9671ee46059.png)

これでAccess TokenとSecretKeyが発行され、晴れて権限も「Read and Write」となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414468/f567e169-c349-9a4d-184d-c9d497769859.png)


## 4. コード実行

作成したTokenを使ってツイートのテストコードを作ってみました。

以下のコードで指定したアカウントから「text=〇〇」で指定した文字列をツイートすることが可能です。
それぞれのキーについては先ほど取得した情報を入力してください。

```python:create_tweet
import tweepy

consumer_key = "aaaaaaaaaaaaaaaaaaaa"
consumer_secret = "bbbbbbbbbbbbbbbbbbbb"
access_token = "cccccccccccccccccccc"
access_token_secret = "dddddddddddddddddddd"

client = tweepy.Client(consumer_key, consumer_secret, access_token, access_token_secret)
client.create_tweet2(text="testツイートです")
```

前述したとおり、tweepyのバージョンが4.3.0以上でないと以下のエラーが表示されます。
`AttributeError: 'Client' object has no attribute 'create_tweet'`

この場合、tweepyのバージョンをアップデートすると解決するので、バージョンは必ずチェックしましょう。
`pip install tweepy==4.3.0`

## おわりに
Twitter APIの仕様更新により、APIの利用に対するハードルは非常に下がったと感じました。
申請も一番下の「Essential」であればそのまま使えるような形です。

ただし、デフォルトの権限設定などは仕様変更前から変わっているようなので、過去の記事などを参考にするとうまくいかないことがありました。またパッケージのバージョンによってもうまく挙動しないことがありました。

今回はテストで行ってみましたが、ツイートを定期的に管理する機会があれば、仕様変更による影響や利用するバージョン管理のしくみも構築してみようかと考えています。