Use APi and Python to search for Courses with Quizzes
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2024
04:25 AM
I need to produce a CSV file that lists which Courses have Quizzes.
Solved! Go to Solution.
1 Solution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2024
04:28 AM
# Checkes each course in the array course_ids[]
# to see if it has any quizzes
# it does not determine if the quizz is published or not
# it will return TRUE for both published and unpublished quizzes
import requests
import csv
import os
# beta expires April 30th 2024
API_TOKEN = '...'
#beta
BASE_URL = 'https://...instructure.com/api/v1/'
# Array of course IDs to check for quizzes
course_ids = [2486,8500,8501,8502,1525]
# Set up headers with Authorization token
headers = {
'Authorization': 'Bearer ' + API_TOKEN,
}
# Function to check if a course contains any quizzes
def course_has_quiz(course_id):
# API endpoint to list quizzes in a specific course
url = f"{BASE_URL}courses/{course_id}/quizzes"
# Make a GET request to the Canvas API
response = requests.get(url, headers=headers)
# Check if the request was successful (status code 200)
if response.status_code == 200:
quizzes = response.json()
return len(quizzes) > 0
else:
print(f"Failed to retrieve quizzes for course {course_id}. Status code: {response.status_code}")
return False
# Function to get the next version number for the CSV file
def get_next_version_number():
current_version = 0
files = os.listdir('.')
for file in files:
if file.startswith('course_quizzes_') and file.endswith('.csv'):
try:
version = int(file.split('_')[2].split('.')[0])
if version >= current_version:
current_version = version + 1
except ValueError:
pass
return current_version
# Export course data to CSV file with dynamic version number
def export_course_data_to_csv(course_data):
next_version = get_next_version_number()
csv_filename = f'course_quizzes_{next_version:03d}.csv'
with open(csv_filename, 'w', newline='') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerow(['Course ID', 'Has Quiz'])
for course_id, has_quiz in course_data.items():
csv_writer.writerow([course_id, has_quiz])
return csv_filename # Return the filename
# Main function
def main():
course_data = {}
# Iterate over course IDs and check if each course has a quiz
for course_id in course_ids:
has_quiz = course_has_quiz(course_id)
course_data[course_id] = has_quiz
print(f"Checking course {course_id}")
# Export course data to CSV file
csv_filename = export_course_data_to_csv(course_data)
print(f"Course data exported to {csv_filename}")
if __name__ == "__main__":
main()