通学前に電車の遅延情報が知りたい
でも毎回調べるのはだるい->予め決められた時間にSlackに通知がくるBotが欲しい
->Yahoo路線情報から引っ張ってきてGASで時間を決めて送信
便利なところ
- 開発時に毎回エラーログを見るのが面倒->ドキュメントファイルでログが見れます
- 路線ごとの遅延情報が欲しい!->通知したい路線のURLを配列に入れればOK
slack.train.gs
var DEV_MODE = false; //開発時はtrueにすることで下で指定したドキュメントファイルでエラーログが見れます
var LOG_FILE_ID = 'デバッグ用に事前にGoogleドキュメントファイルを作ってファイルIDを記載';
var RECIPIENT = 'gmailのアドレス';
var HOOK_POINT = 'SlackのIncoming URLを作成して貼り付けてください';
function SlackPost() {
try {
// ログをクリア
if (DEV_MODE) getLogFile().getBody().clear();
//日付取得とフォーマット整形
var currentDate = new Date();
var date = Utilities.formatDate(currentDate, "Asia/Tokyo", 'M月d日 HH時mm分');
// 通知したい路線のURL
var area_list = ["https://transit.yahoo.co.jp/traininfo/detail/267/0/",
"上みたいな感じでyahoo路線図のURLを貼り付けてください"];
var line = "";
for (var i = 0, len = area_list.length; i < len; ++i) {
var response = UrlFetchApp.fetch(area_list[i]);
var myRegexp = /<div class="mainWrp">([\s\S]*)<!--\/#mdServiceStatus-->/i;
var line_html = myRegexp.exec(response.getContentText())[1];
var reg_route = /<h1 class="title">([\s\S]*?)<\/h1>/
var reg_status = /\W\]<\/span>([\s\S]*?)<\/dt>/;
var reg_content = /<p>([\s\S]*?)<span>/;
var route = line_html.match(reg_route)[1];
var status = line_html.match(reg_status)[1];
if (line_html.match(reg_content)) {
var content = line_html.match(reg_content)[1];
} else {
var content = "路線のURLがありません";
};
line += ('━─━─━─━─━─━─━─━' + "\n" + route + "\n" + status + "\n" + content + "\n");
};
// slackに投稿
function postMessage(message, hookPoint) {
var payload = {
"text": message,
"channelId": '#slack_study',
"userName": 'train-info',
"icon_emoji": ':train:'
}
var options = {
"method": "POST",
"payload": JSON.stringify(payload),
"headers": {
"Content-type": "application/json",
}
}
var response = UrlFetchApp.fetch(hookPoint, options);
if (response.getResponseCode() == 200) {
return response;
}
return false;
}
postMessage("\n" + "◆○○遅延情報 " + "\n" + date + "\n" + line, HOOK_POINT);//ooには路線名や地域名を入れてください
} catch (e) {
Logger.log('\n' + JSON.stringify(e, null, ' '));
} finally {
// ログを書き込む
if (DEV_MODE) getLogFile().getBody().appendParagraph(Logger.getLog());
}
}
function getLogFile() {
if (this.logFile === undefined) {
this.logFile = DocumentApp.openById(this.LOG_FILE_ID);
}
return this.logFile;
}
プロジェクトトリガーの設定
参考にさせていただいたサイト
ありがとうございました。
次に向けて
欲しい値だけが得られるよう正規表現を工夫しましたが、もっといい方法がある場合は教えてください!