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.courseshttps://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:
GradingPeriodSettingskaynağındaki notlandırma dönemleri listesiniGetGradingPeriodSettingsuç noktasını kullanarak okuyun.- Notlandırma dönemleri listesinde seçilen değişiklikleri yapın.
- Yeni notlandırma dönemleri listesini
UpdateGradingPeriodSettingsadresine 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()