يوضّح هذا الدليل كيفية استخدام نقاط نهاية فترات وضع الدرجات في Google Classroom API.
نظرة عامة
يتم إنشاء فترات وضع الدرجات لتنظيم الواجبات المنزلية والاختبارات والمشاريع في نطاقات زمنية محدّدة. يسمح Classroom API للمطوّرين بإنشاء فترات وضع الدرجات وتعديلها وقراءتها في Classroom نيابةً عن المشرفين والمعلّمين. يمكنك أيضًا استخدام Classroom API لضبط فترات وضع الدرجات في CourseWork.
يوفّر Classroom API نقطتَي نهاية لقراءة معلومات فترة وضع الدرجات وكتابتها في دورة تدريبية:
GetGradingPeriodSettings: تتيح لك قراءة إعدادات فترة وضع الدرجات في دورة تدريبية.UpdateGradingPeriodSettings: تتيح لك إدارة إعدادات فترة وضع الدرجات في دورة تدريبية من خلال إضافة فترات وضع الدرجات وتعديلها وحذفها، وتطبيق فترات وضع الدرجات التي تم ضبطها على جميع عناصر CourseWork الحالية.
متطلبات الترخيص والأهلية
تعديل إعدادات فترة وضع الدرجات في دورة تدريبية
لإنشاء فترات وضع الدرجات أو تعديلها أو حذفها في دورة تدريبية باستخدام نقطة النهاية UpdateGradingPeriodSettings، يجب استيفاء الشروط التالية:
- يجب أن يكون المستخدم الذي يقدّم الطلب معلّمًا في الدورة التدريبية أو مشرفًا.
- يجب أن يكون لدى المستخدم الذي يقدّم الطلب ترخيص Google Workspace for Education Plus.
- يجب أن يكون لدى مالك الدورة التدريبية ترخيص Google Workspace for Education Plus.
قراءة إعدادات فترة وضع الدرجات في دورة تدريبية
يمكن لمشرفي النطاق ومعلّمي الدورة التدريبية قراءة إعدادات فترة وضع الدرجات بغض النظر عن الترخيص الممنوح لهم. ويعني ذلك أنّه يُسمح بتقديم طلبات إلى نقطة النهاية GetGradingPeriodSettings نيابةً عن أي مشرف نطاق أو معلّم.
ضبط رقم تعريف فترة وضع الدرجات في CourseWork
يمكن لمعلّمي الدورة التدريبية تضمين gradingPeriodId عند إنشاء CourseWork أو تعديله باستخدام واجهة برمجة التطبيقات بغض النظر عن الترخيص الممنوح لهم.
التحقّق من أهلية المستخدم لإعداد فترات وضع الدرجات
يُسمح بتقديم طلبات إلى نقطة النهاية userProfiles.checkUserCapability نيابةً عن أي مشرف أو معلّم. استخدِم هذه النقطة لتحديد ما إذا كان بإمكان المستخدم تعديل فترات وضع الدرجات.
المتطلبات الأساسية
يقدّم هذا الدليل أمثلة على الرموز البرمجية بلغة Python، ويفترض أنّ لديك ما يلي:
- مشروع على Google Cloud يمكنك إعداد مشروع باتّباع التعليمات الواردة في الـ دليل البدء السريع بلغة Python.
- نطاقات تمت إضافتها إلى شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth في مشروعك:
https://www.googleapis.com/auth/classroom.courseshttps://www.googleapis.com/auth/classroom.coursework.students
- رقم تعريف دورة تدريبية يجب تعديل فترات وضع الدرجات فيها يجب أن يكون لدى مالك الدورة التدريبية ترخيص Google Workspace for Education Plus.
- بيانات اعتماد معلّم أو مشرف لديه ترخيص Google Workspace for Education Plus ستحتاج إلى بيانات اعتماد معلّم لإنشاء CourseWork أو تعديله. لا يمكن للمشرفين إنشاء CourseWork أو تعديله إذا لم يكونوا معلّمين في الدورة التدريبية.
إدارة مرجع GradingPeriodSettings
يتضمّن مرجع GradingPeriodSettings قائمة بعناصر GradingPeriods فردية وحقل منطقي يُسمى applyToExistingCoursework.
تأكَّد من أنّ كل عنصر GradingPeriods فردي في القائمة يستوفي المتطلبات التالية:
- العنوان وتاريخ البدء وتاريخ الانتهاء: يجب أن يكون لكل فترة وضع درجات عنوان وتاريخ بدء وتاريخ انتهاء.
- عنوان فريد: يجب أن يكون لكل فترة وضع درجات عنوان فريد لا يتطابق مع أي فترات وضع درجات أخرى في الدورة التدريبية.
- تواريخ غير متداخلة: يجب ألا تتداخل تواريخ البدء أو الانتهاء لكل فترة وضع درجات مع أي فترات وضع درجات أخرى في الدورة التدريبية.
- الترتيب الزمني: يجب إدراج فترات وضع الدرجات بترتيب زمني استنادًا إلى تاريخَي البدء والانتهاء.
سيتم تخصيص معرّف لكل فترة وضع درجات من خلال Classroom API عند إنشائها.
إنّ الحقل المنطقي applyToExistingCoursework هو إعداد دائم يتيح لك تنظيم CourseWork الذي تم إنشاؤه سابقًا في فترات وضع الدرجات بدون الحاجة إلى إجراء طلب بيانات منفصل من واجهة برمجة التطبيقات لتعديل gradingPeriodId لكل CourseWork. إذا تم ضبطه على True، سيضبط Classroom تلقائيًا gradingPeriodId على جميع عناصر CourseWork الحالية إذا كان courseWork.dueDate يقع ضمن تاريخَي البدء والانتهاء لفترة وضع الدرجات الحالية. إذا لم يتم ضبط تاريخ التسليم في CourseWork، سيستخدم Classroom courseWork.scheduledTime. إذا لم يكن أي من الحقلَين متوفرًا أو لم يكن هناك تطابق ضمن تاريخَي البدء والانتهاء لفترة وضع الدرجات الحالية، لن يتم ربط CourseWork بأي فترة وضع درجات.
تحديد ما إذا كان بإمكان المستخدم تعديل إعدادات فترة وضع الدرجات في دورة تدريبية
يوفّر Classroom API نقطة النهاية userProfiles.checkUserCapability لمساعدتك في تحديد ما إذا كان بإمكان المستخدم تقديم طلبات إلى نقطة النهاية UpdateGradingPeriodSettings بشكل استباقي.
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
إضافة فترات وضع الدرجات
بعد التأكّد من أنّ المستخدم مؤهّل لتعديل إعدادات فترة وضع الدرجات في دورة تدريبية، يمكنك البدء في إرسال طلبات إلى نقطة النهاية UpdateGradingPeriodSettings. يتم إجراء أي تعديلات على مرجع
GradingPeriodSettings باستخدام نقطة النهاية
UpdateGradingPeriodSettings سواء كنت تضيف فترات وضع درجات فردية أو تعدّل فترات وضع درجات حالية أو تحذف فترة وضع درجات.
Python
في المثال التالي، يتم تعديل مرجع gradingPeriodSettings ليتضمّن فترتَي وضع درجات. تم ضبط الحقل المنطقي applyToExistingCoursework على True ما سيؤدي إلى تعديل gradingPeriodId في أي CourseWork حالي يقع بين تاريخَي البدء والانتهاء لفترة وضع الدرجات. يُرجى العِلم أنّ updateMask يتضمّن كلا الحقلَين. احفظ أرقام تعريف فترات وضع الدرجات الفردية بعد عرضها في الردّ. ستحتاج إلى استخدام أرقام التعريف هذه لتعديل فترات وضع الدرجات إذا لزم الأمر.
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
قراءة إعدادات فترة وضع الدرجات
تتم قراءة GradingPeriodSettings باستخدام نقطة النهاية GetGradingPeriodSettings.
يمكن لأي مستخدم، بغض النظر عن الترخيص، قراءة إعدادات فترات وضع الدرجات في دورة تدريبية.
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
إضافة فترة وضع درجات فردية إلى القائمة
يجب إجراء التعديلات على فترة وضع الدرجات الفردية باتّباع نمط القراءة والتعديل والكتابة. ويعني ذلك أنّه عليك إجراء ما يلي:
- قراءة قائمة فترات وضع الدرجات ضمن المرجع
GradingPeriodSettingsباستخدام نقطة النهايةGetGradingPeriodSettings. - إجراء التعديلات التي تم اختيارها على قائمة فترات وضع الدرجات.
- إرسال قائمة فترات وضع الدرجات الجديدة في طلب إلى
UpdateGradingPeriodSettings.
سيساعدك هذا النمط في التأكّد من أنّ عناوين فترات وضع الدرجات الفردية في دورة تدريبية مميّزة وأنه لا يوجد تداخل بين تاريخَي البدء والانتهاء لفترات وضع الدرجات.
ضَع في اعتبارك القواعد التالية بشأن تعديل قائمة فترات وضع الدرجات:
- تُعد فترات وضع الدرجات التي تتم إضافتها إلى القائمة بدون رقم تعريف إضافات.
- تُعد فترات وضع الدرجات غير المتوفّرة في القائمة عمليات حذف.
- تُعد فترات وضع الدرجات التي لها رقم تعريف حالي ولكن تم تعديل بياناتها عمليات تعديل. تبقى الخصائص غير المعدَّلة كما هي.
- تُعد فترات وضع الدرجات التي لها أرقام تعريف جديدة أو غير معروفة أخطاء.
Python
سيستند الرمز البرمجي التالي إلى المثال الوارد في هذا الدليل. يتم إنشاء فترة وضع درجات جديدة بعنوان "الصيف". تم ضبط الحقل المنطقي applyToExistingCoursework على False في نص الطلب.
لإجراء ذلك، تتم قراءة GradingPeriodSettings الحالية، وتتم إضافة فترة وضع درجات جديدة إلى القائمة، ويتم ضبط الحقل المنطقي applyToExistingCoursework على False. يُرجى العِلم أنّه لن تتم إزالة أي فترات وضع درجات تم تطبيقها سابقًا على CourseWork الحالي. في المثال السابق، تم تطبيق فترتَي وضع الدرجات "الفصل الدراسي الأول" و"الفصل الدراسي الثاني" على CourseWork الحالي، ولن تتم إزالتهما من CourseWork إذا تم ضبط applyToExistingCoursework على False في الطلبات اللاحقة.
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
من المهم أن تتذكّر أنّ الحقل المنطقي applyToExistingCoursework دائم، ما يعني أنّه إذا تم ضبط الحقل المنطقي على True في طلب سابق من واجهة برمجة التطبيقات ولم يتم تغييره، سيتم تطبيق التعديلات اللاحقة على فترات وضع الدرجات على CourseWork الحالي.
يُرجى العِلم أنّه إذا غيّرت قيمة هذا الحقل المنطقي من True إلى False في طلب إلى UpdateGradingPeriodSettings، لن يتم تطبيق التغييرات الجديدة التي تُجريها على GradingPeriodSettings على المواد التعليمية الحالي. لن تتم إزالة أي معلومات عن فترة وضع الدرجات تم تطبيقها على CourseWork في طلبات سابقة من واجهة برمجة التطبيقات عندما تم ضبط الحقل المنطقي على True. من الطرق المفيدة للتفكير في هذا الإعداد المنطقي أنّه يتيح ربط CourseWork الحالي بفترات وضع الدرجات التي تم ضبطها، ولكنّه لا يتيح إزالة الروابط الحالية بين CourseWork وفترات وضع الدرجات التي تم ضبطها.
إذا حذفت فترة وضع درجات أو غيّرت عنوانها، سيتم نشر هذه التغييرات في جميع عناصر CourseWork الحالية، بغض النظر عن إعداد الحقل المنطقي applyToExistingCoursework.
تعديل فترة وضع درجات فردية في القائمة
لتعديل بعض البيانات المرتبطة بفترة وضع درجات حالية، عليك تضمين رقم تعريف فترة وضع الدرجات الحالية في القائمة مع البيانات المعدَّلة.
Python
في هذا المثال، سيتم تعديل تاريخ انتهاء فترة وضع الدرجات "الصيف". سيتم ضبط الحقل applyToExistingCoursework على True. ملاحظة
يُرجى العِلم أنّ ضبط هذا الحقل المنطقي على True سيؤدي إلى تطبيق جميع فترات وضع الدرجات التي تم ضبطها على المواد التعليمية الحالية. في طلب بيانات من واجهة برمجة التطبيقات السابق، تم ضبط الحقل المنطقي على False حتى لا يتم تطبيق فترة وضع الدرجات "الصيف" على المواد التعليمية الحالية. بعد ضبط هذا الحقل المنطقي على True، سيتم تطبيق فترة وضع الدرجات "الصيف" على جميع عناصر CourseWork الحالية المطابِقة.
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
حذف فترة وضع درجات فردية
لحذف فترة وضع درجات، عليك إزالتها من القائمة. يُرجى العِلم أنّه في حال حذف فترة وضع درجات، سيتم أيضًا حذف أي إشارة إلى فترة وضع الدرجات في CourseWork بغض النظر عن إعداد applyToExistingCoursework.
Python
لمواصلة المثال الوارد في هذا الدليل، عليك إزالة فترة وضع الدرجات "الصيف" لحذفها.
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
إدارة الحقل gradingPeriodId في CourseWork
يتضمّن مرجع CourseWork الحقل gradingPeriodId. يمكنك استخدام نقاط نهاية CourseWork لقراءة فترة وضع الدرجات المرتبطة بـ CourseWork وكتابتها. هناك ثلاث طرق لإدارة هذا الربط:
- الربط التلقائي لفترة وضع الدرجات استنادًا إلى التاريخ
- فترة وضع الدرجات المرتبطة المخصّصة
- عدم ربط فترة وضع الدرجات
1. الربط بفترة وضع الدرجات استنادًا إلى التاريخ
عند إنشاء CourseWork، يمكنك السماح لـ Classroom بإدارة الربط بفترة وضع الدرجات نيابةً عنك. لإجراء ذلك، عليك إزالة الحقل gradingPeriodId من طلب CourseWork. بعد ذلك، عليك تحديد الحقلَين dueDate أو scheduledTime في طلب CourseWork. إذا كان dueDate يقع ضمن النطاق الزمني لفترة وضع الدرجات الحالية، سيضبط Classroom رقم تعريف فترة وضع الدرجات هذا على CourseWork. إذا لم يتم تحديد الحقل dueDate، سيحدّد Classroom gradingPeriodId استنادًا إلى الحقل scheduledTime. إذا لم يتم تحديد أي من الحقلَين، أو إذا لم يكن هناك تطابق في النطاق الزمني لفترة وضع الدرجات، لن يتم ضبط gradingPeriodId على CourseWork.
2. فترة وضع الدرجات المرتبطة المخصّصة
إذا أردت ربط CourseWork بفترة وضع درجات مختلفة عن تلك التي تتطابق مع dueDate أو scheduledTime، يمكنك ضبط الحقل gradingPeriodId يدويًا عند إنشاء CourseWork أو تعديله. إذا ضبطت gradingPeriodId يدويًا، لن يُجري Classroom الربط التلقائي بفترة وضع الدرجات استنادًا إلى التاريخ.
3. عدم ربط فترة وضع الدرجات
إذا كنت لا تريد ربط CourseWork بأي فترة وضع درجات على الإطلاق، عليك ضبط الحقل gradingPeriodId في طلب CourseWork على سلسلة فارغة (gradingPeriodId: "").
إذا كنت تستخدم لغة البرمجة Go وأردت عدم ضبط فترة وضع الدرجات، عليك أيضًا تضمين الحقل ForceSendFields في نص الطلب. باستخدام مكتبة عملاء Go، يتم حذف القيم التلقائية من طلبات واجهة برمجة التطبيقات بسبب علامة الحقل omitempty في جميع الحقول.
يتجاوز الحقل ForceSendFields ذلك ويرسل السلسلة الفارغة للإشارة إلى أنّك لا تريد ضبط أي فترة وضع درجات لهذا CourseWork. يمكنك الاطّلاع على
مستندات مكتبة عملاء Google APIs Go
لمزيد من المعلومات.
Go
courseWork := &classroom.CourseWork{
Title: "Homework questions",
WorkType: "ASSIGNMENT",
State: "DRAFT",
// ...other CourseWork fields...
GradingPeriodId: "",
ForceSendFields: []string{"GradingPeriodId"},
}
ماذا يحدث لرقم تعريف فترة وضع الدرجات إذا تم تعديل تاريخ التسليم؟
إذا كنت تعدّل الحقل dueDate في CourseWork وأردت الاحتفاظ بربط مخصّص أو عدم ربط فترة وضع الدرجات، عليك تضمين dueDate وgradingPeriodId في `updateMask` ونص الطلب. سيُعلم ذلك Classroom بعدم إلغاء gradingPeriodId بفترة وضع الدرجات التي تتطابق مع dueDate الجديد.
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()