From 106cfe6e33e951e5611c7857f72701e1a063510e Mon Sep 17 00:00:00 2001 From: Floke Date: Sat, 21 Mar 2026 14:02:25 +0000 Subject: [PATCH] [32788f42] Fix Calendly pagination missing events bug --- fotograf-de-scraper/backend/qr_generator.py | 32 ++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/fotograf-de-scraper/backend/qr_generator.py b/fotograf-de-scraper/backend/qr_generator.py index 826003d4a..9d2a6db6a 100644 --- a/fotograf-de-scraper/backend/qr_generator.py +++ b/fotograf-de-scraper/backend/qr_generator.py @@ -51,11 +51,11 @@ def get_calendly_events_raw(api_token: str, start_time: str = None, end_time: st 'Content-Type': 'application/json' } - # Defaults: now to +180 days + # Defaults: 2024 to +2 years (broad range to ensure we capture all relevant upcoming) if not start_time: - start_time = datetime.datetime.utcnow().isoformat() + "Z" + start_time = "2024-01-01T00:00:00Z" if not end_time: - end_time = (datetime.datetime.utcnow() + datetime.timedelta(days=180)).isoformat() + "Z" + end_time = (datetime.datetime.utcnow() + datetime.timedelta(days=730)).isoformat() + "Z" # 1. Get current user info to get the user URI user_url = "https://api.calendly.com/users/me" @@ -70,22 +70,34 @@ def get_calendly_events_raw(api_token: str, start_time: str = None, end_time: st events_url = "https://api.calendly.com/scheduled_events" params = { 'user': user_uri, + 'status': 'active', 'min_start_time': start_time, 'max_start_time': end_time, - 'status': 'active' + 'count': 100 } - events_response = requests.get(events_url, headers=headers, params=params) - if not events_response.ok: - raise Exception(f"Calendly API Error: {events_response.status_code}") + all_events = [] + url = events_url + while url: + response = requests.get(url, headers=headers, params=params) + if not response.ok: + raise Exception(f"Calendly API Error: {response.status_code}") + + data = response.json() + all_events.extend(data.get('collection', [])) - events_data = events_response.json() - events = events_data['collection'] + pagination = data.get('pagination', {}) + next_page_token = pagination.get('next_page_token') + + if next_page_token: + params = {'user': user_uri, 'count': 100, 'page_token': next_page_token, 'status': 'active'} + else: + url = None raw_results = [] # 3. Get invitees - for event in events: + for event in all_events: event_name = event.get('name', '') # Filter by event type if provided if event_type_name and event_type_name.lower() not in event_name.lower():