Zarządzanie okresami oceniania przy użyciu interfejsu Classroom API

Z tego przewodnika dowiesz się, jak używać punktów końcowych okresów oceniania w interfejsie Google Classroom API.

Przegląd

Okresy oceniania służą do grupowania zadań domowych, testów i projektów w określone zakresy dat. Interfejs Classroom API umożliwia deweloperom tworzenie, modyfikowanie i odczytywanie okresów oceniania w Classroom w imieniu administratorów i nauczycieli. Interfejsu Classroom API możesz też używać do określania okresów oceniania w usłudze CourseWork.

Interfejs Classroom API udostępnia 2 punkty końcowe do odczytu i zapisu informacji o okresie oceniania w kursie:

  • GetGradingPeriodSettings: umożliwia odczytanie ustawień okresu oceniania w kursie.
  • UpdateGradingPeriodSettings: umożliwia zarządzanie ustawieniami okresów oceniania w kursie poprzez dodawanie, modyfikowanie i usuwanie okresów oceniania oraz stosowanie skonfigurowanych okresów oceniania do wszystkich istniejących zadań w kursie.

Wymagania dotyczące licencji

Modyfikowanie ustawień okresu oceniania w kursie

Aby utworzyć, zmodyfikować lub usunąć okresy oceniania w kursie za pomocą punktu końcowego UpdateGradingPeriodSettings, muszą być spełnione te warunki:

Odczytywanie ustawień okresu oceniania na zajęciach

Administratorzy domeny i nauczyciele zajęć mogą czytać ustawienia okresu oceniania niezależnie od tego, jakie licencje mają przypisane. Oznacza to, że żądania do punktu końcowego GetGradingPeriodSettings są dozwolone w imieniu dowolnego administratora domeny lub nauczyciela.

Ustawianie identyfikatora okresu oceniania w CourseWork

Nauczyciele mogą uwzględnić gradingPeriodId podczas tworzenia lub aktualizowania zajęć w CourseWork za pomocą interfejsu API niezależnie od przypisanej licencji.

Sprawdzanie, czy użytkownik może konfigurować okresy oceniania

W imieniu dowolnego administratora lub nauczyciela można wysyłać żądania do punktu końcowego checkGradingPeriodsSetupEligibility. Określa, czy użytkownik może modyfikować okresy oceniania w kursie.

Wymagania wstępne

Ten przewodnik zawiera przykłady kodu w Pythonie i zakłada, że masz:

  • projekt Google Cloud, Możesz go skonfigurować, postępując zgodnie z instrukcjami w artykule Szybki start z Pythonem.
  • Do ekranu zgody OAuth w projekcie dodaliśmy te zakresy:
    • https://www.googleapis.com/auth/classroom.courses
    • https://www.googleapis.com/auth/classroom.coursework.students
  • Identyfikator kursu, w którym mają zostać zmienione okresy oceniania. Właściciel kursu musi mieć licencję Google Workspace for Education Plus.
  • Dostęp do danych logowania nauczyciela lub administratora z licencją Google Workspace for Education Plus. Aby utworzyć lub zmodyfikować projekt, musisz mieć dane logowania nauczyciela. Administratorzy nie mogą tworzyć ani modyfikować zadań, jeśli nie są nauczycielami na zajęciach.

Zarządzanie zasobem GradingPeriodSettings

Zasób GradingPeriodSettings zawiera listę poszczególnych elementów GradingPeriods oraz pole logiczne o nazwie applyToExistingCoursework.

Lista GradingPeriods zawiera wszystkie okresy oceniania w ramach kursu. W przypadku każdego okresu oceniania na liście musisz podać tytuł, datę rozpoczęcia i datę zakończenia. Każdy okres oceniania na zajęciach musi mieć unikalny tytuł, a daty rozpoczęcia i zakończenia różnych okresów oceniania nie mogą się pokrywać. Każdy okres oceniania będzie miał własny identyfikator przypisany przez interfejs API Classroom.

