Bu kılavuzda, Google Classroom API'deki notlandırma dönemleri uç noktalarının nasıl kullanılacağı açıklanmaktadır.
Genel Bakış
Ödevleri, testleri ve projeleri belirli tarih aralıklarına göre düzenlemek için notlandırma dönemleri oluşturulur. Classroom API, geliştiricilerin yöneticiler ve öğretmenler adına Classroom'da notlandırma dönemleri oluşturmasına, değiştirmesine ve okumasına olanak tanır. Classroom API'yi kullanarak CourseWork'te notlandırma dönemleri de ayarlayabilirsiniz.
Classroom API, bir kurstaki notlandırma dönemi bilgilerini okumak ve yazmak için iki uç nokta sunar:
GetGradingPeriodSettings
: Bir kurstaki notlandırma dönemi ayarlarını okumanıza olanak tanır.UpdateGradingPeriodSettings
: Notlandırma dönemleri ekleyerek, değiştirerek ve silerek notlandırma dönemi ayarlarını yönetmenize ve yapılandırılan notlandırma dönemlerini mevcut tüm Kurs Çalışmaları'na uygulamanıza olanak tanır.
Lisanslama ve uygunluk koşulları
Bir kurstaki notlandırma dönemi ayarlarını değiştirme
UpdateGradingPeriodSettings
uç noktasını kullanarak bir kursta notlandırma dönemleri oluşturmak, değiştirmek veya silmek için aşağıdaki koşulların karşılanması gerekir:
- İsteği gönderen kullanıcı, kurstaki bir öğretmen veya yönetici olmalıdır.
- İsteği gönderen kullanıcıya Google Workspace for Education Plus lisansı atanmış olmalıdır.
- Kursun sahibi olan kullanıcının Google Workspace for Education Plus lisansı atanmış olmalıdır.
Bir kurstaki notlandırma dönemi ayarlarını okuma
Alan yöneticileri ve ders öğretmenleri, hangi lisansın kendilerine atandığına bakılmaksızın not verme dönemi ayarlarını okuyabilir. Bu, herhangi bir alan yöneticisi veya öğretmen adına GetGradingPeriodSettings
uç noktasına istek gönderilmesine izin verildiği anlamına gelir.
CourseWork'te notlandırma dönemi kimliği ayarlama
Bir dersin öğretmenleri, hangi lisans atanmış olursa olsun API'yi kullanarak CourseWork oluştururken veya güncellerken gradingPeriodId
simgesini ekleyebilir.
Kullanıcının notlandırma dönemleri oluşturmaya uygun olup olmadığını kontrol etme
userProfiles.checkUserCapability
uç noktasına yapılan istekler, herhangi bir yönetici veya öğretmen adına izin verilir. Kullanıcının notlandırma dönemlerini değiştirip değiştiremeyeceğini belirlemek için bu ayarı kullanın.
Ön koşullar
Bu kılavuzda Python dilinde kod örnekleri verilmektedir ve aşağıdaki şartları karşıladığınız varsayılmaktadır:
- Google Cloud projesi. Python hızlı başlangıç bölümündeki talimatları uygulayarak bir tane oluşturabilirsiniz.
- Projenizin OAuth kullanıcı rızası ekranına aşağıdaki kapsamlar eklendi:
https://www.googleapis.com/auth/classroom.courses
https://www.googleapis.com/auth/classroom.coursework.students
- Notlandırma dönemlerinin değiştirilmesi gereken bir kursun kimliği. Kurs sahibinin Google Workspace for Education Plus lisansı olmalıdır.
- Google Workspace for Education Plus lisansına sahip bir öğretmenin veya yöneticinin kimlik bilgilerine erişim Kurs içeriği oluşturmak veya değiştirmek için öğretmen kimlik bilgilerine ihtiyacınız vardır. Yöneticiler, kursta öğretmen değilse CourseWork oluşturamaz veya değiştiremez.
GradingPeriodSettings
kaynağını yönetme
GradingPeriodSettings
kaynağı, bağımsız GradingPeriods
listesini ve applyToExistingCoursework
adlı bir boole alanını içerir.
Listedeki her bir GradingPeriods
öğesinin aşağıdaki koşulları karşıladığından emin olun:
- Başlık, başlangıç tarihi ve bitiş tarihi: Her notlandırma döneminin başlığı, başlangıç tarihi ve bitiş tarihi olmalıdır.
- Benzersiz başlık: Her notlandırma döneminin, kurstaki diğer notlandırma dönemleriyle eşleşmeyen benzersiz bir başlığı olmalıdır.
- Çakışmayan tarihler: Her notlandırma döneminin başlangıç veya bitiş tarihleri, kurstaki diğer notlandırma dönemleriyle çakışmamalıdır.
- Kronolojik sıra: Notlandırma dönemleri, başlangıç ve bitiş tarihlerine göre kronolojik sırada listelenmelidir.
Her notlandırma dönemine, oluşturulurken Classroom API tarafından atanmış bir tanımlayıcı atanır.
applyToExistingCoursework
boole değeri, daha önce oluşturulan CourseWork'leri her CourseWork için gradingPeriodId
değerini değiştirmek üzere ayrı bir API çağrısı yapmanıza gerek kalmadan notlandırma dönemleri halinde düzenlemenize olanak tanıyan kalıcı bir ayardır. True
olarak ayarlanırsa Classroom, courseWork.dueDate
mevcut bir notlandırma döneminin başlangıç ve bitiş tarihleri içinde yer alıyorsa mevcut tüm CourseWork'lerde gradingPeriodId
değerini otomatik olarak ayarlar. Classroom, CourseWork'te teslim tarihi ayarlanmamışsa courseWork.scheduledTime
tarihini kullanır. Alanlardan hiçbiri mevcut değilse veya mevcut bir notlandırma döneminin başlangıç ve bitiş tarihleri içinde eşleşme yoksa CourseWork herhangi bir notlandırma dönemiyle ilişkilendirilmez.
Kullanıcının bir kurstaki notlandırma dönemi ayarlarını değiştirip değiştiremeyeceğini belirleme
Classroom API, bir kullanıcının UpdateGradingPeriodSettings
uç noktasına istek gönderip gönderemeyeceğini proaktif olarak belirlemenize yardımcı olmak için userProfiles.checkUserCapability
uç noktasını sağlar.
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
Notlandırma dönemi ekleme
Kullanıcının bir kurstaki notlandırma dönemi ayarlarını değiştirmeye uygun olduğundan emin olduğunuzda UpdateGradingPeriodSettings
uç noktasına istek göndermeye başlayabilirsiniz. GradingPeriodSettings
kaynağında yapılan tüm değişiklikler, tek tek notlandırma dönemleri ekliyor, mevcut notlandırma dönemlerini değiştiriyor veya bir notlandırma dönemini siliyor olmanızdan bağımsız olarak GradingPeriodSettings
uç noktası kullanılarak gerçekleştirilir.UpdateGradingPeriodSettings
Python
Aşağıdaki örnekte, gradingPeriodSettings
kaynağı iki notlandırma dönemi içerecek şekilde değiştirilmiştir. applyToExistingCoursework
boole değeri True
olarak ayarlanır. Bu, bir notlandırma döneminin başlangıç ve bitiş tarihi arasında kalan mevcut CourseWork'lerdeki gradingPeriodId
değerini değiştirir. updateMask
alanının her iki alanı da içerdiğini unutmayın. Yanıt döndürüldüğünde ayrı notlandırma dönemlerinin kimliklerini kaydedin. Gerekirse notlandırma dönemlerini güncellemek için bu kimlikleri kullanmanız gerekir.
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
Notlandırma dönemi ayarlarını okuma
GradingPeriodSettings
, GetGradingPeriodSettings
uç noktası kullanılarak okunur.
Lisansı ne olursa olsun tüm kullanıcılar, bir kurstaki notlandırma dönemleri ayarlarını okuyabilir.
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
Listeye tek bir notlandırma dönemi ekleme
Notlandırma döneminde yapılan güncellemeler, okuma-değiştirme-yazma düzenine göre yapılmalıdır. Bu nedenle:
GradingPeriodSettings
kaynağındaki notlandırma dönemleri listesiniGetGradingPeriodSettings
uç noktasını kullanarak okuyun.- Notlandırma dönemleri listesinde seçilen değişiklikleri yapın.
- Yeni notlandırma dönemleri listesini
UpdateGradingPeriodSettings
adresine istek olarak gönderin.
Bu kalıp, bir kurstaki notlandırma dönemi başlıklarının farklı olmasını ve notlandırma dönemlerinin başlangıç ve bitiş tarihleri arasında çakışma olmamasını sağlar.
Notlandırma dönemleri listesini güncellerken aşağıdaki kuralları göz önünde bulundurun:
- Kimlik olmadan listeye eklenen notlandırma dönemleri ekleme olarak kabul edilir.
- Listede olmayan notlandırma dönemleri silme olarak kabul edilir.
- Mevcut bir kimliğe sahip ancak verileri değiştirilmiş notlandırma dönemleri düzenleme olarak kabul edilir. Değiştirilmeyen özellikler olduğu gibi bırakılır.
- Yeni veya bilinmeyen kimliklere sahip notlandırma dönemleri hata olarak kabul edilir.
Python
Aşağıdaki kod, bu kılavuzdaki örnekten yararlanır. "Yaz" başlıklı yeni bir notlandırma dönemi oluşturulur. İstek gövdesinde applyToExistingCoursework
boolean değeri False
olarak ayarlanmış.
Bunu yapmak için mevcut GradingPeriodSettings
okunur, listeye yeni bir notlandırma dönemi eklenir ve applyToExistingCoursework
boole değeri False
olarak ayarlanır. Mevcut ödevlere uygulanmış olan notlandırma dönemlerinin kaldırılmayacağını unutmayın. Önceki örnekte, "1. Dönem" ve "2. Dönem" notlandırma dönemleri mevcut CourseWork'e zaten uygulanmıştı ve sonraki isteklerde applyToExistingCoursework
False olarak ayarlanırsa CourseWork'ten kaldırılmaz.
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
applyToExistingCoursework
Boole alanı hakkında faydalı ipuçları
applyToExistingCoursework
Boole değerinin kalıcı olduğunu unutmayın. Yani Boole değeri önceki bir API çağrısında True
olarak ayarlanmışsa ve değiştirilmemişse notlandırma dönemleriyle ilgili sonraki güncellemeler mevcut CourseWork'e uygulanır.
UpdateGradingPeriodSettings
isteğinde bu Boole değerini True
olarak değiştirirseniz GradingPeriodSettings
üzerinde yaptığınız yeni değişikliklerin mevcut CourseWork'e uygulanmayacağını unutmayın.False
Boole değeri True
olarak ayarlandığında önceki API çağrılarında CourseWork'e uygulanan notlandırma dönemi bilgileri kaldırılmaz. Bu Boole ayarını, mevcut CourseWork'ü yapılandırılmış not verme dönemlerinizle ilişkilendirmeyi destekleyen ancak CourseWork ile yapılandırılmış not verme dönemleri arasındaki mevcut ilişkilendirmeleri kaldırmayı desteklemeyen bir ayar olarak düşünebilirsiniz.
Bir notlandırma döneminin başlığını siler veya değiştirirseniz bu değişiklikler, applyToExistingCoursework
boole'unun ayarından bağımsız olarak mevcut tüm CourseWork'e yayılır.
Listedeki bağımsız bir notlandırma dönemini güncelleme
Mevcut bir notlandırma dönemiyle ilişkili bazı verileri değiştirmek için mevcut notlandırma döneminin kimliğini değiştirilen verilerin bulunduğu listeye ekleyin.
Python
Bu örnekte, "Yaz" notlandırma döneminin bitiş tarihi değiştirilecektir. applyToExistingCoursework
alanı True
olarak ayarlanır. Bu boole değerini True
olarak ayarlamanın, mevcut CourseWork'e yapılandırılmış tüm notlandırma dönemlerini uygulayacağını unutmayın. Önceki API isteğinde, "Yaz" notlandırma döneminin mevcut CourseWork'e uygulanmaması için boole değeri False
olarak ayarlanmıştı. Bu boole alanı True
olarak ayarlandığında, eşleşen tüm mevcut CourseWork'e "Yaz" notlandırma dönemi uygulanır.
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
Tek bir notlandırma dönemini silme
Bir notlandırma dönemini silmek için notlandırma dönemini listeden çıkarın. Bir notlandırma dönemi silinirse applyToExistingCoursework
ayarından bağımsız olarak CourseWork'teki notlandırma dönemine yapılan tüm referansların da silineceğini unutmayın.
Python
Bu kılavuzdaki örneğe devam etmek için notlandırma dönemini ("Yaz") silin.
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
CourseWork'te gradingPeriodId
alanını yönetme
CourseWork kaynağında gradingPeriodId
alanı bulunur. Bir CourseWork ile ilişkili notlandırma dönemini okumak ve yazmak için CourseWork uç noktalarını kullanabilirsiniz. Bu ilişkilendirmeyi yönetmenin üç yolu vardır:
- tarihe dayalı otomatik notlandırma dönemi ilişkilendirmesi
- özel ilişkilendirilmiş notlandırma dönemi
- notlandırma dönemi ilişkilendirilmemişse
1. Tarihe dayalı notlandırma dönemi ilişkilendirmesi
CourseWork oluştururken Classroom'un notlandırma dönemi ilişkilendirmesini sizin için yapmasına izin verebilirsiniz. Bunu yapmak için CourseWork isteğinden gradingPeriodId
alanını çıkarın. Ardından, CourseWork isteğinde dueDate
veya scheduledTime
alanlarını belirtin. dueDate
, mevcut bir not verme dönemi tarih aralığına giriyorsa Classroom, CourseWork'e söz konusu not verme dönemi kimliğini atar. dueDate
alanı belirtilmezse Classroom, gradingPeriodId
değerini scheduledTime
alanına göre belirler. İki alan da belirtilmemişse veya notlandırma dönemi tarih aralığı eşleşmesi yoksa CourseWork'te gradingPeriodId
ayarlanmaz.
2. Özel ilişkilendirilmiş notlandırma dönemi
CourseWork'ü dueDate
veya scheduledTime
ile uyumlu olanın dışında farklı bir notlandırma dönemiyle ilişkilendirmek istiyorsanız CourseWork'ü oluştururken veya güncellerken gradingPeriodId
alanını manuel olarak ayarlayabilirsiniz. gradingPeriodId
değerini manuel olarak ayarlarsanız Classroom, otomatik tarih tabanlı notlandırma dönemi ilişkilendirmesini gerçekleştirmez.
3. Notlandırma dönemi ilişkilendirilmemiş
CourseWork'ün herhangi bir notlandırma dönemiyle ilişkilendirilmesini istemiyorsanız CourseWork isteğindeki gradingPeriodId
alanını boş bir dize olarak ayarlayın (gradingPeriodId
: ""
).
Go programlama dilini kullanıyorsanız ve notlandırma dönemi ayarlamak istemiyorsanız istek gövdesine ForceSendFields
alanını da eklemeniz gerekir. Go istemci kitaplığıyla, tüm alanlarda omitempty
alan etiketi bulunduğundan API isteklerinde varsayılan değerler atlanır.
ForceSendFields
alanı bunu atlar ve boş dize göndererek bu CourseWork için herhangi bir notlandırma dönemi ayarlanmasını istemediğinizi belirtir. Daha fazla bilgi için Google API'leri Go istemci kitaplığı belgelerine bakın.
Go
courseWork := &classroom.CourseWork{
Title: "Homework questions",
WorkType: "ASSIGNMENT",
State: "DRAFT",
// ...other CourseWork fields...
GradingPeriodId: "",
ForceSendFields: []string{"GradingPeriodId"},
}
Son tarih güncellenirse notlandırma dönemi kimliğine ne olur?
CourseWork dueDate
alanını güncelliyorsanız ve özel bir notlandırma dönemi ilişkilendirmesini veya notlandırma dönemi ilişkilendirmemesini korumak istiyorsanız updateMask ve istek gövdesine dueDate
ve gradingPeriodId
öğelerini eklemeniz gerekir. Bu işlem, Classroom'a gradingPeriodId
yerine yeni dueDate
ile eşleşen notlandırma dönemini kullanmaması talimatını verir.
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()