前提・実現したいこと
https://note.com/tetsuo_623/n/n6553a5bea0fb
にあるコードをいただき、Googleカレンダーから当日、翌日および翌週の上演予定をTwitterアカウントに
送信するスクリプトを作ろうとしました。GoogleAppScript です。
その実装中に、
//カレンダーのイベント取得
function getEvents(getDate){
var cal = getCal();
var arrEvents = cal.getEventsForDay(getDate);
var strEvents ="";
var eventSize = arrEvents.length;
if(arrEvents.length === 0){
strEvents = "特にありません。";
}else{
for (var i=0; i<arrEvents.length - 1; i++){
var strTitle = arrEvents[i].getTitle();
strEvents = strEvents + strTitle + ' と ';
}
if(strEvents){
strEvents = strEvents + arrEvents[arrEvents.length - 1].getTitle() + "です。";
}else{
strEvents = arrEvents[0].getTitle();
}
}
return strEvents;
}
の
var arrEvents = cal.getEventsForDay(getDate);
において、
メソッド getEventsForDay((class)) が見つかりません。
というメッセージが出ました。その後、見直してみても、デバッグしても、なぜここの部分以下が undefined
になるのかがわかりません。
Outh認証等は確立しており、ここだけが障害となっております。
当方、初学者のため、単なるケアレスミスである可能性も大きいですが、ご教示いただければ幸いです。
=========
【実際のコード全体】 ※Twitter認証情報部分を除く
//夕方にトリガーをセット
function setTrigger() {
var triggerDay = new Date();
triggerDay.setHours(17);
triggerDay.setMinutes(30);
ScriptApp.newTrigger("main").timeBased().at(triggerDay).create();
if(triggerDay.getDay() === 0){
triggerDay.setHours(18);
triggerDay.setMinutes(30);
ScriptApp.newTrigger("mainWeek").timeBased().at(triggerDay).create();
}
}
// その日のトリガーを削除する関数(消さないと残る)
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "main") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
function deleteTriggerWeek() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "mainWeek") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
//カレンダーのIDを取得
function getCal(){
var cal = CalendarApp.getCalendarById('−−');←IDは入力済
return cal;
}
//今日の予定を取得するメインの関数
function getToday(){
var cal = getCal();
var dateNow = new Date();
var events = getEvents(dateNow);
return events;
}
//明日の予定を取得するメインの関数
function getNextday(){
var cal = getCal();
var dateNow = new Date();
var date = new Date();
date.setDate(dateNow.getDate()+1);
var events = getEvents(date);
return events;
}
//来週の予定を取得するメインの関数
function getWeek(){
var arrCals = getCal();
var date = new Date();
var dateDisplay = new Date();
var events ='';
for (var j = 1; j < 8 ; j++ ){
date.setDate(date.getDate() + 1);
dateDisplay.setMonth(date.getMonth() + 1)
events = events + dateDisplay.getMonth() + "月"+ date.getDate() + '日\n' + getEvents(date) + "\n";
}
return events;
}
//カレンダーのイベント取得
function getEvents(getDate){
var cal = getCal();
var arrEvents = cal.getEventsForDay(getDate);
var strEvents ="";
var eventSize = arrEvents.length;
if(arrEvents.length === 0){
strEvents = "今のところありません。情報が入り次第掲載します。";
}else{
for (var i=0; i<arrEvents.length - 1; i++){
var strTitle = arrEvents[i].getTitle();
strEvents = strEvents + strTitle + ' と ';
}
if(strEvents){
strEvents = strEvents + arrEvents[arrEvents.length - 1].getTitle() + "です。";
}else{
strEvents = arrEvents[0].getTitle();
}
}
return strEvents;
}
function makeTweet(){
var tweet = "@NKTG_nagoya 明日の上演は\n" +getNextday() + "\n他の上演です。詳しい予定は http://bit.ly/2EzLziq のカレンダーをご確認ください!【管理人】"
return tweet;
}
function makeTweetWeek(){
var tweet = "@NKTG_nagoya また来週は\n" +getWeek(); + "\n他の上演です。チケットのご予約は主催者のサイトをご確認のの上、お早めにどうぞ!【管理人】"
return tweet;
}
//投稿
function postTweet(tweet) {
var service = twitter.getService();
var url = 'https://api.twitter.com/1.1/statuses/update.json';
var payload = {
status: tweet
};
var response = service.fetch(url, {
method: 'post',
payload: payload
});
var result = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(result, null, 2));
}
//ツイートするメインの関数
function main() {
deleteTrigger();
var tweet = makeTweet()
postTweet(tweet);
}
function mainWeek() {
deleteTriggerWeek();
var tweet = makeTweetWeek()
postTweet(tweet);
}
あなたの回答
tips
プレビュー