Người dùng của bạn có đang sử dụng Lớp học với Google Meet không? Hãy tham khảo bài viết hướng dẫn nhanh về Apps Script để biết cách điểm danh học viên trong các khóa học của Google Meet.

Quản lý Bài tập trên lớp

Lớp học có 5 loại Bài tập trên lớp: Bài tập, Bài kiểm tra, Câu hỏi (câu trả lời ngắn và câu hỏi trắc nghiệm) và Tài liệu. API Lớp học hiện cho phép nhà phát triển đọc và ghi ba loại sau: Bài tập, Câu hỏi và Tài liệu.

Để sử dụng chức năng này, bạn có thể sử dụng tài nguyên Khóa học, đại diện cho một Bài tập hoặc Câu hỏi đã được giao cho học viên trong một khóa học cụ thể, bao gồm cả mọi tài liệu và thông tin chi tiết bổ sung, chẳng hạn như ngày đến hạn hoặc điểm tối đa.

Ngoài tài nguyên về khoá học, bạn có thể quản lý bài tập đã hoàn thành bằng tài nguyên studentSubmission (Tài khoản của học viên). Các phần sau đây sẽ mô tả chi tiết hơn.

Tạo bài tập

Chỉ có thể tạo bài tập thay mặt cho(các) giáo viên của khóa học và việc cố gắng tạo bài tập trong một khóa học thay mặt cho học viên sẽ dẫn đến lỗi PERMISSION_DENIED 403. Tương tự như vậy, quản trị viên miền cũng không thể tạo bài tập cho các khóa học mà họ không dạy và cố gắng làm vậy thông qua API cũng sẽ dẫn đến lỗi 403 PERMISSION_DENIED.

Khi tạo bài tập, bạn có thể đính kèm đường liên kết dưới dạng materials, hiển thị trong mã mẫu dưới đây:

Python

classroom/snippets/classroom_create_coursework.py
from __future__ import print_function

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def classroom_create_coursework(course_id):

    """
    Creates the coursework the user has access to.
    Load pre-authorized user credentials from the environment.
    TODO(developer) - See https://developers.google.com/identity
    for guides on implementing OAuth2 for the application.
    """

    creds, _ = google.auth.default()
    # pylint: disable=maybe-no-member

    try:
        service = build('classroom', 'v1', credentials=creds)
        coursework = {
            'title': 'Ant colonies',
            'description': '''Read the article about ant colonies
                              and complete the quiz.''',
            'materials': [
                {'link': {'url': 'http://example.com/ant-colonies'}},
                {'link': {'url': 'http://example.com/ant-quiz'}}
            ],
            'workType': 'ASSIGNMENT',
            'state': 'PUBLISHED',
        }
        coursework = service.courses().courseWork().create(
            courseId=course_id, body=coursework).execute()
        print(f"Assignment created with ID {coursework.get('id')}")
        return coursework

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error


if __name__ == '__main__':
    # Put the course_id of course whose coursework needs to be created,
    # the user has access to.
    classroom_create_coursework(453686957652)

Kết quả bao gồm một giá trị nhận dạng máy chủ có thể dùng để tham chiếu đến sự chỉ định trong các yêu cầu API khác.

Để đưa các tài liệu được liên kết vào một bài tập được tạo thông qua API Lớp học, hãy sử dụng Tài nguyên liên kết, trong đó chỉ định URL mục tiêu. Lớp học sẽ tự động tìm nạp tiêu đề và hình thu nhỏ. API Lớp học cũng hỗ trợ sẵn các tài liệu trên Drive và YouTube. Tài liệu này có thể đi kèm với một tài nguyên DriveFile hoặc tài nguyên YouTubeVideo theo cách tương tự.

Để chỉ định ngày đến hạn, hãy đặt các trường dueDatedueTime thành giờ UTC tương ứng. Ngày đến hạn phải là ngày trong tương lai.

Truy xuất bài tập và câu hỏi

