QiitaOrganizationのLGTM数をGASでSlackに通知する
やったこと
QiitaOrganizationのページからLGTM数を取得して
こんな感じで毎週Slackに通知。
なぜやったのか
- 社内でQiitaを盛り上げたい、関心UP
- 投稿へのモチベーションUP
- いっぱい投稿が増えるといいな
実装メモ
- LGTM数はfeedに含まれてなかったのでスクレイピングで取得
- なぜかスクレイピングするとLGTMの後ろにsがつくっぽい。これは未解決。
- Slack通知はIncoming Webhookを使用
- 設定こんな感じ
- LGTM数はスプレッドシートに記録される
- こんな感じで日付とLGTM数が溜まっていく
- 毎週実行はGASのトリガーでやってる。
コード(GAS)
スプレッドシートからツール→スクリプトエディタを開く。
下記をコピペしてurlとwebhook_urlを書き換えればOK。
function notifyContributions() {
const url = 'QiitaOrganizationのURL'; // 例: https://qiita.com/organizations/sousei-tech
const webhook_url = "Incoming WebhookのURL"; // 例)https://hooks.slack.com/services/HOGE/FUGA/HOGA
const response = UrlFetchApp.fetch(url);
const html = response.getContentText();
let contributions;
// NOTE: HTML構成変わると動かなくなる。そのときはwebページをソース表示して該当箇所のHTMLを見つけて修正する。
// NOTE: 2020/3/10時点 "likesCount":1096,
const targetLeft = '"likesCount":';
const targetRight = ',';
let index = html.indexOf(targetLeft)
// Logger.log(index);
if (index !== -1) {
let tmp = html.substring(index + targetLeft.length);
index = tmp.indexOf(targetRight);
if (index !== -1) {
contributions = tmp.substring(0, index);
}
}
const book = SpreadsheetApp.getActiveSpreadsheet();
const sheet = book.getSheetByName("シート1");
const last_row = sheet.getDataRange().getLastRow();
const before_contributions = sheet.getRange(last_row, 2).getValue();
const target_row = last_row + 1;
sheet.getRange(target_row, 1).setValue(new Date());
sheet.getRange(target_row, 2).setValue(contributions);
// Logger.log(before_contributions);
const message = contributions + ' LGTM :tada: (前回から+' + (contributions - before_contributions) + ')' + "\n" + url;
// エラーで動かなくなったときはここでリターンして調査するとよい。(Slackへの通知をやめる)
// Logger.log(contributions);
// return;
const jsonData = {
"text" : message,
"link_names" : 1,
};
const payload = JSON.stringify(jsonData);
const options = {
"method" : "post",
"contentType" : "application/json",
"payload" : payload,
};
UrlFetchApp.fetch(webhook_url, options);
おまけ
社員の投稿を通知したい場合はslackでfeedを購読しておけばOK!(これもGASで実装しようかと思っていた😅)
/feed subscribe https://qiita.com/organizations/sousei-tech/activities.atom
さいごに
それではステキなQiitaOrganizationライフを。