質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

1034閲覧

GASにて今日、明日の予定をLINEに通知。日付を超える予定は今日の予定には表示するが、明日の予定には表示しない。

KPS

総合スコア8

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/10/25 05:32

編集2019/10/29 01:29

var

1 2function main() { 3 4var calendars = CalendarApp.getAllCalendars(); 5 6var text = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n"; 7 8for(i in calendars) { 9 10var calendar = calendars[i]; 11 12var events = calendar.getEventsForDay(new Date()); 13 14if( events.length > 0 ) { 15 16text += "◆ " + calendar.getName() + "\n"; 17 18} 19 20for(j in events) { 21 22var event = events[j]; 23 24var title = event.getTitle(); 25 26var start = toTime(event.getStartTime()); 27var end = toTime(event.getEndTime()); 28 29text += start + ' - ' + end + "\n" + " " + title + '\n\n'; 30 31} 32 33if( events.length > 1 ) { 34 35sendToLine(text) += "\n"; 36 37} 38 39} 40 41sendToLine(text); 42 43} 44 45function sendToLine(text){ 46 47var token = lineToken; 48 49var options = 50 51{ 52 53"method" : "post", 54 55"payload" : "message=" + text, 56 57"headers" : {"Authorization" : "Bearer "+ token} 58 59}; 60 61UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); 62 63} 64 65function toTime(str){ 66 67return Utilities.formatDate(str, 'JST', "HH:mm"); 68 69} 70 71```GAS を使い、朝Lineに今日の予定を通知したいのです。 72通知をする所まではできているのですが、日付を超える場合 今日の超えた分の予定を明日には反映させたくないです。 73 74例えば 現在 29日8:00 75予定通知時間 29日6:00 7628日 22:00 - 29日9:00 通知をこなくしたい。 7729日 22:00 - 30日9:00 通知が来てほしい。 78 79開始時間が今日のだけを今日の予定として送信するようにしたいのです。 80 81 82予定がない時はLineに通知をしなくなるようにしたいのですが、これも設定がわからないので教えていただけませんか? 83 84 85 86 87初心者なのでよろしくお願い致します

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/10/25 05:43

JavaとJavaScriptは別物です。 また、コードはマークダウンのcode機能にてご提示ください
guest

回答2

0

event.getStartTime()でイベントの時刻だけでなく開始日が取れるのでは?
開始日が今日でなければ、無視するだけだと思います。

JavaScript

1function main() { 2 var today = Utilities.formatDate(new Date(), 'JST', 'yyyy-MM-dd'); 3 var calendars = CalendarApp.getAllCalendars(); 4 var text = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n"; 5 6 for (i in calendars) { 7 var calendar = calendars[i]; 8 var events = calendar.getEventsForDay(new Date()); 9 if (events.length > 0) { 10 text += "◆ " + calendar.getName() + "\n"; 11 } 12 13 var needNotify = false; 14 for (j in events) { 15 var event = events[j]; 16 var title = event.getTitle(); 17 18 var startDate = new Date(Utilities.formatDate(event.getStartTime(), 'JST', 'yyyy-MM-dd')); 19 if( today != startDate) 20 continue; 21 needNotify = true; 22 23 var start = toTime(event.getStartTime()); 24 var end = toTime(event.getEndTime()); 25 text += start + ' - ' + end + "\n" + " " + title + '\n\n'; 26 } 27 28 if (needNotify) { 29 sendToLine(text) += "\n"; // sendTOLine(text + "\n"); の間違い? 30 } 31 32 } 33 34 sendToLine(text); 35} 36(以下略)

投稿2019/10/25 06:52

編集2019/10/28 17:03
draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KPS

2019/10/28 02:23

ありがとうございます。 昨日の日付を超えるも通知してしまいました。 カレンダーのタイトルも表示が消えてしまいました。 よろしくお願い致します。
draq

2019/10/28 17:04

今日の判定で時刻情報が残ったまま比較していたので修正しました。
KPS

2019/10/31 01:10

ありがとうございました。 本当に助かりました。
guest

0

ベストアンサー

javascripit

1const lineToken = "LINE コード"; 2 3function q219287() { 4 const today = new Date(); 5 const tomorrow = (new Date()).setDate(today.getDate() + 1); 6 [["きょう",today, getEvents(today)],["あした",tomorrow,getEvents(tomorrow)]].filter(function(e) { return e[2].length > 0;}).forEach(function(e){ sendToLine(e[0]+toTime(e[1])+'\n'+eventAsText(e[2]));}); 7} 8function getEvents(thedate) { 9 return CalendarApp.getAllCalendars().map(function (cal) { 10 return [cal.getName(), getEventsStartsInTheDay(cal, thedate)]; 11 }).filter(function (e) { 12 return e[1].length > 0; 13 }); 14} 15function eventAsText(events) { 16 return events.map(function (e) { 17 return '◆ ' + e[0] + '\n' + e[1].map(eventToString).join('\n\n'); 18 }).join('\n'); 19} 20function sendToLine(text) { 21 const token = lineToken; 22 const options = { 23 "method": "post", 24 "payload": "message=" + text, 25 "headers": {"Authorization": "Bearer " + token} 26 }; 27 UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); 28} 29 30function toTime(str) { 31 return Utilities.formatDate(str, 'JST', "HH:mm"); 32} 33 34function getEventsStartsInTheDay(calendar, thedate) { 35 const dateNum = thedate.getDate(); 36 return calendar.getEventsForDay(thedate).filter(function (e) { 37 return e.getStartTime().getDate() === dateNum; 38 }); 39} 40 41function eventToString(event) { 42 return toTime(event.getStartTime()) + ' - ' + toTime(event.getEndTime()) + '\n ' + event.getTitle() + '\n\n'; 43}

投稿2019/10/25 06:42

編集2019/10/28 13:43
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KPS

2019/10/28 01:44

回答ありがとうございます。 両方ともコード入力してみたのですが、日付を超える予定が反映されてしまいました。
KPS

2019/10/28 02:21

今日の予定がとれず、昨日の日付が超えるのを取得してしまいます。 一番理想に近い感じなのでよろしくお願い致します。 予定がない時、LINEに通知しないコードもよろしくお願い致します。
papinianus

2019/10/28 13:22 編集

> 日付を超える予定が反映 > 今日の予定がとれず、昨日の日付が超えるのを取得してしまいます。 わからないので数値で日付を示してください。 > 25日 22:00-6:00 > これですと明日にも通知がきてしまうので。 この予定は、25日の予定だということですね?これが26日の予定なんだと理解して回答しました。 回答の冒頭で、今日終わるものだけにするやつ、と意図を書いていました。無意味でしたね。 > 予定がない時、LINEに通知しないコードもよろしくお願い致します。 そうなっていると思います。Lineのdeveloperではないので送信処理に到達しないことしか確認していませんが。 > GAS を使い、朝Lineに今日の予定、明日の予定を通知したいのです。 およそこのコードには微塵もない、今日の予定は○○で、明日の予定は○○です、という通知がほしいということが理解できました。
KPS

2019/10/29 01:15

ありがとうございます。 質問の仕方がわかりずらく申し訳ないです。 関数 q219287 で実行した所 TypeError: オブジェクト 1572397994720 で関数 getDate が見つかりません。 と表示されたのですが、初心者なもので解決がみつけられなかったので教えていただけませんか。
papinianus

2019/10/29 14:02

行数は?thedateで起きているか、startdateした方で起きているか知りたいです。
KPS

2019/10/31 01:07

35行目です。 const dateNum = thedate.getDate();の所です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問