Skip to content

Instantly share code, notes, and snippets.

@tarao
Last active January 17, 2016 09:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tarao/2debfa09bc15eb21d346 to your computer and use it in GitHub Desktop.
Save tarao/2debfa09bc15eb21d346 to your computer and use it in GitHub Desktop.
// Configuration
var WEBHOOK_URL = PropertiesService.getScriptProperties().getProperty('webhook_url');
if (!WEBHOOK_URL) throw 'You should set "webhook_url" property from [File] > [Project properties] > [Script properties]';
var SLACK_USERNAME = PropertiesService.getScriptProperties().getProperty('slack_username') || 'cronsheet';
var SLACK_ICON_EMOJI = PropertiesService.getScriptProperties().getProperty('slack_icon_emoji') || ':clock3:';
var SHEET_NAME = PropertiesService.getScriptProperties().getProperty('sheet_name');
// ... END Configuration
var COLUMN_QUARTER = 1;
var COLUMN_DOW = 2;
var COLUMN_START_MESSAGE = 3;
var MONTH_OF_QUARTER_END = {
'冬': 3,
'春': 6,
'夏': 9,
'秋': 12
};
var DOW_TO_INTEGER = {
'日': 1,
'月': 2,
'火': 3,
'水': 4,
'木': 5,
'金': 6,
'土': 7
};
function dateOfQuarterEnd(quarter) {
var m = /(^[0-9]+)(.)/.exec(quarter);
if (!m) return;
var month = MONTH_OF_QUARTER_END[m[2]];
if (!month) return;
return new Date(parseInt(m[1], 10), month-1, 30);
}
function doPost() {
var now = new Date();
var sheet = SHEET_NAME ? SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME) : SpreadsheetApp.getActiveSheet();
var maxRows = sheet.getMaxRows(), maxCols = sheet.getMaxColumns();
var headerValues = sheet.getRange(1, 1, 1, maxCols).getValues()[0];
for (var r = 2; r <= maxRows; r++) {
var row = sheet.getRange(r, 1, r, maxCols);
var quarter = row.getCell(1, COLUMN_QUARTER).getValue();
if (quarter) {
var end = dateOfQuarterEnd(quarter);
if (now.getTime() > end.getTime()) break;
}
var dow = (DOW_TO_INTEGER[row.getCell(1, COLUMN_DOW).getValue()]||0)-1;
if (dow != now.getDay()) continue;
var msg = new SlackMessage({
username: SLACK_USERNAME,
icon_emoji: SLACK_ICON_EMOJI,
header: '<' + sheet.getParent().getUrl() + '|' + sheet.getParent().getName() + '> @' + now.toISOString()
});
for (var c = COLUMN_START_MESSAGE; c <= row.getLastColumn(); c++) {
if (headerValues[c - 1].toString() === '')
break;
msg.addField(headerValues[c - 1].toString(), '' + row.getCell(1, c).getValue());
}
var options = {
method: 'post',
payload: JSON.stringify(msg.toPayload())
};
var res = UrlFetchApp.fetch(WEBHOOK_URL, options);
if (res.getResponseCode() != 200) {
Logger.log(res);
}
}
}
var SlackMessage = (function () {
function SlackMessage(config) {
this.fields = [];
this.username = config.username;
this.icon_emoji = config.icon_emoji;
this.header = config.header;
}
SlackMessage.prototype.addField = function (title, value) {
this.fields.push({ title: title, value: value });
};
SlackMessage.prototype.toPayload = function () {
var payload = {
attachments: [
{
fallback: this.fields.map(function (p) { return p.title + '=' + p.value; }).join('; '),
pretext: this.header,
fields: this.fields
}
],
username: this.username,
icon_emoji: this.icon_emoji
};
return payload;
};
return SlackMessage;
})();
@tarao
Copy link
Author

tarao commented Jan 16, 2016

これはなに?

設定方法

スプレッドシート例

クール 作品 URL
2016冬
おそ松さん https://anime.dmkt-sp.jp/animestore/ci_pc?workId=20399
昭和元禄落語心中 http://www.amazon.co.jp/dp/B01A7URSBG
2015秋
すべてがFになる https://anime.dmkt-sp.jp/animestore/ci_pc?workId=20382

スクリプト設定

  • webhook_url, slack_username, slack_icon_emoji[File] > [Project properties] > [Script properties]で設定
  • トリガを毎日指定の時間にしておく
  • 今期の該当曜日の情報が流れる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment