این راهنما نحوه استفاده از نقاط پایانی دورههای نمرهدهی در رابط برنامهنویسی کاربردی (API) کلاس درس گوگل را توضیح میدهد.
نمای کلی
دورههای نمرهدهی برای سازماندهی تکالیف، آزمونها و پروژهها در محدودههای زمانی خاص ایجاد میشوند. رابط برنامهنویسی کاربردی (API) کلاس درس به توسعهدهندگان اجازه میدهد تا دورههای نمرهدهی را در کلاس درس به نمایندگی از مدیران و معلمان ایجاد، اصلاح و مطالعه کنند. همچنین میتوانید از رابط برنامهنویسی کاربردی کلاس درس برای تنظیم دورههای نمرهدهی در CourseWork استفاده کنید.
رابط برنامهنویسی کاربردی کلاس درس (Classroom API) دو نقطه پایانی برای خواندن و نوشتن اطلاعات دوره نمرهدهی در یک دوره ارائه میدهد:
-
GetGradingPeriodSettings: به شما امکان میدهد تنظیمات دوره نمرهدهی را در یک دوره بخوانید. -
UpdateGradingPeriodSettings: به شما امکان میدهد تنظیمات دوره نمرهدهی را در یک دوره با اضافه کردن، تغییر دادن و حذف دورههای نمرهدهی و اعمال دورههای نمرهدهی پیکربندیشده به تمام CourseWork های موجود، مدیریت کنید.
شرایط لازم برای اخذ مجوز و واجد شرایط بودن
تنظیمات دوره نمرهدهی را در یک دوره تغییر دهید
برای ایجاد، اصلاح یا حذف دورههای نمرهدهی در یک دوره با استفاده از نقطه پایانی UpdateGradingPeriodSettings ، باید شرایط زیر رعایت شود:
- کاربری که درخواست را ارسال میکند باید معلم دوره یا مدیر باشد.
- به کاربری که درخواست را ارسال میکند، مجوز Google Workspace for Education Plus اختصاص داده شده است.
- به صاحب دوره، مجوز Google Workspace for Education Plus اختصاص داده شده است.
تنظیمات دوره نمرهدهی را در یک دوره بخوانید
مدیران دامنه و معلمان یک دوره میتوانند تنظیمات دوره نمرهدهی را صرف نظر از مجوزی که به آنها اختصاص داده شده است، بخوانند . این بدان معناست که درخواستها به نقطه پایانی GetGradingPeriodSettings از طرف هر مدیر دامنه یا معلمی مجاز است.
یک شناسه دوره نمرهدهی در CourseWork تنظیم کنید
اساتید یک دوره میتوانند فارغ از اینکه چه مجوزی به آنها اختصاص داده شده است، هنگام ایجاد یا بهروزرسانی CourseWork با استفاده از API، gradingPeriodId را لحاظ کنند.
بررسی واجد شرایط بودن کاربر برای تنظیم دورههای نمرهدهی
درخواستها به نقطه پایانی userProfiles.checkUserCapability از طرف هر مدیر یا معلمی مجاز است. از این برای تعیین اینکه آیا کاربر میتواند دورههای نمرهدهی را تغییر دهد یا خیر، استفاده کنید.
پیشنیازها
این راهنما نمونههایی از کد را در پایتون ارائه میدهد و فرض میکند که شما موارد زیر را دارید:
- یک پروژه گوگل کلود. میتوانید با دنبال کردن دستورالعملهای موجود در راهنمای سریع پایتون، یکی از آنها را راهاندازی کنید.
- محدودههای زیر به صفحه رضایت OAuth پروژه شما اضافه شد:
-
https://www.googleapis.com/auth/classroom.courses -
https://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 های ایجاد شده قبلی را در دورههای نمرهدهی سازماندهی کنید، بدون اینکه مجبور باشید برای هر CourseWork یک فراخوانی API جداگانه برای تغییر gradingPeriodId انجام دهید. اگر این مقدار روی True تنظیم شود، Classroom به طور خودکار gradingPeriodId برای همه CourseWork های موجود تنظیم میکند، اگر courseWork.dueDate در تاریخ شروع و پایان یک دوره نمرهدهی موجود قرار گیرد. اگر هیچ تاریخ سررسیدی برای CourseWork تعیین نشده باشد، Classroom از courseWork.scheduledTime استفاده خواهد کرد. اگر هیچکدام از فیلدها وجود نداشته باشند یا هیچ تطابقی در تاریخ شروع و پایان یک دوره نمرهدهی موجود وجود نداشته باشد، CourseWork با هیچ دوره نمرهدهی مرتبط نخواهد شد.
تعیین اینکه آیا کاربر میتواند تنظیمات دوره نمرهدهی را در یک دوره تغییر دهد یا خیر
رابط برنامهنویسی کاربردی کلاس درس، نقطه پایانی userProfiles.checkUserCapability را ارائه میدهد تا به شما کمک کند به صورت پیشگیرانه تعیین کنید که آیا یک کاربر قادر به ارسال درخواست به نقطه پایانی UpdateGradingPeriodSettings است یا خیر.
پایتون
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 انجام میشود، چه دورههای نمرهدهی جداگانه اضافه کنید، چه دورههای نمرهدهی موجود را تغییر دهید یا یک دوره نمرهدهی را حذف کنید.
پایتون
در مثال زیر، منبع 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 خوانده میشوند. هر کاربری، صرف نظر از مجوز، میتواند تنظیمات دورههای نمرهدهی را در یک دوره بخواند.
پایتون
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ارسال کنید.
این الگو به شما کمک میکند تا مطمئن شوید که عناوین دورههای نمرهدهی در یک درس مجزا هستند و هیچ همپوشانی بین تاریخ شروع و پایان دورههای نمرهدهی وجود ندارد.
قوانین زیر را در مورد بهروزرسانی فهرست دورههای نمرهدهی در نظر داشته باشید:
- دورههای درجهبندی که بدون شناسه به لیست اضافه میشوند، اضافه محسوب میشوند.
- دورههای نمرهدهی که در لیست وجود ندارند ، حذفشده محسوب میشوند.
- دورههای درجهبندی با شناسه موجود اما دادههای اصلاحشده، ویرایش محسوب میشوند. ویژگیهای اصلاحنشده به همان صورت باقی میمانند.
- دورههای نمرهدهی با شناسههای جدید یا ناشناخته، خطا محسوب میشوند.
پایتون
کد زیر بر اساس مثال این راهنما ساخته خواهد شد. یک دوره نمرهدهی جدید با عنوان "تابستان" ایجاد میشود. مقدار بولی applyToExistingCoursework در بدنه درخواست روی False تنظیم شده است.
برای انجام این کار، GradingPeriodSettings فعلی خوانده میشود، یک دوره نمرهدهی جدید به لیست اضافه میشود و مقدار بولی applyToExistingCoursework روی False تنظیم میشود. توجه داشته باشید که هر دوره نمرهدهی که قبلاً روی CourseWork موجود اعمال شده باشد، حذف نخواهد شد. در مثال قبلی، دورههای نمرهدهی "Semester 1" و "Semester 2" قبلاً روی CourseWork موجود اعمال شدهاند و اگر applyToExistingCoursework در درخواستهای بعدی روی False تنظیم شود، از CourseWork حذف نخواهند شد.
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 ثابت است، به این معنی که اگر مقدار بولی در فراخوانی قبلی API روی True تنظیم شده باشد و تغییر نکرده باشد، بهروزرسانیهای بعدی دورههای نمرهدهی روی CourseWork موجود اعمال خواهد شد.
توجه داشته باشید که اگر این مقدار بولی را در درخواستی به UpdateGradingPeriodSettings از True به False تغییر دهید، فقط تغییرات جدیدی که در GradingPeriodSettings ایجاد میکنید، روی CourseWork موجود اعمال نخواهد شد. هرگونه اطلاعات دوره نمرهدهی که در فراخوانیهای API قبلی، زمانی که مقدار بولی روی True تنظیم شده بود، روی CourseWork اعمال شده باشد، حذف نخواهد شد. یک راه مفید برای درک این تنظیم بولی این است که از مرتبط کردن CourseWork موجود با دورههای نمرهدهی پیکربندیشده شما پشتیبانی میکند، اما از حذف ارتباطات موجود بین CourseWork و دورههای نمرهدهی پیکربندیشده پشتیبانی نمیکند.
اگر عنوان یک دوره نمرهدهی را حذف یا تغییر دهید، آن تغییرات در تمام CourseWork های موجود، صرف نظر از تنظیم مقدار بولی applyToExistingCoursework اعمال خواهد شد.
بهروزرسانی یک دوره نمرهدهی مجزا در لیست
برای تغییر برخی از دادههای مرتبط با یک دوره نمرهدهی موجود، شناسه دوره نمرهدهی موجود را در لیست دادههای اصلاحشده قرار دهید.
پایتون
در این مثال، تاریخ پایان دوره نمرهدهی "تابستان" اصلاح خواهد شد. فیلد applyToExistingCoursework روی True تنظیم خواهد شد. توجه داشته باشید که تنظیم این مقدار بولی روی True تمام دورههای نمرهدهی پیکربندی شده را روی CourseWork موجود اعمال میکند. در درخواست API قبلی، مقدار بولی روی False تنظیم شده بود تا دوره نمرهدهی "تابستان" روی CourseWork موجود اعمال نشود. اکنون که این فیلد بولی روی 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 حذف خواهد شد.
پایتون
برای ادامهی مثال در این راهنما، دورهی نمرهدهی، «تابستان»، را حذف کنید تا حذف شود.
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 استفاده کنید. سه راه برای مدیریت این ارتباط وجود دارد:
- ارتباط خودکار دوره درجهبندی مبتنی بر تاریخ
- دوره درجهبندی سفارشی مرتبط
- هیچ ارتباطی با دوره نمرهدهی وجود ندارد
۱. ارتباط دوره درجهبندی بر اساس تاریخ
هنگام ایجاد CourseWork، میتوانید به Classroom اجازه دهید تا ارتباط دوره نمرهدهی را برای شما مدیریت کند. برای انجام این کار، فیلد gradingPeriodId را از درخواست CourseWork حذف کنید. سپس، فیلدهای dueDate یا scheduledTime را در درخواست CourseWork مشخص کنید. اگر dueDate در محدوده تاریخ دوره نمرهدهی موجود قرار گیرد، Classroom شناسه دوره نمرهدهی آن را در CourseWork تنظیم میکند. اگر فیلد dueDate مشخص نشده باشد، Classroom بر اساس فیلد scheduledTime gradingPeriodId را تعیین میکند. اگر هیچکدام از فیلدها مشخص نشده باشند، یا اگر هیچ تطابقی با محدوده تاریخ دوره نمرهدهی وجود نداشته باشد، هیچ gradingPeriodId در CourseWork تنظیم نخواهد شد.
۲. دوره درجهبندی سفارشی مرتبط
اگر میخواهید CourseWork را با دوره نمرهدهی متفاوتی نسبت به دورهای که با dueDate یا scheduledTime همسو است مرتبط کنید، میتوانید هنگام ایجاد یا بهروزرسانی CourseWork، فیلد gradingPeriodId را به صورت دستی تنظیم کنید. اگر gradingPeriodId را به صورت دستی تنظیم کنید، Classroom ارتباط خودکار دوره نمرهدهی مبتنی بر تاریخ را انجام نخواهد داد.
۳. هیچ ارتباطی با دوره درجهبندی وجود ندارد
اگر نمیخواهید CourseWork به هیچ دوره نمرهدهی مرتبط باشد، فیلد gradingPeriodId را در درخواست CourseWork روی یک رشته خالی تنظیم کنید ( gradingPeriodId : "" )
اگر از زبان برنامهنویسی Go استفاده میکنید و میخواهید هیچ دوره نمرهدهی تعیین نکنید، باید فیلد ForceSendFields را نیز در بدنه درخواست وارد کنید. در کتابخانه کلاینت Go، مقادیر پیشفرض به دلیل وجود برچسب فیلد omitempty در همه فیلدها، از درخواستهای API حذف میشوند. فیلد ForceSendFields این مورد را نادیده میگیرد و رشته خالی را ارسال میکند تا نشان دهد که نمیخواهید هیچ دوره نمرهدهی برای آن CourseWork تعیین شود. برای اطلاعات بیشتر به مستندات کتابخانه کلاینت Google APIs Go مراجعه کنید.
برو
courseWork := &classroom.CourseWork{
Title: "Homework questions",
WorkType: "ASSIGNMENT",
State: "DRAFT",
// ...other CourseWork fields...
GradingPeriodId: "",
ForceSendFields: []string{"GradingPeriodId"},
}
اگر تاریخ سررسید بهروزرسانی شود، چه اتفاقی برای شناسه دوره نمرهدهی میافتد؟
اگر فیلد CourseWork dueDate را بهروزرسانی میکنید و میخواهید یک ارتباط دوره نمرهدهی سفارشی یا بدون آن را حفظ کنید، باید dueDate و gradingPeriodId در updateMask و بدنه درخواست قرار دهید. این به Classroom میگوید که gradingPeriodId با دوره نمرهدهی که با dueDate جدید مطابقت دارد، بازنویسی نکند.
پایتون
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()