ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【GAS】今日の予定を自動的にLINEに送信する方法(LINE アクセストークンの取得方法)
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- 指定したカレンダーの予定のみLINEに通知されるようになります。
- 以前作成したスクリプトの変更方法がわかります。
動画はこちら
スクリプト
const LINE_NOTIFY_TOKEN = "*****あなたのトークン*****";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
const CALENDER_NAME = "xxx"; //取得するカレンダー名
function calendarToLine() {
var calendars = CalendarApp.getAllCalendars();
// var text = "\n" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n" ;
var text = "\n" + Utilities.formatDate(new Date(), 'JST', 'M月d日') + "\n" ;
for(i in calendars) {
var calendar = calendars[i];
var events = calendar.getEventsForDay(new Date());
/*
//カレンダー名を取得する
if( events.length > 0 ) {
text += "■ " + calendar.getName() + "\n";
}
*/
if( calendar.getName() == CALENDER_NAME )
{
// text += "■ " + calendar.getName() + "\n";
//カレンダーの内容を取得する
for(j in events) {
var event = events[j];
var title = event.getTitle();
var start = toTime(event.getStartTime());
var end = toTime(event.getEndTime());
text += start + ' - ' + end + " " + title + '\n';
}
if( events.length > 0 ) {
text += "\n";
}
}
}
sendToLine(text);//LINEにデータを送信する
}
//LINEにデータを送信する
//text:送信するデータ
function sendToLine(text){
var token = LINE_NOTIFY_TOKEN;
var options =
{
"method" : "post",
"payload" : "message=" + text,
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch(LINE_NOTIFY_API, options);
}
//'HH:mm'に変換する
function toTime(str){
return Utilities.formatDate(str, 'JST', 'HH:mm');
}
最後までご覧いただきありがとうございます。
つぎはこちら
【GAS基礎講座】明日の予定がある場合のみLINEに送信する方法 Q&A
コメント
質問させてください。
コードの紹介ありがとうございます。
こちら1週間の予定を送る場合はどう変更したらいいでしょうか?
ご教授いただけましたら。
質問ありがとうございます。
13行め
var events = calendar.getEventsForDay(new Date());
で、今日(new Date())をしているので、この部分に
必要とする日付を入れていけばいいです。
別の質問ですが、
10件以上のカレンダーのイベントを取得したいのですが、カレンダー名のところに加えられなくて別のやり方も教えていただければ幸いです。
すみません、意味がよくわかりません。
具体的な例を提示していただけると助かります。
すみません。送ったと思っていたのですがコメントが消えてしまっていました。
こちらから尋ねておいて申し訳ありません。
いまグーグルカレンダーで自分のアドレス*****@gmail.comと別に******@group.calendar.google.com
というグループカレンダーを10件以上連携させています。
そのカレンダーの今日のイベントもLINEに一緒に送るようにしたいと思ったのですが、getAllCallendersのみだと引っ張ってこれなくて悩んでいます。
何かいいやり方があれば教えてほしいと思いましてコメントしました。
この質問は、*****@group.calendar.google.com のイベントが
getAllCallendersでは取得できないということでしょうか?
そうです。getAllでgroupのカレンダーの予定が取得されなかったので違う方法がないか調べているんですが。
なかなか見つからなくて。
すみません説明が悪かったです。
最初の部分ですが、
const LINE_NOTIFY_TOKEN = “****************”;
// 予定
const LINE_NOTIFY_API = “https://notify-api.line.me/api/notify”;
const CALENDER_NAME = “*******@gmail.com” ; //取得するカレンダー名
ここの取得するカレンダーのところが1つではなくて
aaaaaaaaaaaaaaaaaaaa@group.calendar.google.com,
bbbbbbbbbbbbbbbbbbbb@group.calendar.google.com,
cccccccccccccccccccc@group.calendar.google.com
というようにいくつもの予定を取り出してlineに送りたい場合はどうしたらよろしいでしょうか?
#すみません、コメントが承認待ちになっていました。
原始的なやり方ですが、
if( calendar.getName() == CALENDER_NAME )
{}
の処理をカレンダー数分やれば取得できると思います。
if( calendar.getName() == “aaaaaaaaaaaaaaaaaaaa@group.calendar.google.com”)
{}
if( calendar.getName() == “bbbbbbbbbbbbbbbbbbbb@group.calendar.google.com”)
{}
・・・・・
配列がおわかりであれば、
カレンダー名を配列にし
const calbuff = [
“aaaaaaaaaaaaaaaaaaaa@group.calendar.google.com”,
“bbbbbbbbbbbbbbbbbbbb@group.calendar.google.com”,
“cccccccccccccccccccc@group.calendar.google.com”]
calbuff.forEach(function (element) {
if (calendar.getName() == element) {
//LINEに送信する処理
}
}
で行けると思います。
なるほど、それはわからないですね。
ありがとうございます。