import requests import json from datetime import datetime, timezone import pytz import csv # Function to convert local time to UTC format with specific time def convert_to_utc(date_str, time_str, local_tz): dt = datetime.strptime(date_str + ' ' + time_str, '%Y-%m-%d %H:%M:%S') local_dt = local_tz.localize(dt) dt_utc = local_dt.astimezone(timezone.utc) return dt_utc.isoformat() # Replace these variables with your actual values access_token = 'YOUR-ACCESS-KEY' base_url = 'https://YOUR-INSTANCE.instructure.com/api/v1' # print("enter User ID:") user_id = 'USER-ID-NUMBER' # replace number with "input()" after testing # print("Enter start date, formatted yyy-mm-dd:") start_date = '2025-02-18' # replace date with "input()" after testing # print("Enter end date, formatted yyy-mm-dd:") end_date = '2025-02-18' # replace date with "input()" after testing local_tz = pytz.timezone('America/Chicago') start_date_utc = convert_to_utc(start_date, '00:00:00', local_tz) end_date_utc = convert_to_utc(end_date, '23:59:59', local_tz) headers = { 'Authorization': f'Bearer {access_token}' } def get_pageviews(user_id, start_date, end_date): url = f'{base_url}/users/{user_id}/page_views' params = { 'start_time': start_date, 'end_time': end_date, 'per_page': 100 } pageviews = [] while url: try: print(f"Request URL: {url}") # Debug print response = requests.get(url, headers=headers, params=params) response.raise_for_status() data = response.json() pageviews.extend(data) if 'next' in response.links: url = response.links['next']['url'] params = None # Clear params for subsequent requests else: url = None except requests.exceptions.RequestException as e: print(f"An error occurred: {e}") break return pageviews pageviews = get_pageviews(user_id, start_date_utc, end_date_utc) # Write the results to a CSV file with open('pageviews.csv', mode='w', newline='') as file: writer = csv.writer(file) # Write the header writer.writerow(['id', 'created_at', 'url', 'context_type', 'asset_type', 'user_agent']) # Write the data rows for pageview in pageviews: writer.writerow([ pageview.get('id'), pageview.get('created_at'), pageview.get('url'), pageview.get('context_type'), pageview.get('asset_type'), pageview.get('user_agent') ]) print("The results have been written to pageviews.csv")