Google Calendar APIでイベントが全件取得できなくなった時の対処方法

2 min read読了の目安(約1800字

起きたこと

次のようなコードでGoogleカレンダーからイベントを取得していました。

import 'package:googleapis/calendar/v3.dart' as v3;
...
final calId = '<カレンダーID>';
v3.CalendarApi(client).events.list(
      calId,
    );

ところが、ある時点以降に追加、編集したイベントを、このコードで取得することができなくなりました。
当然、API制限(1,000,000クエリ/日)に引っかかっているはずはなく、また取得しているイベントも10件程度だったため、理由が全く分かりませんでした。

Google Calendar API Usage Limits | Google Developers

解決方法

次のStackOverflowによると、maxResults=9999という引数を指定したところ、解決したそうです。
Google calendar API do not return events list - Stack Overflow

試しに次のようにしてみると、たしかにイベントを全て取得できるようになりました。

import 'package:googleapis/calendar/v3.dart' as v3;
...
final calId = '<カレンダーID>';
v3.CalendarApi(client).events.list(
    calId,
    maxResults: 9999,
);

maxResultsについては、公式ページには次のように書かれています。

Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.

[邦訳] 1つの結果ページで返されるイベントの最大数。結果ページのイベント数がこの値よりも少ない場合もあれば、 クエリにマッチするイベントがより多くあったとしても全くない場合もあります。不完全なページは、レスポンスのnextPageTokenフィールドが空でない場合に検出されます。デフォルトでは、値は250イベントです。ページサイズは2500イベントより大きくなることはありません。省略可能です。

maxResultsを指定する前は、

  • カレンダー上の全イベント50件
  • 取得できていたイベント10件
    といった感じで、250イベントもなかったかと思うのですが、一旦は解決できてよかったです。

参考文献

Events: list | Calendar API | Google Developers
Google calendar API do not return events list - Stack Overflow