Bạn có thể truy xuất bài tập và câu hỏi của học viên và giáo viên của khóa học tương ứng hoặc của quản trị viên miền. Để truy xuất một bài tập hoặc câu hỏi cụ thể, hãy sử dụngcourse.courseWork.get. Để truy xuất tất cả bài tập hoặc câu hỏi (không bắt buộc khớp với một số tiêu chí), hãy sử dụng courses.courseWork.list.

Phạm vi bắt buộc tuỳ thuộc vào vai trò của người dùng yêu cầu trong khoá học. Nếu người dùng là học viên, hãy sử dụng một trong các phạm vi sau:

  • https://www.googleapis.com/auth/classroom.coursework.me.readonly
  • https://www.googleapis.com/auth/classroom.coursework.me

Nếu người dùng là giáo viên hoặc quản trị viên miền, hãy sử dụng một trong các phạm vi sau:

  • https://www.googleapis.com/auth/classroom.coursework.students.readonly
  • https://www.googleapis.com/auth/classroom.coursework.students

Việc có quyền truy xuất bài tập hoặc câu hỏi không có nghĩa là quyền truy cập vào tài liệu hoặc siêu dữ liệu tài liệu. Trên thực tế, điều này có nghĩa là quản trị viên có thể không thấy tiêu đề của một tệp trên Drive đính kèm nếu họ không phải là thành viên của khóa học. Nếu bạn muốn cho phép quản trị viên truy cập vào các tệp của người dùng, hãy xem hướng dẫn Ủy quyền trên toàn miền.

Quản lý bài làm của học viên

Tài nguyên studentSubmission (Tài liệu của học viên phụ) đại diện cho bài tập và điểm của học viên cho một bài tập hoặc câu hỏi. Tài nguyên studentSubmission được tạo ngầm cho từng học viên khi một câu hỏi hoặc bài tập mới được tạo.

Các phần sau giải thích những thao tác phổ biến giúp quản lý bài làm của học viên.

Truy xuất bài làm của học viên

Học viên có thể truy xuất bài làm của riêng mình, giáo viên có thể truy xuất bài làm cho tất cả học viên trong khóa học và quản trị viên miền có thể truy xuất tất cả bài nộp cho tất cả học viên trong miền của họ. Mỗi bài tập học viên nộp sẽ được gán một giá trị nhận dạng. Nếu bạn biết giá trị nhận dạng, hãy sử dụng khóa học.courses.courseWork.studentSubmissions.get để lấy giá trị.

Sử dụngcourse.courseWork.studentSubmissions.list để lấy studentSubmission phù hợp với một số tiêu chí, như trình bày trong mẫu sau:

Python

classroom/snippets/classroom_list_submissions.py
from __future__ import print_function

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def classroom_list_submissions(course_id, coursework_id):
    """
    Creates the courses the user has access to.
    Load pre-authorized user credentials from the environment.
    TODO(developer) - See https://developers.google.com/identity
    for guides on implementing OAuth2 for the application.
    """

    creds, _ = google.auth.default()
    # pylint: disable=maybe-no-member
    submissions = []
    page_token = None

    try:
        service = build('classroom', 'v1', credentials=creds)
        while True:
            coursework = service.courses().courseWork()
            response = coursework.studentSubmissions().list(
                pageToken=page_token,
                courseId=course_id,
                courseWorkId=coursework_id,
                pageSize=10).execute()
            submissions.extend(response.get('studentSubmissions', []))
            page_token = response.get('nextPageToken', None)
            if not page_token:
                break

        if not submissions:
            print('No student submissions found.')

        print('Student Submissions:')
        for submission in submissions:
            print(f"Submitted at:"
                  f"{(submission.get('id'), submission.get('creationTime'))}")

    except HttpError as error:
        print(f"An error occurred: {error}")
        submissions = None
    return submissions


if __name__ == '__main__':
    # Put the course_id and coursework_id of course whose list needs to be
    # submitted.
    classroom_list_submissions(453686957652, 466086979658)

Truy xuất bài tập học viên đã nộp của một học viên cụ thể bằng cách chỉ định thông số userId, như trong mẫu sau:

Python

classroom/snippets/classroom_list_student_submits.py
from __future__ import print_function

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def classroom_list_student_submissions(course_id, coursework_id, user_id):
    """
    Creates the courses the user has access to.
    Load pre-authorized user credentials from the environment.
    TODO(developer) - See https://developers.google.com/identity
    for guides on implementing OAuth2 for the application.
    """

    creds, _ = google.auth.default()
    # pylint: disable=maybe-no-member
    submissions = []
    page_token = None

    try:
        service = build('classroom', 'v1', credentials=creds)
        while True:
            coursework = service.courses().courseWork()
            response = coursework.studentSubmissions().list(
                pageToken=page_token,
                courseId=course_id,
                courseWorkId=coursework_id,
                userId=user_id).execute()
            submissions.extend(response.get('studentSubmissions', []))
            page_token = response.get('nextPageToken', None)
            if not page_token:
                break

        if not submissions:
            print('No student submissions found.')

        print('Student Submissions:')
        for submission in submissions:
            print(f"Submitted at:"
                  f"{(submission.get('id'), submission.get('creationTime'))}")

    except HttpError as error:
        print(f"An error occurred: {error}")
    return submissions


if __name__ == '__main__':
    # Put the course_id, coursework_id and user_id of course whose list needs
    # to be submitted.
    classroom_list_student_submissions(453686957652, 466086979658, "me")

Học viên được xác định bằng mã nhận dạng duy nhất hoặc địa chỉ email của người dùng, do SDK quản trị trả về của Google trả về. Người dùng hiện tại cũng có thể tham chiếu đến mã nhận dạng của riêng họ bằng cách viết tắt "me".

Bạn cũng có thể nhận bài tập đã nộp cho tất cả bài tập trong một khóa học. Để thực hiện việc này, hãy sử dụng giá trị cố định là "-" làm nơi xử lý khoá công việc, như hiển thị trong mẫu sau:

Python

service.courses().courseWork().studentSubmissions().list(
    courseId=<course ID or alias>,
    courseWorkId='-',
    userId=<user ID>).execute()

Phạm vi bắt buộc tuỳ thuộc vào vai trò của người dùng yêu cầu trong khoá học. Sử dụng phạm vi sau nếu người dùng là giáo viên hoặc quản trị viên miền:

  • https://www.googleapis.com/auth/classroom.coursework.students.readonly
  • https://www.googleapis.com/auth/classroom.coursework.students

Hãy sử dụng phạm vi sau nếu người dùng là học viên:

  • https://www.googleapis.com/auth/classroom.coursework.me.readonly
  • https://www.googleapis.com/auth/classroom.coursework.me

Việc có quyền truy xuất bài làm của học viên không có nghĩa là bạn có quyền truy cập vào tệp đính kèm hoặc siêu dữ liệu đính kèm. Trên thực tế, điều này có nghĩa là quản trị viên có thể không thấy tiêu đề của một tệp trên Drive đính kèm nếu họ không phải là thành viên của khóa học. Nếu bạn muốn cho phép quản trị viên truy cập vào tệp của người dùng, hãy xem hướng dẫn Ủy quyền trên toàn miền.

Thêm tệp đính kèm vào bài làm của học viên

Bạn có thể đính kèm đường liên kết đến một bài nộp của học viên bằng cách đính kèm đường liên kết, tệp Drive hoặc tài nguyên YouTube. Bạn có thể thực hiện việc này bằng cách tham gia courses.courseWork.studentSubmissions.Modify chúng xuất hiện, như trong mẫu sau:

Python

classroom/snippets/classroom_add_attachment.py

