Panduan ini menjelaskan cara menggunakan endpoint periode penilaian di Google Classroom API.
Ringkasan
Periode penilaian dibuat untuk mengatur pekerjaan rumah, kuis, dan project ke dalam rentang tanggal tertentu. Classroom API memungkinkan developer membuat, mengubah, dan membaca periode penilaian di Classroom atas nama administrator dan pengajar. Anda juga dapat menggunakan Classroom API untuk menetapkan periode penilaian di CourseWork.
Classroom API menawarkan dua endpoint untuk membaca dan menulis informasi periode penilaian dalam kursus:
GetGradingPeriodSettings
: Memungkinkan Anda membaca setelan periode penilaian dalam kursus.UpdateGradingPeriodSettings
: Memungkinkan Anda mengelola setelan periode penilaian dalam kursus dengan menambahkan, mengubah, dan menghapus periode penilaian, serta menerapkan periode penilaian yang dikonfigurasi ke semua Tugas Kursus yang ada.
Persyaratan pemberian lisensi
Mengubah setelan periode penilaian di kursus
Untuk membuat, mengubah, atau menghapus periode penilaian dalam kursus menggunakan
endpoint UpdateGradingPeriodSettings
, kondisi berikut harus dipenuhi:
- Pengguna yang membuat permintaan memiliki lisensi Google Workspace for Education Plus yang ditetapkan untuknya.
- Pemilik kursus memiliki lisensi Google Workspace for Education Plus yang ditetapkan untuknya.
Membaca setelan periode penilaian di kursus
Administrator domain dan pengajar kursus dapat membaca setelan periode penilaian, apa pun lisensi yang ditetapkan untuk mereka. Artinya, permintaan
ke endpoint GetGradingPeriodSettings
diizinkan atas nama administrator
atau pengajar domain mana pun.
Menetapkan ID periode penilaian di CourseWork
Pengajar kursus dapat menyertakan gradingPeriodId
saat membuat atau memperbarui
CourseWork menggunakan API, terlepas dari lisensi yang ditetapkan.
Memeriksa kelayakan pengguna untuk menyiapkan periode penilaian
Permintaan ke endpoint checkGradingPeriodsSetupEligibility
diizinkan atas nama administrator atau pengajar. Gunakan ini untuk menentukan apakah
pengguna dapat mengubah periode penilaian dalam kursus.
Prasyarat
Panduan ini memberikan contoh kode dalam Python, dan mengasumsikan bahwa Anda memiliki:
- Project Google Cloud. Anda dapat menyiapkannya dengan mengikuti petunjuk di panduan memulai Python.
- Menambahkan cakupan berikut ke layar izin OAuth project Anda:
https://www.googleapis.com/auth/classroom.courses
https://www.googleapis.com/auth/classroom.coursework.students
- ID kursus yang periode penilaiannya harus diubah. Pemilik kursus harus memiliki lisensi Google Workspace for Education Plus.
- Akses ke kredensial pengajar atau administrator dengan lisensi Google Workspace for Education Plus. Anda memerlukan kredensial pengajar untuk membuat atau mengubah Tugas Kursus. Administrator tidak dapat membuat atau mengubah CourseWork jika bukan pengajar di kursus.
Mengelola resource GradingPeriodSettings
Resource GradingPeriodSettings
mencakup daftar setiap
GradingPeriods
dan kolom boolean yang disebut applyToExistingCoursework
.
Daftar GradingPeriods
mewakili semua periode penilaian individual dalam kursus. Anda harus menentukan judul, tanggal mulai, dan tanggal akhir untuk setiap
periode penilaian dalam daftar. Setiap periode penilaian dalam kursus harus memiliki judul yang unik, dan tanggal mulai dan akhir periode penilaian yang berbeda tidak boleh tumpang-tindih. Setiap periode penilaian akan memiliki ID yang ditetapkan
Classroom API.
Boolean applyToExistingCoursework
adalah setelan yang dipertahankan yang memungkinkan Anda
mengatur CourseWork yang dibuat sebelumnya ke dalam periode penilaian tanpa harus
melakukan panggilan API terpisah untuk mengubah gradingPeriodId
untuk setiap CourseWork. Jika
ditetapkan ke True
, Classroom akan otomatis
menetapkan gradingPeriodId
di semua Tugas yang ada jika
courseWork.dueDate
berada dalam tanggal mulai dan
akhir periode penilaian yang ada. Jika tidak ada batas waktu yang ditetapkan di CourseWork, Classroom
akan menggunakan courseWork.scheduledTime
. Jika tidak ada kolom atau
tidak ada kecocokan dalam tanggal mulai dan akhir periode penilaian yang ada, Materi Kursus tidak akan dikaitkan dengan periode penilaian apa pun.
Menentukan apakah pengguna dapat mengubah setelan periode penilaian di kursus
Karena kemampuan untuk membuat dan mengubah periode penilaian di
Classroom hanya tersedia untuk pengguna dengan lisensi tertentu,
Classroom API
menyediakan endpoint checkGradingPeriodsSetupEligibility
untuk membantu Anda
secara proaktif menentukan apakah pengguna dapat membuat permintaan ke
endpoint 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
Menambahkan periode penilaian
Setelah yakin bahwa pengguna memiliki lisensi yang diperlukan untuk mengubah setelan periode penilaian dalam kursus, Anda dapat mulai mengeluarkan permintaan ke endpoint UpdateGradingPeriodSettings
. Setiap modifikasi pada
resource GradingPeriodSettings
dilakukan menggunakan
endpoint UpdateGradingPeriodSettings
, baik Anda menambahkan periode penilaian
individual, mengubah periode penilaian yang ada, maupun menghapus periode penilaian.
Python
Dalam contoh berikut, resource gradingPeriodSettings
diubah
untuk menyertakan dua periode penilaian. Boolean applyToExistingCoursework
ditetapkan ke True
yang akan mengubah gradingPeriodId
pada Tugas Kuliah
yang ada yang berada di antara tanggal mulai dan tanggal akhir satu periode penilaian. Perhatikan bahwa updateMask
menyertakan kedua kolom tersebut. Simpan ID untuk setiap
periode penilaian setelah ditampilkan dalam respons. Anda harus menggunakan
ID ini untuk memperbarui periode penilaian jika diperlukan.
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
Membaca setelan periode penilaian
GradingPeriodSettings
dibaca menggunakan endpoint GetGradingPeriodSettings
.
Semua pengguna, terlepas dari lisensinya, dapat membaca setelan periode penilaian di kursus.
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
Menambahkan masing-masing periode penilaian ke daftar
Pembaruan pada setiap periode penilaian harus dilakukan dengan mengikuti pola baca-ubah-tulis. Artinya, Anda harus:
- Baca daftar periode penilaian dalam resource
GradingPeriodSettings
menggunakan endpointGetGradingPeriodSettings
. - Lakukan modifikasi yang dipilih pada daftar periode penilaian.
- Kirim daftar periode penilaian baru dalam permintaan ke
UpdateGradingPeriodSettings
.
Pola ini akan membantu Anda memastikan bahwa setiap judul periode penilaian dalam kursus berbeda dan tidak ada tumpang-tindih antara tanggal mulai dan akhir periode penilaian.
Perhatikan aturan berikut tentang memperbarui daftar periode penilaian:
- Periode penilaian yang ditambahkan ke daftar tanpa ID dianggap sebagai tambahan.
- Periode penilaian yang tidak ada dalam daftar dianggap sebagai penghapusan.
- Periode penilaian dengan ID yang ada, tetapi data yang diubah dianggap sebagai pengeditan. Properti yang tidak diubah akan dibiarkan apa adanya.
- Periode penilaian dengan ID baru atau tidak dikenal dianggap sebagai error.
Python
Kode berikut akan dibuat berdasarkan contoh dalam panduan ini. Periode penilaian baru
dibuat dengan judul, "Musim Panas". Boolean applyToExistingCoursework
ditetapkan ke False
dalam isi permintaan.
Untuk melakukannya, GradingPeriodSettings
saat ini dibaca, periode penilaian
baru ditambahkan ke daftar, dan boolean applyToExistingCoursework
ditetapkan ke False
. Perhatikan bahwa periode penilaian yang telah diterapkan ke Tugas Kuliah yang ada tidak akan dihapus. Pada contoh sebelumnya,
periode penilaian "Semester 1" dan "Semester 2" telah diterapkan ke
CourseWork yang ada dan tidak akan dihapus dari CourseWork jika
applyToExistingCoursework
ditetapkan ke False dalam permintaan berikutnya.
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
Petunjuk bermanfaat tentang kolom boolean applyToExistingCoursework
Perlu diingat bahwa boolean applyToExistingCoursework
dipertahankan, yang berarti bahwa jika boolean ditetapkan ke True
dalam panggilan API
sebelumnya dan tidak diubah, pembaruan berikutnya pada periode penilaian akan diterapkan ke
CourseWork yang ada.
Perhatikan bahwa jika Anda mengubah nilai boolean ini dari True
menjadi False
dalam permintaan
ke UpdateGradingPeriodSettings
, hanya perubahan baru yang Anda buat pada
GradingPeriodSettings
yang tidak akan diterapkan ke CourseWork yang ada. Semua informasi periode penilaian
yang diterapkan ke CourseWork dalam panggilan API sebelumnya saat boolean
ditetapkan ke True
tidak akan dihapus. Cara yang berguna untuk memikirkan setelan boolean ini adalah bahwa setelan ini mendukung pengaitan CourseWork yang ada dengan periode penilaian yang Anda konfigurasikan, tetapi tidak mendukung penghapusan pengaitan yang ada antara CourseWork dan periode penilaian yang dikonfigurasi.
Jika Anda menghapus atau mengubah judul periode penilaian, perubahan tersebut akan
disebarkan ke semua CourseWork yang ada, terlepas dari setelan
boolean applyToExistingCoursework
.
Memperbarui setiap periode penilaian dalam daftar
Untuk mengubah beberapa data yang terkait dengan periode penilaian yang ada, sertakan ID periode penilaian yang ada dalam daftar dengan data yang diubah.
Python
Dalam contoh ini, tanggal akhir periode penilaian "Musim Panas" akan
diubah. Kolom applyToExistingCoursework
akan ditetapkan ke True
. Perhatikan
bahwa menyetel boolean ini ke True
akan menerapkan semua periode penilaian
yang dikonfigurasi pada CourseWork yang ada. Dalam permintaan API sebelumnya, boolean ditetapkan ke False
sehingga periode penilaian "Musim Panas" tidak diterapkan ke CourseWork yang ada. Setelah kolom boolean ini ditetapkan ke True
, periode penilaian "Musim Panas" akan diterapkan ke semua CourseWork yang cocok.
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
Menghapus periode penilaian satu per satu
Untuk menghapus periode penilaian, hapus periode penilaian dari daftar. Perhatikan bahwa jika
periode penilaian dihapus, referensi apa pun ke periode penilaian di
CourseWork juga akan dihapus, terlepas dari setelan
applyToExistingCoursework
.
Python
Untuk melanjutkan contoh dalam panduan ini, hapus periode penilaian, "Musim Panas", untuk menghapusnya.
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
Mengelola kolom gradingPeriodId
di CourseWork
Resource CourseWork menyertakan kolom gradingPeriodId
. Anda dapat menggunakan
endpoint CourseWork untuk membaca dan menulis periode penilaian yang terkait dengan
CourseWork. Ada tiga cara untuk mengelola pengaitan ini:
- pengaitan periode penilaian berbasis tanggal otomatis
- periode penilaian terkait kustom
- tidak ada asosiasi periode penilaian
1. Asosiasi periode penilaian berbasis tanggal
Saat membuat Tugas Mata Pelajaran, Anda dapat mengizinkan Classroom menangani
atribusi periode penilaian untuk Anda. Untuk melakukannya, hapus kolom gradingPeriodId
dari permintaan CourseWork. Kemudian, tentukan kolom dueDate
atau scheduledTime
dalam permintaan CourseWork. Jika dueDate
berada dalam
rentang tanggal periode penilaian yang ada, Classroom akan menetapkan ID periode penilaian
tersebut di Tugas Kuliah. Jika kolom dueDate
tidak ditentukan,
Classroom akan menentukan gradingPeriodId
berdasarkan
kolom scheduledTime
. Jika tidak ada kolom yang ditentukan, atau jika tidak ada kecocokan
rentang tanggal periode penilaian, tidak ada gradingPeriodId
yang akan ditetapkan di CourseWork.
2. Periode penilaian terkait kustom
Jika ingin mengaitkan CourseWork dengan periode penilaian yang berbeda
dari periode yang sesuai dengan dueDate
atau scheduledTime
, Anda dapat menetapkan kolom gradingPeriodId
secara manual saat membuat atau memperbarui CourseWork. Jika Anda menetapkan gradingPeriodId
secara manual, Classroom tidak akan melakukan pengaitan periode penilaian berbasis tanggal secara otomatis.
3. Tidak ada asosiasi periode penilaian
Jika Anda tidak ingin CourseWork dikaitkan dengan periode penilaian apa pun, tetapkan kolom gradingPeriodId
dalam permintaan CourseWork ke string kosong (gradingPeriodId
: ""
).
Apa yang terjadi pada ID periode penilaian jika tanggal jatuh tempo diperbarui?
Jika Anda memperbarui kolom dueDate
CourseWork dan ingin mempertahankan
asosiasi periode penilaian kustom atau tidak ada, Anda harus menyertakan dueDate
dan
gradingPeriodId
dalam updateMask dan isi permintaan. Tindakan ini akan memberi tahu
Classroom untuk tidak mengganti gradingPeriodId
dengan periode
pemberian nilai yang cocok dengan dueDate
baru.
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()