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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

0回答

1339閲覧

【GAS】Googleカレンダーの予定取得→Twitter・getEventsForDayのエラーについて

NKTG_nagoya

総合スコア0

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2020/07/11 13:36

前提・実現したいこと

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);
}

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

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

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

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

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

macaron_xxx

2020/07/15 00:31

まずはコードを ``` で囲んで、見やすくするところから始めましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問