Twitterを前回読んだところからの更新分だけ読めるようにする。


#解決したい課題
プロトアウトスタジオで一緒にがんばっているメンバーがTwitterに頻繁に投稿しています。
そこに以下の課題があります。
　1.フォロー人数が多いのでメンバーのツイートを見逃してしまうことがある。
　2.Twitterが人気のあるツイート順に並べるので読んでいて意味不明な時がある。
　3.数日読めなかった時に、前回どこまで読んだか探す時間がもったいない。

1.と2.はTwitter公式のリスト機能や表示順の設定変更でなんとかなるので、3.を解決します。

#解決方法
Twitterのリストが更新されたことをZapierが検知して、WebhookでGoogle Apps Script（GAS）に飛ばして、スプレッドシートに記入させます。
ツイートのURLも引っ張ってきているので、画像・映像を見たい場合にはリンクから飛べます。

運用方法は、スプレッドシートでツイートを読んで、読み終わった内容を消します。
これで次回は、今回読み終わった部分からの続きだけが読めます。

![0530-zapier-1523.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/8fc3bea8-3c50-7cd0-7554-9e32afc77ebd.png)



#手順
 1.Twitterでメンバーのリストを作る
 2.Zapierの「Tweet in List」イベントをトリガーにする。

![0530-zapier-1455.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/f45a3da9-10e5-875b-3741-34a6e446f63e.png)

 3.Zapierの「Webhooks by Zapier」をアクションにする。

![0530-zapier-1457.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/d9ec1a25-f5a4-6488-e76a-6fcbd08656c1.png)

 4.Webhookの内容を設定する。

![0530-zapier-1507.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/3042136e-bce8-e8a1-138c-5cbbccd03619.png)

 5.Google Apps Script（GAS）で受信とスプレッドシート書き込みを設定する。
   今回参考にしたコードがスプレッドシートの1列に書き込むものだったので、4列それぞれに値を入れられるように改修しました。

```sample.gs
function doPost(e) {
  writeLogToSheet(e.parameter.createdat, e.parameter.username, e.parameter.text, e.parameter.url);
}
```

```sample.gs
function writeLogToSheet(createdat = 'createdat', username = 'username', text = 'text', url = 'url') {
      // 2列目に投稿された日付時刻を記録
      sheet.getRange(currentRow, 2).setValue( createdat );
}
```



#コード全文

<details><summary>コード全文はこちら</summary><div>

```sample.gs
// GETリクエスト
function doGet(e) {
  // textというキーに値があればそれをスプレッドシートに書き込みます（URLパラメータ）
  writeLogToSheet(e.parameter.createdat, e.parameter.username, e.parameter.text, e.parameter.url);
  // データ内容を返します
  const data = { text: `GETリクエストだよ` };
  return ContentService.createTextOutput(JSON.stringify(data));
}

// POSTリクエスト
function doPost(e) {
  // textというキーに値があればそれをスプレッドシートに書き込みます（FormData）
  writeLogToSheet(e.parameter.createdat, e.parameter.username, e.parameter.text, e.parameter.url);
  // データ内容を返します
  const data = { text: `POSTリクエストだよ` };
  return ContentService.createTextOutput(JSON.stringify(data));
}

// シートにログを書き込む関数（直接動作せず、doGetとdoPost内からそれぞれ使われます）
function writeLogToSheet(createdat = 'createdat', username = 'username', text = 'text', url = 'url') {
  // シート取得
  const sheet = SpreadsheetApp.getActiveSheet();
  // ループを回して1行ずつすでに記録されていないか確認していく
  let currentRow = 1;
  while (true) {
    // 記録されていない行が見つかったとき：
    if (!sheet.getRange(currentRow, 1).getValue()) {
      // 1列目に取得した日付時刻を記録
      sheet.getRange(currentRow, 1).setValue( Utilities.formatDate( (new Date()), 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss') );
      // 2列目に投稿された日付時刻を記録
      sheet.getRange(currentRow, 2).setValue( createdat );
      // 3列目に投稿者名を記録
      sheet.getRange(currentRow, 3).setValue( username );
      // 4列目にメッセージ内容を記録
      sheet.getRange(currentRow, 4).setValue( text );
      // 5列目にツイートのURLを記録
      sheet.getRange(currentRow, 5).setValue( url );
      // ループ中断
      break;
    }
    // 次の行へ
    currentRow++;
  }
}
```

</div></details>



#環境
Zapier
Google Apps Script（GAS）


#おまけ
作ってから知ったのですが、表示順については公式の設定から変更できるようになっていました。
[【2020年2月現在】Twitterのタイムラインの並び順が不自然？その理由と対処法](http://otonano-manabi.work/2018/01/27/twitter%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E4%B8%A6%E3%81%B3%E9%A0%86%E3%81%8C%E4%B8%8D%E8%87%AA%E7%84%B6%EF%BC%9F%E3%81%9D%E3%81%AE%E7%90%86%E7%94%B1%E3%81%A8/)

#惜しいところ
A列がZapierの取得時間、B列がTwitterの書き込み時間です。逆転してますね…
![0530-zapier-1528.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1289676/1791a2c6-dca4-d68b-dbe5-80cffa932aa9.png)

Zapierの仕様かTwitterの仕様かわかりませんが、ツイートした時刻は取得してソートするのが必須ですね。
今回作成したものではB列をクリックして時系列に並ばせることで一旦回避します。


#ちょっと宣伝

7月までに

「ガジェットレビュー動画をもっと効率的に見れたらなぁ」
「イマイチ動画はサマリして、プロ目線の解説動画だけ見たいなぁ」

を叶えるソフトを作ろうと思っています。
ただ目的がニッチなので、

「最適武器動画をサマリして多数派を知りたい」
「アリーナでレア編成で勝っている人の動画を見つけたい」
「投資・仮想通貨の今後の見通しはどっち派が多いのか知りたい」

などの他の利用用途もありかな、とアンケートを取っています。
拡散力が低くて悩んでおりますので、気になった方、投票＆リツイートのお力添えをお願いします！

https://twitter.com/ShinsukeSutou/status/1398606146135490569


https://twitter.com/ShinsukeSutou/status/1398606775679471620