Wartość logiczna applyToExistingCoursework to trwałe ustawienie, które umożliwia organizowanie wcześniej utworzonych zadań w ramach okresów oceniania bez konieczności wysyłania osobnego wywołania interfejsu API w celu zmodyfikowania wartości gradingPeriodId dla każdego zadania. Jeśli jest ona ustawiona na True, Classroom automatycznie ustawia gradingPeriodId dla wszystkich istniejących zadań, jeśli courseWork.dueDate przypada w okresie pomiędzy datami rozpoczęcia i zakończenia istniejącego okresu oceniania. Jeśli w projekcie nie został ustawiony termin, Classroom użyje wartości courseWork.scheduledTime. Jeśli żadne z pól nie jest obecne lub nie ma zgodności w ramach dat rozpoczęcia i zakończenia istniejącego okresu oceniania, zadanie nie będzie powiązane z żadnym okresem oceniania.

Określanie, czy użytkownik może modyfikować ustawienia okresu oceniania w kursie

Umożliwienie tworzenia i modyfikowania okresów oceniania w Classroom jest dostępne tylko dla użytkowników z określonym rodzajem licencji, dlatego interfejs Classroom API udostępnia punkt końcowy checkGradingPeriodsSetupEligibility, który pozwala Ci aktywnie sprawdzać, czy użytkownik może wysyłać żądania do punktu końcowego UpdateGradingPeriodSettings.

Python

def check_grading_period_setup_eligibility(classroom, course_id):
    """Checks whether a user is able to create and modify grading periods in a course."""
    try:
        grading_period_eligibility_response = classroom.courses().checkGradingPeriodsSetupEligibility(
          courseId=course_id, previewVersion="V1_20240401_PREVIEW").execute()

        # Retrieve the isGradingPeriodsSetupEligible boolean from the response.
        # If the boolean is `True`, the user is able to modify grading period settings in the course.
        is_grading_periods_eligible = grading_period_eligibility_response.get("isGradingPeriodsSetupEligible")
        return is_grading_periods_eligible
    except HttpError as error:
        # Handle errors as appropriate for your application.
        print(f"An error occurred: {error}")
        return error

Dodawanie okresów oceniania

Gdy już upewnisz się, że użytkownik ma wymaganą licencję na modyfikowanie ustawień okresu oceniania w kursie, możesz zacząć wysyłać do punktu końcowego UpdateGradingPeriodSettings żądania. Wszelkie modyfikacje zasobu GradingPeriodSettings są wykonywane za pomocą punktu końcowego UpdateGradingPeriodSettings, niezależnie od tego, czy dodajesz poszczególne okresy oceniania, modyfikujesz istniejące okresy oceniania czy usuwasz okres oceniania.

Python

W poniższym przykładzie zasób gradingPeriodSettings jest modyfikowany, aby obejmował 2 okresy oceniania. Wartość logiczna applyToExistingCoursework jest ustawiona na True, co spowoduje zmodyfikowanie wartości gradingPeriodId w przypadku wszystkich istniejących zadań z kursu, które przypadają w okresie między datą rozpoczęcia a datą zakończenia jednego okresu oceniania. Pamiętaj, że updateMask zawiera oba pola. Zapisz identyfikatory poszczególnych okresów oceniania, gdy zostaną zwrócone w odpowiedzi. W razie potrzeby możesz użyć tych identyfikatorów, aby zaktualizować okresy oceniania.