def classroom_add_attachment(course_id, coursework_id, submission_id):
    """
    Adds attachment to existing course with specific course_id.
    Load pre-authorized user credentials from the environment.
    TODO(developer) - See https://developers.google.com/identity
    for guides on implementing OAuth2 for the application.
    """
    creds, _ = google.auth.default()
    # pylint: disable=maybe-no-member
    request = {
        'addAttachments': [
            {'link': {'url': 'http://example.com/quiz-results'}},
            {'link': {'url': 'http://example.com/quiz-reading'}}
        ]
    }

    try:
        service = build('classroom', 'v1', credentials=creds)
        while True:
            coursework = service.courses().courseWork()
            coursework.studentSubmissions().modifyAttachments(
                courseId=course_id,
                courseWorkId=coursework_id,
                id=submission_id,
                body=request).execute()

    except HttpError as error:
        print(f"An error occurred: {error}")


if __name__ == '__main__':
    # Put the course_id, coursework_id and submission_id of course in which
    # attachment needs to be added.
    classroom_add_attachment('course_id', 'coursework_id', "me")

Tệp đính kèm được xác định theo URL mục tiêu. Lớp học sẽ tự động tìm nạp tiêu đề và hình thu nhỏ. Bạn có thể tìm hiểu về các tài liệu khác tại trang tham khảo tương ứng của chúng.

Tài liệu có thể do giáo viên khóa học hoặc học viên sở hữu bài tập tương ứng mà học viên tạo ra, nhưng chỉ dành cho những bài tập học viên có courseWorkType"ASSIGNMENT".

Phạm vi bắt buộc tuỳ thuộc vào vai trò của người dùng yêu cầu trong khoá học. Dùng phạm vi sau nếu người dùng là giáo viên:

  • https://www.googleapis.com/auth/classroom.coursework.students

Hãy sử dụng phạm vi sau nếu người dùng là học viên:

  • https://www.googleapis.com/auth/classroom.coursework.me

Quản lý trạng thái phản hồi của học viên

Nội dung phản hồi của học viên có thể chưa được gửi, đã nộp hoặc bị trả lại. Trường trạng thái trong studentSubmission cho biết trạng thái hiện tại. Để thay đổi trạng thái, hãy gọi một trong các phương thức sau:

Tất cả các phương thức này đều nhận một phần nội dung trống. Ví dụ:

Python

service.courses().courseWork().studentSubmission().turnIn(
    courseId=<course ID or alias>,
    courseWorkId=<courseWork ID>,
    id=<studentSubmission ID>,
    body={}).execute()

Chỉ học viên sở hữu một studentSubmission mới có thể nộp hoặc nhận lại. Chỉ có thể xác nhận lại nội dung đã gửi. Giáo viên trong khoá học chỉ có thể trả về một Hệ thống nhận tài trợ của học viên ở trạng thái đã nộp.

Chấm điểm bài làm của học viên

Tài nguyên studentSubmission có hai trường để lưu trữ điểm: assignedGrade, là điểm được báo cáo cho học viên và draftGrade, là điểm dự kiến chỉ hiển thị cho giáo viên. Các trường này được cập nhật bằng cách sử dụng courses.courseWork.studentSubmissions.patch với mặt nạ trường chứa các trường thích hợp, như minh họa trong mẫu sau.

Python

studentSubmission = {
  'assignedGrade': 99,
  'draftGrade': 80
}
service.courses().courseWork().studentSubmissions().patch(
    courseId=<course ID or alias>,
    courseWorkId=<courseWork ID>,
    id=<studentSubmission ID>,
    updateMask='assignedGrade,draftGrade',
    body=studentSubmission).execute()

Khi làm việc với giao diện người dùng Lớp học, giáo viên không thể chấm điểm cho đến khi họ lưu hình thức chấm điểm trước. Sau đó, điểm đã chỉ định có thể được trả lại cho học viên. Ứng dụng cần mô phỏng hành vi này. Ứng dụng của bạn có thể chấm điểm bài tập của học viên theo một trong hai cách:

  • Chỉ định draftGrade. Ví dụ: cách này hữu ích khi cho phép giáo viên xem lại điểm trước khi hoàn tất điểm. Học viên không thể xem điểm không chính thức.

  • Giao cả draftGradeassignedGrade để chấm điểm toàn bộ một bài tập.