Googleスプレッドシートを利用したX(Twitter)の予約投稿自動化


## TL;DR
- X(Twitter)でネタをあらかじめ用意しておき、予約投稿したい
- 予約投稿のツールを調べたが、有料のものが多くしっくりこなかった
- Googleスプレッドシートでネタを管理してMakeで自動投稿するツールを自作した

## できること

### 投稿テキストの準備
投稿テキストはあらかじめ、Googleスプレッドシートにリストアップしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/f1255109-64e2-a3c8-20db-1c08b665da6a.png)

列Aは連番、列Bが実際の投稿テキストです。

### Makeの起動
Makeのシナリオを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/340909c4-1505-557c-b784-f69b136664d8.png)


### 投稿結果の確認
無事１番のテキストが投稿されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/4fbe1e92-3e2d-5e79-e468-0419c479b87e.png)

### 投稿番号の管理
投稿する番号を管理するために、こんなシートを用意しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/713e9d55-ea1b-2e36-2b8d-65c20691e199.png)

Makeのシナリオは時間起動で定期的に実行され、その度に「次の投稿番号」が１ずつ加算されていきます。
「この番号に来たら最初に戻る」の投稿番号に来たら、１番の投稿番号に戻ります。
これで半永久的に投稿を自動化することができます！

## 作り方
### 全体像
Makeのシナリオの全体像はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/0ca7dc70-7654-1173-1070-92aa35a317a6.png)

### 投稿テキストの取得

最初のステップはGoogle SheetsのGet a Cellを使用して、「次の投稿番号」を取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/c044ad64-a3fe-35da-2cba-987b585ff1fe.png)

スプレッドシートのセルC3を取得しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/d4353f7c-2675-e38b-aa84-5263bdbf95b5.png)

投稿リストシートから対応する番号の投稿テキストを取得します。これもGoogle SheetsのGet a Cellを使用。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/7625e3cf-126b-d21b-7bcc-52681003c4df.png)

スプレッドシートの列Bから投稿テキストを取得しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/c6e11acd-691e-6e06-28e1-f79fe00ce144.png)

### 投稿
XのTwitter APIを使用して、テキストを投稿します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/c254616d-a86a-abec-0d3a-6d7066f26aaf.png)


このステップについては、以前作成したこちらの記事を参考にしてください。

https://qiita.com/GRA/items/7935750f9e2da1167a62

### ログの記録
Google SheetsのAdd a Rowを使用して、投稿ログをログシートに記録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/4fc38664-d36f-ddaa-b40f-cbdfef909f94.png)

ValueはPostIDとタイムスタンプだけマッピングしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/93b8def7-d19d-17a2-1f86-795ec985408f.png)

こんな感じでログが記録されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/a5dbf1c1-479d-7f92-453c-b4542887fd9b.png)

将来的には、インプレッションなどの分析値も記録できると良いなと思いました。
しかし、アナリティクスデータ自動取得機能のご利用には、Twitter APIの有料プランに加入する必要があるそうです・・・

https://note.com/gas_lab/n/n2e0473b6a887

### 次の投稿番号の更新
まずは、「この番号に来たら最初に戻る」を取得。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/0b8769e1-d524-dba3-dd82-b1a28dfbc991.png)

このスプレッドシートのセルC4ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/938ea229-9b8f-f9f7-b5f7-79dfdee1f75c.png)

この後はRouterを使って分岐してます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/b2732e1f-e67b-377e-39d5-70bff7d02c79.png)

「この番号に来たら最初に戻る」＝＜「次の投稿番号」
の場合、「次の投稿番号」はリセットする必要があるので、１に更新。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/144b3e8b-fdcf-ce28-22ac-507eae74a333.png)

それ以外の場合は、「次の投稿番号」は１を加算。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/01821e1d-b1f2-b4e2-dde1-226564dff903.png)

parseNumberを使用して、Text形式の値を数値形式に変換する必要があることに注意してください。



## 感想
- Webアプリ化もやってみたい。
- Twitterアナリティクスのデータも取れるようにしたい。