前提・実現したいこと
カレンダーの終日イベントに特定の文字がある時だけLINE通知したいです。
発生している問題・エラーメッセージ
x.match is not a functionというエラーが出ます。
GAS
1function gomi() { 2 //line 3 var token = '******'; 4 5 //calendar 6 var cal = CalendarApp.getCalendarById('***@***'); 7 var starttime = new Date(); 8 starttime.setHours(0); 9 starttime.setMinutes(0); 10 starttime.setSeconds(0); 11 var endtime = new Date(); 12 endtime.setHours(23); 13 endtime.setMinutes(59); 14 endtime.setSeconds(59); 15 var events = cal.getEvents(starttime,endtime); 16var values = []; 17 events.forEach(function(event){ 18 var title = event.getTitle(); 19 var allday = event.isAllDayEvent(); 20 if(allday === true){ 21 values.push([title]); 22 x = values.join; 23 } 24 25 26 var today = new Date(); 27 var day = today.getDay(); 28 var yasumi = x.match(/***/); 29 Logger.log(yasumi); 30 31if(yasumi === '***' && day == '1'){ 32 var x = 'ゴミの日です' 33}else if(yasumi === '***' && day == '3'){ 34 var x = '資源ごみの日です'; 35 }else if(yasumi === '***' && day == '4'){ 36 var x = 'ゴミの日です'; 37 }else{ 38 return; 39} 40let options = { 41 "method" : "post", 42 "headers" : { 43 "Authorization" : "Bearer "+ token 44 }, 45 "payload" : { 46 "message" : x 47 } 48 }//oprions done 49 let url = "https://notify-api.line.me/api/notify" 50 UrlFetchApp.fetch(url, options) 51 } 52 ) 53}//done
[投稿 2021/03/28 16:51時点の内容に対する質問]
「しかしカレンダーに終日イベントがない場合があり、そうすると配列が空になってしまい動かなくなります。」という質問文中の「配列」とは、
コード中の「values」を指していると推測しましたが、合っていますか?
仮にこれが合っているとして、「動かなくなります。」とは、具体的にどのようなエラーが表示されているのでしょうか?
コードでは
  values.push([title]);
以降、valuesがどこにも使われていません。
もし質問文に記載のない部分でエラーが発生しているならば、そのコードも記載してください
エラーが発生していないのであれば、「動かなくなります」の具体的な意味を教えてください。
(可能ならば全部のコードを記載していただくのが改善の早道ですが)
大変遅くなり申し訳ございません。
エラー内容とコード全文を記載いたしました。
お時間ございましたらご一読いただけますと幸いです。
1. コード中の「***」というのは、実際は何か別の文字なのを便宜上置き換えているというわけではなく
本当に「***」(アスタリスク3つ)という解釈でよいのでしょうか?
(「***」(アスタリスク3つ)をマッチさせればよいのか?という意味です。
もし、アスタリスク3つではなく、何か別の文字である場合は、その文字を教えてください。
このことを尋ねる理由:「アスタリスク3つ」をマッチさせる場合、特別な書き方が必要になるからです。また、アスタリスク3つではなくとも、マッチさせたい文字によって、match関数の引数の書き方が変わってくるからです。)
2. 仮に↑の質問1でマッチさせたい文字列が「***」であると仮定したうえで、下記について教えてください。
タイトルに「***」を含むイベントが同じ日に複数ある場合であっても、「ゴミの日です'」(または「資源ごみの日です」)というメッセージをLINEに投稿するのは、1回だけでよいのでしょうか。
それとも、「***」を含むイベントの数だけ投稿する必要があるのでしょうか?(例:2つのイベントのタイトルに「***」が含まれていた場合は2回投稿する)
ありがとうございます。
アスタリスクは実際の文字ではありません!
また複数イベントがある場合でも1回のみ通知をしたいと思っており、またイベントがない場合にも一回通知をしたいと思っております。
よろしくお願いいたします。
上記のソースを見ると
・***にマッチする終日イベントがある場合は「ごみの日です」または「資源ごみ日です」というメッセージだけを通知する。(***にマッチしないイベントのタイトルは、通知メッセージに含まない)
・***にマッチする終日イベントが1つもない場合は、その日のすべてのイベントのタイトルを連結した文字列を通知する。
としたいように見えますが、この理解で合っていますでしょうか?
いえ、実際には***がとマッチする場合には通知をせず、***があり、かつ特定の曜日の場合には通知をするというふうにしたいのですが、「終日イベントがない場合」という条件の作り方がわからず(***がない場合は多くの場合終日イベント自体がありません)、現状のようになっています。
複雑で申し訳ありませんがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー