22
3

Qiitaの新着記事をSlackに通知してみた

Posted at

使用した環境:
・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で取得した記事の作成日時が、スプレッドシートに登録されている最後の記事より未来日の場合は
記事の情報をスプレッドシートに登録する
image.png
※この段階では「通知フラグ」は"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」はセキュリティ上非推奨となっているので、そこだけ気を付けています。

22
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
3