Twitter（現：X）のbotを作成する。（2024年8月 Twitter API v2対応版）

## 0. 始めに
Twitterのbotを作成しようとした際に、古いAPIの情報の記事などが混ざっており、いろいろ詰まってしまったため備忘録として記載します。（投稿内容は2024/08時点です。）  
なお本記事では、Google ColabからAPI経由でツイートをポストする部分までです。投稿のスケジューリングなどは、また別記事で書きます。。

## 1. Twitter APIの申請
まずはTwitterAPIの申請を行います。以下の方の記事でとても分かりやすくまとめていただいているので、その通りに進めていけば大丈夫です。  
<https://qiita.com/neru-dev/items/857cc27fd69411496388>

何となくですが、
>これらの投稿は、テキスト、画像、そして関連するブログのURLを含むもので、Xの規約に従うことを心がけており、私のフォロワーにとって価値ある情報を提供することを目指しています。

このフレーズを申請理由に入れておけばスムーズに許可されるんじゃないかと思っています。**規約遵守は大事！**

## 2. Twitter APIの設定
申請した時点では、Tweetの書き込み権限がないので設定を変更します。  
デフォルトでアプリが作成されているので、歯車マークをクリックし、設定画面へ移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/f082c1d3-b1c1-1a6a-0eb8-134d3056da0e.png)

設定画面ページの下部に権限の設定があるので移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/6dd06cff-013c-af37-7e0f-834c2fa43578.png)

ここから権限周りの設定をしていきます。
今回はツイートをポストしたいので、`Read and write`にチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/31a89b28-1edb-00f1-9c64-ccdd0c399569.png)

アプリのタイプは`Web App, Automated App or Bot`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/82959542-50d8-cad3-09c2-f578e099b517.png)

App infoの部分では必須となっている２箇所に記入します。  
`Callback URI`の部分はOauth 2.0がリダイレクトを許可する部分らしいですが、botを作るだけなら何でも良いと思うので`https://x.com`としています。Nativeアプリを作るなら考慮が必要‥？  
（参考： <https://qiita.com/TakahikoKawasaki/items/8567c80528da43c7e844> ）  

Website URLは自分のwebサイトのURLにしています。特になければ、自分のTwitterのホームへのURLにすればいいんじゃないかと思います。  

その他の部分の記載は任意なので、今回は空欄にしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/a3482f30-e76c-058b-69d9-a51ee988be99.png)

あとはちゃんと`Save`ボタンを押して終了です。  
`Client ID`と`Client Secret`が表示されますが、今回は不要なので、`Done`ボタンを押して閉じます。（今後必要になった際は、再度取得できるので大丈夫です。）

## 3. Google Colabで投稿
google colabで新規ノートブックを作成します。  
<https://colab.research.google.com/?hl=ja>  

### 3.1 シークレット情報の取得 & 登録
Twitter APIのDeveloper Potalに戻り、鍵マークをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/57d22e28-82c4-6b85-8aec-3501679dfca3.png)

欲しいシークレット情報の`Regenerate`ボタンを押すと、取得することができます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/aedcb2c2-da42-ba53-0351-89a24a72ca68.png)

今回必要となるのは、`API_KEY`, `API_KEY_SECRET`, `ACCESS_TOKEN`, `ACCESS_TOKEN_SECRET`, `BEARER_TOKEN`の5つです。

取得したシークレットは、随時Colabの方に登録していきます。

google colabでは、シークレット情報を管理する機能がついています。（プログラムにベタ書きはよろしくないので使います）  
ノートブックの左側の鍵マークを押すことで、シークレットを登録することができます。値の部分に、先ほど取得したシークレット情報を入れ、ノートブックからのアクセスもONにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1294172/e9f5b844-51b0-6511-70e8-90139891820f.png)

## 3.2 Pythonで投稿
colabに以下のプログラムを書きます。  
```Python
from google.colab import userdata
import tweepy

# 登録した認証情報を取得。
ck = userdata.get('API_kEY')
cs = userdata.get('API_KEY_SECRET')
bt = userdata.get('BEARER_TOKEN')
at = userdata.get('ACCESS_TOKEN')
ats = userdata.get('ACCESS_TOKEN_SECRET')

# クライアントにシークレット情報を埋め込む。
client = tweepy.Client(consumer_key=ck, 
                       consumer_secret=cs, 
                       bearer_token=bt, 
                       access_token=at, 
                       access_token_secret=ats)

# 投稿するテキストを指定。
tweet = "test tweet"

# 投稿
client.create_tweet(text=tweet)
```

これを実行すると、`test tweet`という文章が投稿されます。  
自分のTwitterアカウントを見に行って確認して、完了です。

## 4. 終わりに
Pythonを使ってTwitter API経由で投稿することができました。  
次回はこのコードをクラウドに上げて、定期実行できるようにする予定です。