はじめに
今回は自動ツイートについての第4回目となります。
今回は、スプレッドシートの内容を上から順番にツイートし終わったら、最初に戻る処理を作ります。
課題を忘れないように毎回冒頭に書いておきますね。
今回の課題
- ツイートするリストを作り、自動的にツイートさせたい。
では、見ていきましょう。
おさらい
IFTTTのWebhookを使いますのであらかじめ準備を終わらせてください。
スプレッドシートの内容を上から順番にツイートするところまで出来ていたら、この章はスキップし、次の章から読み進めて問題ありません。
IFTTTとTwitterを連携し、IFTTTのWebhookにPOSTしたらツイートさせる
ここで紹介する自動ツイートは、IFTTTのWebhookとTwitterを連携させることで実現します。
なので、最初にIFTTTにログインしてWebhookとTwitterの設定を完了してください。
GASからIFTTTのWebhookにPOSTさせたらツイートする
IFTTTのWebhookで指定されるURLにPOSTすることでツイートできるようにGoogle Apps Scriptのコードを書きます。
とても簡単に実現できます。
リスト順にツイート
スプレッドシートにツイートしたい内容を列挙し、上から順番にツイートするところまで作ります。
前回まででツイートできるようになっているので、あとはスプレッドシートのデータを上から順番に取得してWebhookにPOSTするだけです。
リストのツイートが最後まで終わったら
最終行から先頭に戻る
スプレッドシートの最終行までツイートが終わったら、先頭に戻ってまたツイートする仕組みを考えます。
スプレッドシートの最終行は、読み込んだ行のデータが何もなく、空だった場合とします。
これはつまり、スプレッドシートにツイート内容を列挙する場合には、空行を入れてはいけないこととなります。空行を見つけたら、そこが最終行と判断するためです。
空行を見つけたら先頭行に戻ればよいので、スプレッドシートのデータを読み込む関数getMsg()を少し修正すればよいですね。
/*-------------------------------------------------
スプレッドシートの上から順にデータを取得する
※idで指定するスプレッドシートはあらかじめ作成すること。
※最終行(空行)を見つけたら先頭に戻る。
2022/02/09 created by N.Sekiya
---------------------------------------------------*/
function getMsg() {
var id = SPREAD_SHEET;
var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getSheets()[0];
var row = sheet.getRange(1,1).getValue(); // 次に取得するデータ一取得
Logger.log(row);
var msg = sheet.getRange(row, 1).getValue();
if(msg == "") { // 空行の場合は最終行に達したと判断する
row = 2; // 先頭行に戻る
msg = sheet.getRange(row, 1).getValue();
}
sheet.getRange(1, 1).setValue(row+1);
Logger.log(msg);
return msg;
}
スプレッドシートから読み込んだデータmsgの中身が空の場合は、先頭行である2行目に戻って読み直しています。
その後、次に読み込む行をスプレッドシートに書き込んでいます。
全てのコード(最終行から先頭に戻る)
getMsg()関数以外は修正していません。
コード中の下記4点は環境に合わせて修正してください。
- <ここにツイートリストのスプレッドシートのIDを指定します>
- <ログ出力用のスプレッドシートIDを指定します>
- <Event nameを指定>
- <KEYを指定>
それ以外は、コピペでいけます。
const PRJ_NAME = 'AutoTweet'; // logOut用
const SPREAD_SHEET = '<ここにツイートリストのスプレッドシートのIDを指定します>';
const LOG_SHEET = '<ログ出力用のスプレッドシートIDを指定します>';
/*-------------------------------------------------
自動ツイート関数
getMsg()でスプレッドシートからツイート内容を取得し、
tweet()で取得した内容をツイートする。
2022/02/09 created by N.Sekiya
---------------------------------------------------*/
function autoTweet(){
msg = getMsg();
if(msg != ''){
tweet(msg);
}
}
/*-------------------------------------------------
ツイート関数
引数msgの内容をツイートする。
UrlFetchApp.App()に与えるURLはIFTTTのトリガーに設定した
WebhookのURLを指定する。
2022/02/06 created by N.Sekiya
---------------------------------------------------*/
function tweet(msg) {
// body作成
let body = {
'value1': msg,
// value2: '',
// value3: ''
};
// option作成
let opt = {
'method': 'POST',
'contentType': 'application/json',
'payload': JSON.stringify(body)
};
logOut(PRJ_NAME, opt);
let res = UrlFetchApp.fetch(`https://maker.ifttt.com/trigger/<Event nameを指定>/with/key/<KEYを指定>`, opt);
logOut(PRJ_NAME, 'code:' + res.getResponseCode());
logOut(PRJ_NAME, 'content:' + res.getContentText());
}
/*-------------------------------------------------
スプレッドシートの上から順にデータを取得する
※idで指定するスプレッドシートはあらかじめ作成すること。
※最終行(空行)を見つけたら先頭に戻る。
2022/02/09 created by N.Sekiya
---------------------------------------------------*/
function getMsg() {
var id = SPREAD_SHEET;
var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getSheets()[0];
var row = sheet.getRange(1,1).getValue(); // 次に取得するデータ一取得
//Logger.log(row);
var msg = sheet.getRange(row, 1).getValue();
if(msg == "") { // 空行の場合は最終行に達したと判断する
row = 2; // 先頭行に戻る
msg = sheet.getRange(row, 1).getValue();
}
sheet.getRange(1, 1).setValue(row+1);
//Logger.log(msg);
return msg;
}
/*-------------------------------------------------
スプレッドシートにログを出力する関数
WebアプリとしてデプロイするとLogger.log()ではログが残らない。
デバックに困るので、スプレッドシートに出力できるようにした。
※idで指定するスプレッドシートはあらかじめ作成する必要がある。
2021/12/01 created by N.Sekiya
---------------------------------------------------*/
function logOut(prjName, msg) {
var id = LOG_SHEET;
var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getSheets()[0];
sheet.appendRow([new Date(), prjName, msg]);
}
定期実行
トリガー設定を行うことで定期的にautoTweet()関数を呼び出し、自動的にツイートできるようになります。
まとめ
いかがでしたでしょうか。
最終行までツイートしたら、先頭に戻ってツイートするようになったかと思います。
上から順番にツイートさせて、最終行までツイートしたら、LINEに通知させるなどの使い方も考えられますね。
LINEへの通知はLINE notifyを使うことで簡単に実装できます。GASのコードとしては10数行追加するだけで実現できます。LINE notifyについては以下に紹介しているので参考にしてください。
いろいろ手を変えて実装するのは楽しいですよね。
お試しください。
では、今日も良い一日を。