Help us understand the problem. What is going on with this article?

GoogleカレンダーのイベントをLINEグループに投稿する

More than 1 year has passed since last update.

要件

  • 月初にいくつかの月いちイベントの日程を投稿する(内容までは不要、日付がわかればよい)
  • 毎日夕方に次の日に登録されているイベントがあれば投稿する(内容があれば内容も記載する)

使用するもの

  • LineNotify
  • GoogleCalendar
  • GoogleAppsScript

手順

1

コマンドラインから LINE にメッセージを送れる LINE Notifyの「パーソナルアクセストークンを発行する」を投稿したいグループや1:1に対して行う。

2

Googleドライブのページに行き、マイドライブ⇒その他⇒アプリを追加でGoogleAppsScriptを追加する。

1.png

2.png

3

マイドライブ⇒その他⇒GoogleAppsScriptでスクリプトエディタを開く

3.png

4

以下のスクリプトに入れ替える

google_calendar_line_notify.gs
var googleCalendarId = "";
var lineNotifyEndPoint = "https://notify-api.line.me/api/notify";
var accessToken = "";
var monthlyPostEventTitleInitials = "";// 月初投稿用イベント判定用頭文字
var dayOfWeekStringList = ["", "", "", "", "", "", ""];

// 毎日用のメッセージ(内容も出す)
function postDailyMessage() {
  var calendar = CalendarApp.getCalendarById(googleCalendarId); //カレンダーIDからカレンダーを取得
  if (calendar === null)
  {
    Logger.log("カレンダーが見つかりませんでした。");
    return;
  }

  var date = new Date();
  date.setDate(date.getDate() + 1);
  var dailyEventList = calendar.getEventsForDay(date);// 明日のイベント

  var baseTitle = "明日の予定";
  var message = "";
  message += baseTitle;

  for each (var event in dailyEventList)
  {
    var eventTite = event.getTitle().replace(new RegExp(monthlyPostEventTitleInitials), "");
    var eventDescription = event.getDescription();
    message += "\n" + eventTite + "\n" + eventDescription;
  }

  if (message === baseTitle)
  {
    return;
  }

  sendMessage(message);
}

// 月初用のメッセージ
function postMonthlyMessage() {
  var nowDate = new Date();

  var year = nowDate.getYear();
  var month = nowDate.getMonth();

  var startDate = new Date(year, month, 1);// 月初
  var endDate = new Date(year, month + 1, 0);// 月末

  var calendar = CalendarApp.getCalendarById(googleCalendarId); //カレンダーIDからカレンダーを取得
  if (calendar === null)
  {
    Logger.log("カレンダーが見つかりませんでした。");
    return;
  }

  var monthlyEventList = calendar.getEvents(startDate, endDate);// getEventsはstartDateを含みendDateは含まない様子

  var message = "今月の予定";
  var eventMessage = "";

  for each (var event in monthlyEventList)
  {
    var eventTite = event.getTitle();
    if ( ! eventTite || eventTite.slice(0, 1) !== monthlyPostEventTitleInitials)
    {
      continue;
    }
    eventTite = eventTite.replace(new RegExp(monthlyPostEventTitleInitials), "");
    var eventDate = event.getStartTime();// Date
    eventMessage += "\n" + eventTite + "" + (eventDate.getMonth() + 1)  + "/" + eventDate.getDate() + "" + dayOfWeekStringList[eventDate.getDay()] + "";
  }

  message += eventMessage ? eventMessage : "登録されていません";

  sendMessage(message);
}

// メッセージ送信
function sendMessage(message) {
  var formData = {
    "message": message
  };
  var options = {
    "headers" : {"Authorization" : "Bearer " + accessToken},
    "method" : 'post',
    "payload" : formData
  };

  try
  {
    var response = UrlFetchApp.fetch(lineNotifyEndPoint, options);
  }
  catch (error)
  {
    Logger.log(error.name + "" + error.message);
    return;
  }

  if (response.getResponseCode() !== 200)
  {
    Logger.log("メッセージの送信に失敗しました。");
  } 
}

5

スクリプトのaccessToken = "";の部分にで取得したパーソナルアクセストークンを設定する。

6

スクリプトのgoogleCalendarId = "";の部分に投稿するGoogleカレンダーのIDを設定する。GoogleカレンダーのIDは下図のカレンダー画面の赤枠辺りをクリックすることで情報一覧が確認することが出来ますので、その中に表示されています。多分Gmailのアドレス等になっていると思います。

4.png

7

Googleカレンダーにイベントを登録する。

  • 月いちイベントはタイトルの頭文字を★にします。(★にしなければ月いちイベントとみなされないため、月初の投稿には含まれません)
  • イベントの説明があれば入力してください、毎朝の投稿に説明も表示されます。

8

毎朝の投稿スクリプト(postDailyMessage)と月いちイベントの投稿スクリプト(postMonthlyMessage)に対してトリガーを設定します。
編集⇒現在のプロジェクトのトリガーから下図のように設定を行います。

6.png

postDailyMessageは毎日19時から20時に実行されるようになります。(画像では)
postMonthlyMessageは毎月1日の0時から1時に実行されるようになります。

参考

コマンドラインから LINE にメッセージを送れる LINE Notify
https://developers.google.com/apps-script/reference/calendar/
https://developers.google.com/apps-script/reference/calendar/calendar-event
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
https://developers.google.com/apps-script/reference/url-fetch/http-response

horikeso
個人的な備忘録ばかりですが、よろしくお願いします。難しいことはよくわかりません!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away