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

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

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

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

5057閲覧

Google Calendar APIで、指定した期間外の予定が取得されてしまう

KazutakaShimizu

総合スコア157

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/06/04 00:19

現在Google Calendar APIを使ったChrome拡張機能を作っています。
カレンダーに入っている予定を取得するAPIを叩く際、timeMin、timeMaxというパラメーターを使ってとってくる予定の期間を絞っているのですが、指定した期間とは違う期間の予定が入ってきてしまいます。

JavaScript

1function getCalendarData(){ 2 chrome.identity.getAuthToken({interactive: true}, function(token) { 3 let init = { 4 method: 'GET', 5 async: true, 6 headers: { 7 Authorization: 'Bearer ' + token, 8 'Content-Type': 'application/json' 9 }, 10 'contentType': 'json' 11 }; 12 const params = { 13 timeMin: '2018-06-24T09:59:59.000+09:00', 14 timeMax: '2018-06-25T23:59:59.000+09:00' 15 }; 16 const queryString = Object.keys(params).map(name => `${name}=${encodeURIComponent(params[name])}`).join('&'); 17 console.log(queryString); 18 fetch( 19 'https://www.googleapis.com/calendar/v3/calendars/primary/events?' + queryString, 20 init) 21 .then((response) => response.json()) 22 .then(function(data) { 23 data.itmes.forEach(function(event) { 24 console.log(event.start); 25 console.log(event.end); 26 }); 27 }); 28 }); 29}

上記では6月24日〜25日の予定で指定しておりますが、下記のように範囲外の予定が帰ってきてしまいます。
{dateTime: "2018-06-24T20:00:00+09:00"}
{dateTime: "2018-06-24T23:30:00+09:00"}
{dateTime: "2018-06-25T13:30:00+09:00"}
{dateTime: "2018-06-25T14:30:00+09:00"}
{dateTime: "2018-05-14T11:30:00+09:00", timeZone: "Asia/Tokyo"}
{dateTime: "2018-05-14T12:30:00+09:00", timeZone: "Asia/Tokyo"}
{dateTime: "2018-06-11T11:30:00+09:00", timeZone: "Asia/Tokyo"}
{dateTime: "2018-06-11T13:00:00+09:00", timeZone: "Asia/Tokyo"}
{dateTime: "2018-02-05T09:00:00+09:00", timeZone: "Asia/Tokyo"}
{dateTime: "2018-02-05T10:00:00+09:00", timeZone: "Asia/Tokyo"}
{date: "2018-06-24"}
{date: "2018-06-25"}

どなたか問題点がわかる方、ご教授いただけないでしょうか。何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

当該の予定は一見範囲外に見えますが、繰り返しで指定された期間内にも予定が発生するもの、という可能性があります。まずはそのあたりを再確認してみましょう。

ただし、定期的な予定はRRULEという書式で書かれているので、別途でパースの必要があります。

投稿2018/06/04 00:30

maisumakun

総合スコア145123

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

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

KazutakaShimizu

2018/06/04 10:53

先ほど確認してみたのですが、おっしゃる通りくり返しの予定のようでした。 恥ずかしながらRRULE、初めて知りました。ありがとうございます。 例えばかえってくる予定の一つが start:2018-02-05T09:00:00 end:2018-02-05T10:00:00 recurrenceに入っているRRULE:"RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=MO" という感じなのですが、取得したいのは6月25日の同じ時間に入っている予定の方です。 RRULEを解析すると週次で予定が入っていることがわかるため、2月5日と同じ曜日である6月25日も同時間帯に予定が入ってるだろうということで日付の部分だけ書き換え start:2018-06-25T09:00:00 end:2018-06-25T10:00:00 という風に取得すればいいのでしょうか・・・。 もっとスマートな方法がございましたら、お手数ですがそちらもご教示いただけるとありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問