0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

普段在宅勤務ですが、通勤時に駅まで行って電車が止まってたら労働意欲を削がれるのであらかじめ遅延情報を知りたい。
怒りの出戻り時に思いついたのでスクリプトはAIに任せたら昼休みに食事しながら作成できました。
普段からGoogleカレンダーに出社日を登録し、チーム内に共有しているのでそれを使うことにしました。

流れ

  1. Googleカレンダーの勤務場所が「オフィス」の日の指定時間に
    スクリーンショット 2024-06-13 8.20.48.png
  2. Yahoo路線情報のページから指定路線の情報を取得
    スクリーンショット 2024-06-13 8.15.27.png
  3. LINE Nortifyで取得したテキストを送信
    Screenshot_20240612-223839.png

となります。
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);
}

トリガーの作成

スクリーンショット 2024-06-13 8.42.38.png
時刻は通知してほしい時間帯に設定
これで毎日指定時刻になるとgoogleカレンダーの勤務場所をチェックし、オフィスならば遅延情報をLINEに送るようになります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?