普段在宅勤務ですが、通勤時に駅まで行って電車が止まってたら労働意欲を削がれるのであらかじめ遅延情報を知りたい。
怒りの出戻り時に思いついたのでスクリプトはAIに任せたら昼休みに食事しながら作成できました。
普段からGoogleカレンダーに出社日を登録し、チーム内に共有しているのでそれを使うことにしました。
流れ
となります。
GASで作り、指定時間はトリガーで設定することにします。
LINEを他のメッセージ・チャットアプリに変更するのも可能かと思います。
事前準備
LINE Nortifyのトークンを取得します
LINE Notify アクセストークン発行方法
Yahoo路線情報のURL
投稿するにあたって複数路線に対応してみたが未検証
GAS
Yahoo路線情報のページ内容の取得にはCheerioライブラリを使用します。
GASを使ったスクレイピングのやり方
ライブラリにCheerioを追加しておきます。
スクリプト作成はAI任せ。
Googleカレンダーの勤務場所の判定
function getWorkLocationAndNotify() {
const calendarId = Session.getActiveUser().getEmail();
const calendar = CalendarApp.getCalendarById(calendarId);
// 日本時間(JST)に設定
const timeZone = 'Asia/Tokyo';
// 今日の日付を日本時間で取得
const today = new Date();
const startTime = new Date(today.getFullYear(), today.getMonth(), today.getDate());
const endTime = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);
// 今日のイベントを日本時間で取得
const events = calendar.getEvents(startTime, endTime, { timeZone: timeZone });
let workLocation = '';
events.forEach(event => {
// イベントのタイトルを取得
const title = event.getTitle();
const description = event.getDescription();
const location = event.getLocation();
Logger.log('イベントのタイトル: ' + title);
Logger.log('イベントの説明: ' + description);
Logger.log('イベントの場所: ' + location);
if (title.includes('オフィス')) {
workLocation = title;
}
});
スクレイピングと通知
function fetchServiceStatusesAndNotify() {
const urls = [
'https://transit.yahoo.co.jp/diainfo/267/0',
'https://transit.yahoo.co.jp/diainfo/268/0', // ここに追加の路線URLを記入
// 他の路線URLを追加
];
let combinedStatus = '';
urls.forEach(url => {
const response = UrlFetchApp.fetch(url);
const html = response.getContentText();
// Cheerioを使用してHTMLをパース
const $ = Cheerio.load(html);
// #mdServiceStatusのテキストを取得
const statusText = $('#mdServiceStatus').text().trim();
Logger.log(statusText);
combinedStatus += `路線情報 (${url}):\n${statusText}\n\n`;
});
// LINE Notifyトークン
const lineToken = 'YOUR_LINE_NOTIFY_TOKEN'; // ここにあなたのLINE Notifyトークンを入れてください
// LINE Notifyに通知を送信
const options = {
'method': 'post',
'headers': {
'Authorization': 'Bearer ' + lineToken
},
'payload': {
'message': combinedStatus
}
};
UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
}
トリガーの作成
時刻は通知してほしい時間帯に設定
これで毎日指定時刻になるとgoogleカレンダーの勤務場所をチェックし、オフィスならば遅延情報をLINEに送るようになります。