使用した環境:
・Googleスプレッドシート
・GAS
・Qiita API
・Slack Apps - Incoming Webhooks
構成はざっくりとこんな感じです
// この関数をトリガーで設定して動かしています
function 日次(){
記事取得()
通知送信()
}
function 記事取得(){
// Qiita APIで記事を取得する
// 必要なデータをシートに設定
}
function 通知送信(){
// 土日祝の場合は通知なし
// 未通知かつ公開されている記事を対象にして、通知送信
}
満を持して使うタイミングがやってきました。
記事取得
※今回はトークンを発行しているので、設定してAPIをたたく
var ACCESS_TOKEN = "XXX";
// Crane&I に紐づけされている記事
const apiUrl = 'https://qiita.com/api/v2/items?per_page=20&query=org:crane-i';
var response = UrlFetchApp.fetch(apiUrl, {
headers: {
'Authorization': 'Bearer ' + ACCESS_TOKEN
}
});
var items = JSON.parse(response.getContentText());
items = items.sort(function(a, b) {
return (a.created_at < b.created_at) ? -1 : 1;
});
APIで取得した記事の作成日時が、スプレッドシートに登録されている最後の記事より未来日の場合は
記事の情報をスプレッドシートに登録する
※この段階では「通知フラグ」は"FALSE"で登録
通知送信
送信するデータの取得と、送信メッセージの設定
var message = ""
// flg→「通知フラグ」 private→「限定公開フラグ」
if ( flg == false & private == false){
var user = sheet.getRange(i, 1).getValue();
var title = sheet.getRange(i, 2).getValue();
message += "@"+ user + "「" + title + "」" + "\n";
// 通知対象になったレコードはこの段階で"TRUE"に変更する
sheet.getRange(i, notice_flg).setValue('True');
send_flg = 1;
}else{
break;
}
送信するデータがある場合は送信!
UrlFetchApp.fetch(
// Webhook URLを入れる
"Slackのアプリで発行したURL",
{
//POSTリクエストでSlackへ送信
"method" : "POST",
"contentType" : "application/json",
"payload" : JSON.stringify({"text": message})
}
);
さいごに
一応1度バグは起きたものの安定して動いてくれています
Slackの「Incoming Webhook」はセキュリティ上非推奨となっているので、そこだけ気を付けています。