In diesem Leitfaden wird erläutert, wie Sie die Endpunkte für Benotungszeiträume in der Google Classroom API verwenden.
Übersicht
Benotungszeiträume werden erstellt, um Hausaufgaben, Tests und Projekte in bestimmten Zeiträumen zu organisieren. Mit der Classroom API können Entwickler im Namen von Administratoren und Lehrkräften Benotungszeiträume in Classroom erstellen, ändern und lesen. Sie können mit der Classroom API auch Benotungszeiträume für Kursaufgaben festlegen.
Die Classroom API bietet zwei Endpunkte zum Lesen und Schreiben von Informationen zu Benotungszeiträumen in einem Kurs:
GetGradingPeriodSettings: Hiermit können Sie die Einstellungen für Benotungszeiträume in einem Kurs lesen.UpdateGradingPeriodSettings: Hiermit können Sie die Einstellungen für Benotungszeiträume in einem Kurs verwalten, indem Sie Benotungszeiträume hinzufügen, ändern und löschen und die konfigurierten Benotungszeiträume auf alle vorhandenen Kursaufgaben anwenden.
Lizenzierungs- und Teilnahmevoraussetzungen
Einstellungen für Benotungszeiträume in einem Kurs ändern
Damit Sie mit dem Endpunkt UpdateGradingPeriodSettings Benotungszeiträume in einem Kurs erstellen, ändern oder löschen können, müssen die folgenden Bedingungen erfüllt sein:
- Der Nutzer, der die Anfrage stellt, muss eine Lehrkraft im Kurs oder ein Administrator sein.
- Dem Nutzer, der die Anfrage stellt, ist eine Google Workspace for Education Plus Lizenz zugewiesen.
- Dem Kursinhaber ist eine Google Workspace for Education Plus Lizenz zugewiesen.
Einstellungen für Benotungszeiträume in einem Kurs lesen
Domainadministratoren und Lehrkräfte eines Kurses können die Einstellungen für Benotungszeiträume lesen, unabhängig davon, welche Lizenz ihnen zugewiesen ist. Das bedeutet, dass Anfragen an den Endpunkt GetGradingPeriodSettings im Namen eines beliebigen Domainadministrators oder einer beliebigen Lehrkraft zulässig sind.
Benotungszeitraum-ID für Kursaufgaben festlegen
Lehrkräfte eines Kurses können die gradingPeriodId beim Erstellen oder Aktualisieren von Kursaufgaben mit der API einbeziehen, unabhängig davon, welche Lizenz ihnen zugewiesen ist.
Berechtigung eines Nutzers zum Einrichten von Benotungszeiträumen prüfen
Anfragen an den Endourcenpunkt userProfiles.checkUserCapability sind zulässig
im Namen eines beliebigen Administrators oder einer beliebigen Lehrkraft. So können Sie feststellen, ob der Nutzer Benotungszeiträume ändern kann.
Vorbereitung
Dieser Leitfaden enthält Codebeispiele in Python. Folgendes wird vorausgesetzt:
- Ein Google Cloud-Projekt. Sie können eines gemäß der Anleitung in der Python-Kurzanleitung einrichten.
- Die folgenden Bereiche wurden dem OAuth-Zustimmungsbildschirm Ihres Projekts hinzugefügt:
https://www.googleapis.com/auth/classroom.courseshttps://www.googleapis.com/auth/classroom.coursework.students
- Eine ID eines Kurses, in dem Benotungszeiträume geändert werden sollen. Der Kurs inhaber muss eine Google Workspace for Education Plus-Lizenz haben.
- Zugriff auf die Anmeldedaten einer Lehrkraft oder eines Administrators mit einer Google Workspace for Education Plus-Lizenz. Sie benötigen die Anmeldedaten einer Lehrkraft, um Kursaufgaben zu erstellen oder zu ändern. Administratoren können keine Kursaufgaben erstellen oder ändern, wenn sie keine Lehrkraft im Kurs sind.
Ressource GradingPeriodSettings verwalten
Die Ressource GradingPeriodSettings enthält eine Liste einzelner GradingPeriods und ein boolesches Feld namens applyToExistingCoursework.
Jeder einzelne GradingPeriods in der Liste muss die folgenden Anforderungen erfüllen:
- Titel, Startdatum und Enddatum:Jeder Benotungszeitraum muss einen Titel, ein Startdatum und ein Enddatum haben.
- Eindeutiger Titel:Jeder Benotungszeitraum muss einen eindeutigen Titel haben, der mit keinem anderen Benotungszeitraum im Kurs übereinstimmt.
- Nicht überlappende Daten:Die Start- und Enddaten der einzelnen Benotungszeiträume dürfen sich nicht mit denen anderer Benotungszeiträume im Kurs überschneiden.
- Chronologische Reihenfolge:Benotungszeiträume müssen chronologisch nach Start- und Enddatum sortiert sein.
Jedem Benotungszeitraum wird bei der Erstellung eine von der Classroom API zugewiesene ID zugewiesen.
Das boolesche Feld applyToExistingCoursework ist eine dauerhafte Einstellung, mit der Sie zuvor erstellte Kursaufgaben in Benotungszeiträume organisieren können, ohne einen separaten API-Aufruf ausführen zu müssen, um die gradingPeriodId für jede Kursaufgabe zu ändern. Wenn es auf True gesetzt ist, legt Classroom automatisch die gradingPeriodId für alle vorhandenen Kursaufgaben fest, wenn das courseWork.dueDate zwischen dem Start- und Enddatum eines vorhandenen Benotungszeitraums liegt. Wenn für die Kursaufgabe kein Abgabetermin festgelegt wurde, verwendet Classroom courseWork.scheduledTime. Wenn keines der Felder vorhanden ist oder es keine Übereinstimmung mit dem Start- und Enddatum eines vorhandenen Benotungszeitraums gibt, wird die Kursaufgabe keinem Benotungszeitraum zugeordnet.
Feststellen, ob ein Nutzer die Einstellungen für Benotungszeiträume in einem Kurs ändern kann
Die Classroom API bietet den Endpunkt userProfiles.checkUserCapability, mit dem Sie proaktiv feststellen können, ob ein Nutzer Anfragen an den Endpunkt UpdateGradingPeriodSettings stellen kann.
Python
def check_grading_periods_update_capability(classroom_service, course_id):
"""Checks whether a user is able to create and modify grading periods in a course."""
try:
capability = classroom_service.userProfiles().checkUserCapability(
userId="me",
capability="UPDATE_GRADING_PERIOD_SETTINGS",
# Required while the checkUserCapability method is available in the Developer Preview Program.
previewVersion="V1_20240930_PREVIEW"
).execute()
# Retrieve the `allowed` boolean from the response.
if capability.get("allowed"):
print("User is allowed to update grading period settings in the course.")
else:
print("User is not allowed to update grading period settings in the course.")
except HttpError as error:
# Handle errors as appropriate for your application.
print(f"An error occurred: {error}")
return error
Benotungszeiträume hinzufügen
Nachdem Sie sich vergewissert haben, dass der Nutzer berechtigt ist, die Einstellungen für Benotungszeiträume in einem Kurs zu ändern, können Sie Anfragen an den Endpunkt UpdateGradingPeriodSettings senden. Alle Änderungen an der
GradingPeriodSettings Ressource werden über den
UpdateGradingPeriodSettings Endpunkt vorgenommen, unabhängig davon, ob Sie einzelne Benotungs
zeiträume hinzufügen, vorhandene Benotungszeiträume ändern oder einen Benotungszeitraum löschen.
Python
Im folgenden Beispiel wird die Ressource gradingPeriodSettings so geändert, dass sie zwei Benotungszeiträume enthält. Das boolesche Feld applyToExistingCoursework ist auf True gesetzt. Dadurch wird die gradingPeriodId für alle vorhandenen Kursaufgaben geändert, die zwischen dem Start- und Enddatum eines Benotungszeitraums liegen. Beachten Sie, dass updateMask beide Felder enthält. Speichern Sie die IDs für die einzelnen Benotungszeiträume, sobald sie in der Antwort zurückgegeben werden. Sie benötigen diese IDs, um die Benotungszeiträume bei Bedarf zu aktualisieren.
def create_grading_periods(classroom_service, course_id):
"""
Create grading periods in a course and apply the grading periods
to existing courseWork.
"""
try:
body = {
"gradingPeriods": [
{
"title": "First Semester",
"start_date": {
"day": 1,
"month": 9,
"year": 2023
},
"end_date": {
"day": 15,
"month": 12,
"year": 2023
}
},
{
"title": "Second Semester",
"start_date": {
"day": 15,
"month": 1,
"year": 2024
},
"end_date": {
"day": 31,
"month": 5,
"year": 2024
}
}
],
"applyToExistingCoursework": True
}
gradingPeriodSettingsResponse = classroom_service.courses().updateGradingPeriodSettings(
courseId=course_id,
updateMask='gradingPeriods,applyToExistingCoursework',
body=body
).execute();
print(f"Grading period settings updated.")
return gradingPeriodSettingsResponse
except HttpError as error:
# Handle errors as appropriate for your application.
print(f"An error occurred: {error}")
return error
Einstellungen für Benotungszeiträume lesen
GradingPeriodSettings werden mit dem GetGradingPeriodSettings Endpunkt gelesen.
Alle Nutzer können die Einstellungen für Benotungszeiträume in einem Kurs lesen, unabhängig von der Lizenz.
Python
def get_grading_period_settings(classroom_service, course_id):
"""Read grading periods settings in a course."""
try:
gradingPeriodSettings = classroom_service.courses().getGradingPeriodSettings(
courseId=course_id).execute()
return gradingPeriodSettings
except HttpError as error:
# Handle errors as appropriate for your application.
print(f"An error occurred: {error}")
return error
Der Liste einen einzelnen Benotungszeitraum hinzufügen
Aktualisierungen an einem einzelnen Benotungszeitraum müssen nach dem Muster „Lesen – Ändern – Schreiben“ erfolgen. Das bedeutet, dass Sie Folgendes tun sollten:
- Lesen Sie die Liste der Benotungszeiträume in der Ressource
GradingPeriodSettingsmit dem EndpunktGetGradingPeriodSettings. - Nehmen Sie die gewünschten Änderungen an der Liste der Benotungszeiträume vor.
- Senden Sie die neue Liste der Benotungszeiträume in einer Anfrage an
UpdateGradingPeriodSettings.
Mit diesem Muster können Sie sicherstellen, dass die Titel der einzelnen Benotungszeiträume in einem Kurs eindeutig sind und dass es keine Überschneidungen zwischen den Start- und Enddaten der Benotungszeiträume gibt.
Beachten Sie die folgenden Regeln zum Aktualisieren der Liste der Benotungszeiträume:
- Benotungszeiträume, die ohne ID zur Liste hinzugefügt werden, gelten als Hinzufügungen.
- Benotungszeiträume, die in der Liste fehlen , gelten als Löschungen.
- Benotungszeiträume mit einer vorhandenen ID , aber geänderten Daten gelten als Änderungen. Unveränderte Attribute bleiben unverändert.
- Benotungszeiträume mit neuen oder unbekannten IDs gelten als Fehler.
Python
Der folgende Code baut auf dem Beispiel in diesem Leitfaden auf. Ein neuer Benotungszeitraum mit dem Titel „Sommer“ wird erstellt. Das boolesche Feld applyToExistingCoursework ist im Anfragetext auf False gesetzt.
Dazu wird die aktuelle GradingPeriodSettings gelesen, der Liste wird ein neuer Benotungszeitraum hinzugefügt und das boolesche Feld applyToExistingCoursework wird auf False gesetzt. Benotungszeiträume, die bereits auf vorhandene Kursaufgaben angewendet wurden, werden nicht entfernt. Im vorherigen Beispiel wurden die Benotungszeiträume „Semester 1“ und „Semester 2“ bereits auf vorhandene Kursaufgaben angewendet und werden nicht aus den Kursaufgaben entfernt, wenn applyToExistingCoursework in nachfolgenden Anfragen auf „False“ gesetzt ist.
def add_grading_period(classroom_service, course_id):
"""
A new grading period is added to the list, but it is not applied to existing courseWork.
"""
try:
# Use the `GetGradingPeriodSettings` endpoint to retrieve the existing
# grading period IDs. You will need to include these IDs in the request
# body to make sure existing grading periods aren't deleted.
body = {
"gradingPeriods": [
{
# Specify the ID to make sure the grading period is not deleted.
"id": "FIRST_SEMESTER_GRADING_PERIOD_ID",
"title": "First Semester",
"start_date": {
"day": 1,
"month": 9,
"year": 2023
},
"end_date": {
"day": 15,
"month": 12,
"year": 2023
}
},
{
# Specify the ID to make sure the grading period is not deleted.
"id": "SECOND_SEMESTER_GRADING_PERIOD_ID",
"title": "Second Semester",
"start_date": {
"day": 15,
"month": 1,
"year": 2024
},
"end_date": {
"day": 31,
"month": 5,
"year": 2024
}
},
{
# Does not include an ID because this grading period is an addition.
"title": "Summer",
"start_date": {
"day": 1,
"month": 6,
"year": 2024
},
"end_date": {
"day": 31,
"month": 8,
"year": 2024
}
}
],
"applyToExistingCoursework": False
}
gradingPeriodSettings = classroom_service.courses().updateGradingPeriodSettings(
courseId=course_id, body=body, updateMask='gradingPeriods,applyToExistingCoursework').execute()
return gradingPeriodSettings
except HttpError as error:
# Handle errors as appropriate for your application.
print(f"An error occurred: {error}")
return error
Hilfreiche Hinweise zum booleschen Feld applyToExistingCoursework
Das boolesche Feld applyToExistingCoursework ist dauerhaft . Wenn es also in einem vorherigen API-Aufruf auf True gesetzt und nicht geändert wurde, werden nachfolgende Aktualisierungen an Benotungszeiträumen auf vorhandene Kursaufgaben angewendet.
Wenn Sie diesen booleschen Wert in einer Anfrage
an UpdateGradingPeriodSettings von True in False ändern, werden nur die neuen Änderungen, die Sie an
GradingPeriodSettings vornehmen, nicht auf vorhandene Kursaufgaben angewendet. Alle Informationen zu Benotungszeiträumen, die in vorherigen API-Aufrufen auf Kursaufgaben angewendet wurden, als das boolesche Feld auf True gesetzt war, werden nicht entfernt. Sie können sich diese boolesche Einstellung so vorstellen, dass sie die Zuordnung vorhandener Kursaufgaben zu Ihren konfigurierten Benotungszeiträumen unterstützt, aber keine vorhandenen Zuordnungen zwischen Kursaufgaben und konfigurierten Benotungszeiträumen entfernt.
Wenn Sie den Titel eines Benotungszeitraums löschen oder ändern, werden diese Änderungen auf alle vorhandenen Kursaufgaben übertragen, unabhängig von der Einstellung des booleschen Felds applyToExistingCoursework.
Einen einzelnen Benotungszeitraum in der Liste aktualisieren
Wenn Sie einige Daten ändern möchten, die mit einem vorhandenen Benotungszeitraum verknüpft sind, fügen Sie die ID des vorhandenen Benotungszeitraums mit den geänderten Daten in die Liste ein.
Python
In diesem Beispiel wird das Enddatum des Benotungszeitraums „Sommer“ geändert. Das Feld applyToExistingCoursework wird auf True gesetzt. Wenn Sie dieses boolesche Feld auf True setzen, werden alle konfigurierten Benotungszeiträume auf vorhandene Kursaufgaben angewendet. In der vorherigen API-Anfrage war das boolesche Feld auf False gesetzt, sodass der Benotungszeitraum „Sommer“ nicht auf vorhandene Kursaufgaben angewendet wurde. Da dieses boolesche Feld jetzt auf True gesetzt ist, wird der Benotungszeitraum „Sommer“ auf alle vorhandenen Kursaufgaben angewendet, die übereinstimmen.
def update_existing_grading_period(classroom_service, course_id):
"""
An existing grading period is updated.
"""
try:
# Use the `GetGradingPeriodSettings` endpoint to retrieve the existing
# grading period IDs. You will need to include these IDs in the request
# body to make sure existing grading periods aren't deleted.
body = {
"gradingPeriods": [
{
"id": "FIRST_SEMESTER_GRADING_PERIOD_ID",
"title": "First Semester",
"start_date": {
"day": 1,
"month": 9,
"year": 2023
},
"end_date": {
"day": 15,
"month": 12,
"year": 2023
}
},
{
"id": "SECOND_SEMESTER_GRADING_PERIOD_ID",
"title": "Second Semester",
"start_date": {
"day": 15,
"month": 1,
"year": 2024
},
"end_date": {
"day": 31,
"month": 5,
"year": 2024
}
},
{
# The end date for this grading period will be modified from August 31, 2024 to September 10, 2024.
# Include the grading period ID in the request along with the new data.
"id": "SUMMER_GRADING_PERIOD_ID",
"title": "Summer",
"start_date": {
"day": 1,
"month": 6,
"year": 2024
},
"end_date": {
"day": 10,
"month": 9,
"year": 2024
}
}
],
"applyToExistingCoursework": True
}
gradingPeriodSettings = classroom_service.courses().updateGradingPeriodSettings(
courseId=course_id, body=body, updateMask='gradingPeriods,applyToExistingCoursework').execute()
return gradingPeriodSettings
except HttpError as error:
# Handle errors as appropriate for your application.
print(f"An error occurred: {error}")
return error
Einen einzelnen Benotungszeitraum löschen
Wenn Sie einen Benotungszeitraum löschen möchten, lassen Sie ihn in der Liste weg. Wenn ein Benotungszeitraum gelöscht wird, werden auch alle Verweise auf den Benotungszeitraum in den Kursaufgaben gelöscht, unabhängig von der Einstellung applyToExistingCoursework.
Python
Wenn Sie das Beispiel in diesem Leitfaden fortsetzen möchten, lassen Sie den Benotungszeitraum „Sommer“ weg, um ihn zu löschen.
def delete_grading_period(classroom_service, course_id):
"""
An existing grading period is deleted.
"""
try:
body = {
"gradingPeriods": [
{
"id": "FIRST_SEMESTER_GRADING_PERIOD_ID",
"title": "First Semester",
"start_date": {
"day": 1,
"month": 9,
"year": 2023
},
"end_date": {
"day": 15,
"month": 12,
"year": 2023
}
},
{
"id": "SECOND_SEMESTER_GRADING_PERIOD_ID",
"title": "Second Semester",
"start_date": {
"day": 15,
"month": 1,
"year": 2024
},
"end_date": {
"day": 31,
"month": 5,
"year": 2024
}
}
]
}
gradingPeriodSettings = classroom_service.courses().updateGradingPeriodSettings(
courseId=course_id, body=body, updateMask='gradingPeriods').execute()
return gradingPeriodSettings
except HttpError as error:
# Handle errors as appropriate for your application.
print(f"An error occurred: {error}")
return error
Feld gradingPeriodId für Kursaufgaben verwalten
Die Ressource CourseWork enthält ein Feld gradingPeriodId. Sie können CourseWork-Endpunkte verwenden, um den Benotungszeitraum zu lesen und zu schreiben, der mit einer Kursaufgabe verknüpft ist. Es gibt drei Möglichkeiten, diese Zuordnung zu verwalten:
- Automatische datumsbasierte Zuordnung von Benotungszeiträumen
- Benutzerdefinierter zugeordneter Benotungszeitraum
- Keine Zuordnung von Benotungszeiträumen
1. Datumsbasierte Zuordnung von Benotungszeiträumen
Beim Erstellen von Kursaufgaben können Sie Classroom die Zuordnung von Benotungszeiträumen für Sie übernehmen lassen. Lassen Sie dazu das Feld gradingPeriodId in der CourseWork-Anfrage weg. Geben Sie dann die Felder dueDate oder scheduledTime in der CourseWork-Anfrage an. Wenn das dueDate in den Datumsbereich eines vorhandenen Benotungszeitraums fällt, legt Classroom diese Benotungszeitraum-ID für die Kursaufgabe fest. Wenn das Feld dueDate nicht angegeben ist, bestimmt Classroom die gradingPeriodId anhand des Felds scheduledTime. Wenn keines der Felder angegeben ist oder es keine Übereinstimmung mit dem Datumsbereich eines Benotungszeitraums gibt, wird für die Kursaufgabe keine gradingPeriodId festgelegt.
2. Benutzerdefinierter zugeordneter Benotungszeitraum
Wenn Sie die Kursaufgabe einem anderen Benotungszeitraum zuordnen möchten als dem, der mit dem dueDate oder scheduledTime übereinstimmt, können Sie das Feld gradingPeriodId beim Erstellen oder Aktualisieren von Kursaufgaben manuell festlegen. Wenn Sie die gradingPeriodId manuell festlegen, führt Classroom keine automatische datumsbasierte Zuordnung von Benotungszeiträumen durch.
3. Keine Zuordnung von Benotungszeiträumen
Wenn Sie nicht möchten, dass die Kursaufgabe einem Benotungszeitraum zugeordnet wird, setzen Sie das gradingPeriodId Feld in der CourseWork-Anfrage auf einen leeren
String (gradingPeriodId: "").
Wenn Sie die Programmiersprache Go verwenden und keinen Benotungszeitraum festlegen möchten, sollten Sie auch das Feld ForceSendFields in den Anfragetext aufnehmen. In der Go-Clientbibliothek werden Standardwerte aufgrund des Feld-Tags omitempty für alle Felder aus API-Anfragen weggelassen.
Das Feld ForceSendFields umgeht dies und sendet den leeren String, um anzugeben, dass für diese Kursaufgabe kein Benotungszeitraum festgelegt werden soll. Weitere Informationen finden Sie in der
Dokumentation zur Google APIs Go-Clientbibliothek.
Ok
courseWork := &classroom.CourseWork{
Title: "Homework questions",
WorkType: "ASSIGNMENT",
State: "DRAFT",
// ...other CourseWork fields...
GradingPeriodId: "",
ForceSendFields: []string{"GradingPeriodId"},
}
Was passiert mit der Benotungszeitraum-ID, wenn das Abgabetermin aktualisiert wird?
Wenn Sie das Feld dueDate der Kursaufgabe aktualisieren und eine benutzerdefinierte oder keine Zuordnung von Benotungszeiträumen beibehalten möchten, sollten Sie dueDate und gradingPeriodId in updateMask und im Anfragetext angeben. Dadurch wird Classroom angewiesen, die gradingPeriodId nicht mit dem Benotungszeitraum zu überschreiben, der mit dem neuen dueDate übereinstimmt.
Python
body = {
"dueDate": {
"month": 6,
"day": 10,
"year": 2024
},
"dueTime": {
"hours": 7
},
"gradingPeriodId": "<INSERT-GRADING-PERIOD-ID-OR-EMPTY-STRING>"
}
courseWork = classroom_service.courses().courseWork().patch(
courseId=course_id, id=coursework_id, body=body,
updateMask='dueDate,dueTime,gradingPeriodId') # include the gradingPeriodId field in the updateMask
.execute()