def create_grading_periods(classroom, 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.courses().updateGradingPeriodSettings(
          courseId=course_id,
          updateMask='gradingPeriods,applyToExistingCoursework',
          body=body,
          previewVersion="V1_20240401_PREVIEW"
        ).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

Odczytywanie ustawień okresu oceniania

GradingPeriodSettings są odczytywane za pomocą punktu końcowego GetGradingPeriodSettings. Każdy użytkownik, niezależnie od licencji, może odczytywać ustawienia okresów oceniania w kursie.

Python

def get_grading_period_settings(classroom, course_id):
    """Read grading periods settings in a course."""
    try:
        gradingPeriodSettings = classroom.courses().getGradingPeriodSettings(
          courseId=course_id, previewVersion="V1_20240401_PREVIEW").execute()
        return gradingPeriodSettings
    except HttpError as error:
        # Handle errors as appropriate for your application.
        print(f"An error occurred: {error}")
        return error

Dodawanie do listy indywidualnego okresu oceniania

Aktualizacje dotyczące poszczególnych okresów oceniania muszą być przeprowadzane zgodnie ze wzorcem odczyt-modyfikuj-zapisz. Oznacza to, że trzeba przestrzegać pewnych zaleceń.

  1. Odczytaj listę okresów oceniania w zasobie GradingPeriodSettings za pomocą punktu końcowego GetGradingPeriodSettings.
  2. Wprowadź wybrane modyfikacje na liście okresów oceniania.
  3. Wyślij nową listę okresów oceniania w żądaniu do UpdateGradingPeriodSettings.

Dzięki temu masz pewność, że nazwy poszczególnych okresów oceniania w kursie są różne, a daty rozpoczęcia i zakończenia okresów oceniania się nie pokrywają.

Pamiętaj o tych zasadach dotyczących aktualizowania listy okresów oceniania:

  1. Okresy oceniania dodane do listy bez identyfikatora są uważane za dodatki.
  2. Okresy oceniania nieobecne na liście są uznawane za usunięcia.
  3. Okresy oceny z istniejącym identyfikatorem, ale ze zmienionymi danymi są uznawane za edycje. Niezmienione właściwości pozostają bez zmian.
  4. Okresy oceny z nowymi lub nieznanymi identyfikatorami są uznawane za błędy.

Python

Poniższy kod bazuje na przykładzie podanym w tym przewodniku. Utworzono nowy okres oceniania o nazwie „Lato”. W treści żądania parametr boolean applyToExistingCoursework ma wartość False.

W tym celu jest odczytywana bieżąca wartość GradingPeriodSettings, do listy jest dodawany nowy okres oceniania, a wartość logiczna applyToExistingCoursework jest ustawiana na False. Pamiętaj, że okresy oceniania, które zostały już zastosowane do istniejących zadań, nie zostaną usunięte. W poprzednim przykładzie okresy oceniania „Semester 1” i „Semester 2” zostały już zastosowane do istniejących zadań CourseWork i nie zostaną usunięte z CourseWork, jeśli parametr applyToExistingCoursework jest ustawiony na wartość False w kolejnych żądaniach.

def add_grading_period(classroom, 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.courses().updateGradingPeriodSettings(
          courseId=course_id, body=body, updateMask='gradingPeriods,applyToExistingCoursework',
          previewVersion="V1_20240401_PREVIEW").execute()
        return gradingPeriodSettings

    except HttpError as error:
        # Handle errors as appropriate for your application.
        print(f"An error occurred: {error}")
        return error

Wskazówki dotyczące pola logicznego applyToExistingCoursework

Pamiętaj, że wartość logiczna applyToExistingCoursework jest trwała, co oznacza, że jeśli w poprzednim wywołaniu interfejsu API została ustawiona na True i nie została zmieniona, kolejne aktualizacje okresów oceniania będą stosowane do istniejącej pracy zaliczeniowej.

Jeśli w prośbie zmienisz tę wartość logiczną z True na False, a potem na UpdateGradingPeriodSettings, tylko nowe zmiany wprowadzone w GradingPeriodSettings nie zostaną zastosowane do istniejącej pracy zaliczeniowej. Wszystkie informacje o okresie oceniania zastosowane do CourseWork w poprzednich wywołaniach interfejsu API, gdy parametr boolean miał wartość logiczną True, nie zostaną usunięte. Wartość logiczna tego ustawienia oznacza, że można przypisać istniejące projekty do skonfigurowanych okresów oceniania, ale nie można usunąć istniejących powiązań między projektami a skonfigurowanymi okresami oceniania.

Jeśli usuniesz lub zmienisz tytuł okresu oceniania, zmiany te zostaną rozpowszechnione we wszystkich istniejących komponentach zajęć, niezależnie od ustawienia parametru logicznego applyToExistingCoursework.

Aktualizowanie na liście poszczególnych okresów oceniania

Aby zmodyfikować niektóre dane powiązane z istniejącym okresem oceniania, dodaj identyfikator tego okresu do listy zmodyfikowanych danych.

Python

W tym przykładzie zostanie zmieniona data zakończenia okresu oceniania „Lato”. Pole applyToExistingCoursework zostanie ustawione na True. Ustawienie tej wartości logicznej na True spowoduje zastosowanie wszystkich skonfigurowanych okresów oceniania do istniejących zadań. W poprzednim żądaniu interfejsu API parametr boolean był ustawiony na wartość False, aby okres oceniania „Lato” nie był stosowany do istniejących zadań. Teraz, gdy to pole typu wartość logiczna ma wartość True, okres oceniania „Lato” zostanie zastosowany do wszystkich istniejących zadań CourseWork, które pasują do tego pola.

def update_existing_grading_period(classroom, 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.courses().updateGradingPeriodSettings(
          courseId=course_id, body=body, updateMask='gradingPeriods,applyToExistingCoursework',
          previewVersion="V1_20240401_PREVIEW").execute()
        return gradingPeriodSettings

    except HttpError as error:
        # Handle errors as appropriate for your application.
        print(f"An error occurred: {error}")
        return error

Usuwanie pojedynczego okresu oceniania

Aby usunąć okres oceniania, pomiń go na liście. Pamiętaj, że jeśli okres oceniania zostanie usunięty, wszystkie odniesienia do tego okresu w CourseWork zostaną również usunięte, niezależnie od ustawienia applyToExistingCoursework.

Python

W tym przykładzie w tym przewodniku pomiń okres oceniania „Lato”, aby go usunąć.

def delete_grading_period(classroom, 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.courses().updateGradingPeriodSettings(
          courseId=course_id, body=body, updateMask='gradingPeriods',
          previewVersion="V1_20240401_PREVIEW").execute()
        return gradingPeriodSettings

    except HttpError as error:
        # Handle errors as appropriate for your application.
        print(f"An error occurred: {error}")
        return error

Zarządzanie polem gradingPeriodId w CourseWork

Zasób CourseWork zawiera pole gradingPeriodId. Za pomocą punktów końcowych CourseWork możesz odczytywać i zapisywać okres oceniania powiązany z CourseWork. Połączeniem można zarządzać na 3 sposoby:

  • automatyczne powiązanie okresu oceniania na podstawie daty
  • niestandardowy powiązany okres oceniania
  • Brak powiązania z okresem oceniania

1. Powiązanie okresu oceniania na podstawie daty

Podczas tworzenia projektu możesz pozwolić Classroom na samodzielne powiązanie go z okresem oceniania. Aby to zrobić, pomiń pole gradingPeriodId w żądaniu CourseWork. Następnie określ pola dueDate lub scheduledTime w żądaniu dotyczącym pracy domowej. Jeśli dueDate mieści się w zakresie dat okresu oceniania, Classroom ustawi identyfikator tego okresu w zadaniu. Jeśli pole dueDate nie zostanie określone, Classroom określi wartość gradingPeriodId na podstawie pola scheduledTime. Jeśli żadne z pól nie zostanie określone lub nie będzie zgodności zakresu dat okresu oceniania, w zadaniu nie zostanie ustawiona wartość gradingPeriodId.

2. Niestandardowy powiązany okres oceniania

Jeśli chcesz powiązać projekt edukacyjny z innym okresem oceniania niż ten, który jest zgodny z dueDate lub scheduledTime, możesz ręcznie ustawić pole gradingPeriodId podczas tworzenia lub aktualizowania projektu edukacyjnego. Jeśli ustawisz gradingPeriodId ręcznie, Classroom nie będzie automatycznie przypisywać okresów oceniania na podstawie dat.

3. Brak powiązania z okresem oceniania

Jeśli nie chcesz, aby CourseWork był powiązany z żadnym okresem oceniania, ustaw pole gradingPeriodId w żądaniu CourseWork na pusty ciąg znaków (gradingPeriodId: "").

Co się stanie z identyfikatorem okresu oceniania, jeśli data upływu terminu zostanie zmieniona?

Jeśli aktualizujesz pole CourseWork dueDate i chcesz zachować niestandardowe powiązanie lub brak powiązania z okresem oceniania, w treści updateMask i żądania musisz uwzględnić wartości dueDate i gradingPeriodId. Spowoduje to, że Classroom nie zastąpi gradingPeriodId okresem oceniania odpowiadającym nowej dueDate.

Python

body = {
  "dueDate": {
    "month": 6,
    "day": 10,
    "year": 2024
  },
  "dueTime": {
    "hours": 7
  },
  "gradingPeriodId": "<INSERT-GRADING-PERIOD-ID-OR-EMPTY-STRING>"
}
courseWork = classroom.courses().courseWork().patch(
  courseId=course_id, id=coursework_id, body=body,
  updateMask='dueDate,dueTime,gradingPeriodId', # include the gradingPeriodId field in the updateMask
  previewVersion="V1_20240401_PREVIEW").execute()