„Nic nie znalazłem”.
Wydarzenie było, tylko w innym kalendarzu
Ciao! 🇵🇱🇮🇹
Szukałem w kalendarzu wydarzenia, które na pewno w nim było. Dostałem pusty wynik. Bez błędu, bez ostrzeżenia, po prostu „nic”.
Lecimy z tematem 🚀
Pusty wynik, który brzmiał jak odpowiedź
Moje narzędzia czytają Kalendarz i Dysk Google przez API: sprawdzają terminy, liczą pliki w folderach, szukają wydarzeń po nazwie. W ciągu dwóch tygodni trzy razy dostałem od nich odpowiedź, która wyglądała na pełną, a pełna nie była.
Objaw. Wyszukiwanie wydarzenia po nazwie zwróciło pusty wynik. Wcześniej lista wydarzeń z jednego okresu dała dokładnie 60 pozycji i jednego wydarzenia na niej brakowało. Lista plików w folderze na Dysku pokazała 5 plików. Żadne z tych zapytań nie zgłosiło błędu, każde wróciło szybko i wyglądało na kompletne.
Co się naprawdę działo. Pusty wynik wyszukiwania był prawdziwy, tylko dotyczył jednego kalendarza, głównego. Wydarzenie siedziało w kalendarzu współdzielonym, a tam wyszukiwanie w ogóle nie zaglądało. Dokładnie 60 pozycji to był limit, który sam ustawiłem na stronę wyników. W odpowiedzi leżało pole nextPageToken, czyli informacja, że jest dalszy ciąg. Na Dysku poprosiłem o 100 plików na stronę, a dostałem 5 i ten sam token. Druga strona miała 77 plików. Dokumentacja Google pisze wprost, że strona wyników może mieć mniej pozycji niż limit, a nawet żadnej, choć dalsze wyniki istnieją.
Jak to wykryć u siebie. Przy każdym zapytaniu do API, które zwraca listę, sprawdź, czy w odpowiedzi jest nextPageToken albo podobne pole w rodzaju next, cursor, hasMore. Jeśli jest, masz dopiero pierwszą stronę. Drugi sygnał: liczba wyników równa dokładnie Twojemu limitowi. Przy pustym wyniku zadaj pytanie, gdzie szukałeś. W Kalendarzu Google każde zapytanie dotyczy jednego kalendarza, a listę wszystkich daje osobne wywołanie.
Jak naprawiłem. Listy pobieram teraz w pętli, aż w odpowiedzi przestanie przychodzić nextPageToken. Dopiero wtedy liczę wyniki. Pusty wynik wyszukiwania w kalendarzu traktuję jako sygnał do sprawdzenia pozostałych kalendarzy, a nie jako odpowiedź. Wydarzenie znalazło się od razu, gdy zapytałem właściwy kalendarz.
Czego to uczy. Pusty albo krótki wynik też jest twierdzeniem, które trzeba sprawdzić. Mówi tylko tyle, że w tym miejscu i na tej stronie nic więcej nie było.
🛠️ Narzędzie
calendarList.list w Google Calendar API
To wywołanie zwraca listę wszystkich kalendarzy, które widzi Twoje konto: główny, współdzielone, subskrybowane. Używam go jako pierwszego kroku, gdy wyszukiwanie wydarzenia wraca puste, bo dopiero z tej listy wiem, w ilu miejscach w ogóle trzeba szukać. Bez niego każde zapytanie o wydarzenia dotyczy jednego kalendarza i nie daje znać, że istnieją inne. Polecam, bo to jedna dodatkowa linijka, która zamienia „nie ma” w „nie ma w żadnym z moich kalendarzy”.
https://developers.google.com/workspace/calendar/api/v3/reference/calendarList/list
🌍 Ze świata
- Events: list w dokumentacji Google Calendar API. Przy parametrze
maxResultsstoi zdanie, że strona wyników może mieć mniej pozycji niż limit, a nawet żadnej. Gdybym je przeczytał wcześniej, nie ufałbym pierwszej stronie. - Pagination issues with some endpoints. Programista szukał w odpowiedzi API Marketo flagi „są dalsze wyniki”, której nie było. Pracownik Adobe odpisał, że token pojawia się tylko przy większej liczbie wyników i trzeba pytać, dopóki przychodzi. Ta sama pułapka w zupełnie innym systemie.
- Zgłoszenie 406305173 w Google Issue Tracker. Ktoś opisuje, że API Dysku zwracało pustą listę plików razem z tokenem następnej strony i pliki na dysku współdzielonym ginęły. Pusta strona z tokenem to dokładnie to, co dostałem.
😄 Na koniec

Moja wyszukiwarka z pełnym przekonaniem odpowiedziała „nic nie ma”. Nikt jej nie powiedział, że się myli, więc dalej szukała w jednym kalendarzu.
Jeśli ktoś w Twoim otoczeniu powinien to przeczytać, prześlij mu ten numer. To najlepsza forma wsparcia.
A jeśli wolisz wesprzeć bezpośrednio: postaw mi kawę.
Cieszę się, że tu jesteś! Aby nie przegapić kolejnych wpisów i pomóc mi tworzyć więcej takich treści, dołącz do grona subskrybentów. To nic nie kosztuje.
Dołącz do Marini Brief →