학생과 교사는 사용자 프로필과 과정 간의 특정 매핑으로, 해당 사용자의 과정 내 역할을 나타냅니다. 학생 및 교사 지정은 전역이 아닙니다. 한 수업에서는 교사로, 다른 수업에서는 학생으로 할당될 수 있습니다. '학생' 또는 '교사' 지정은 특정 과정의 특정 사용자에 대한 권한 집합을 나타냅니다.
- 학생
- Student 리소스는 특정 과정에 학생으로 등록된 사용자를 나타냅니다. 학생은 해당 과정의 과정 세부정보와 교사를 볼 수 있습니다.
- 교사
- 선생님 리소스는 특정 과정을 가르치는 사용자를 나타냅니다. 교사는 강의 세부정보를 보고 변경하고, 교사와 학생을 보고, 추가 교사와 학생을 관리할 수 있습니다.
학생과 교사는 Directory API에서 반환한 사용자의 고유 ID 또는 이메일 주소로 식별됩니다.
현재 사용자는 "me"
약어를 사용하여 자신의 ID를 참조할 수도 있습니다.
직접 추가
도메인 관리자는 초대 절차를 우회하고 도메인 내 사용자를 도메인 내 강의에 교사 또는 학생으로 직접 추가할 수 있습니다. 과정의 소유자가 관리자의 도메인에 있는 경우 과정이 관리자의 도메인 내에 있는 것으로 간주됩니다. 인증된 도메인 관리자의 도메인 외부에 있는 사용자 또는 과정의 경우 애플리케이션은 invitations.create()
메서드로 초대를 보내 사용자의 동의를 얻어야 합니다.
교사 추가 또는 삭제
도메인 관리자는 다음 샘플과 같이 teachers.create()
를 사용하여 도메인 내 교사를 강의에 직접 추가할 수 있습니다.
.NET
using Google.Apis.Auth.OAuth2; using Google.Apis.Classroom.v1; using Google.Apis.Classroom.v1.Data; using Google.Apis.Services; using System; using System.Net; using Google; namespace ClassroomSnippets { // Class to demonstrate the use of Classroom Create Teacher API public class AddTeacher { /// <summary> /// Add teacher to the Course /// </summary> /// <param name="courseId"></param> /// <param name="teacherEmail"></param> /// <returns></returns> public static Teacher ClassroomAddTeacher( string courseId, string teacherEmail) { try { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ GoogleCredential credential = GoogleCredential.GetApplicationDefault() .CreateScoped(ClassroomService.Scope.ClassroomRosters); // Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "Classroom API Snippet" }); var teacher = new Teacher { UserId = teacherEmail }; // Add the teacher to the course. teacher = service.Courses.Teachers.Create(teacher, courseId).Execute(); Console.WriteLine( "User '{0}' was added as a teacher to the course with ID '{1}'.\n", teacher.Profile.Name.FullName, courseId); return teacher; } catch (Exception e) { // TODO(developer) - handle error appropriately if (e is AggregateException) { Console.WriteLine("Credential Not found"); } else if (e is GoogleApiException) { Console.WriteLine("Failed to Add the teacher. Error message: {0}", e.Message); } else { throw; } } return null; } } }
자바
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.googleapis.json.GoogleJsonError; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.classroom.Classroom; import com.google.api.services.classroom.ClassroomScopes; import com.google.api.services.classroom.model.Teacher; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.Arrays; /* Class to demonstrate the use of Classroom Add Teacher API */ public class AddTeacher { /* Scopes required by this API call. If modifying these scopes, delete your previously saved tokens/ folder. */ static ArrayList<String> SCOPES = new ArrayList<>(Arrays.asList(ClassroomScopes.CLASSROOM_ROSTERS)); /** * Add teacher to a specific course. * * @param courseId - Id of the course. * @param teacherEmail - Email address of the teacher. * @return newly created teacher * @throws IOException - if credentials file not found. * @throws GeneralSecurityException - if a new instance of NetHttpTransport was not created. */ public static Teacher addTeacher(String courseId, String teacherEmail) throws GeneralSecurityException, IOException { // Create the classroom API client. final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Classroom service = new Classroom.Builder( HTTP_TRANSPORT, GsonFactory.getDefaultInstance(), ClassroomCredentials.getCredentials(HTTP_TRANSPORT, SCOPES)) .setApplicationName("Classroom samples") .build(); Teacher teacher = new Teacher().setUserId(teacherEmail); try { // Add a teacher to a specified course teacher = service.courses().teachers().create(courseId, teacher).execute(); // Prints the course id with the teacher name System.out.printf( "User '%s' was added as a teacher to the course with ID '%s'.\n", teacher.getProfile().getName().getFullName(), courseId); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 409) { System.out.printf("User '%s' is already a member of this course.\n", teacherEmail); } else if (error.getCode() == 403) { System.out.println("The caller does not have permission.\n"); } else { throw e; } } return teacher; } }
PHP
use Google\Client; use Google\Service\Classroom; use Google\Service\Classroom\Teacher; use Google\service\Exception; function addTeacher($courseId, $teacherEmail) { /* Load pre-authorized user credentials from the environment. TODO (developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope("https://www.googleapis.com/auth/classroom.profile.photos"); $service = new Classroom($client); $teacher = new Teacher([ 'userId' => $teacherEmail ]); try { // calling create teacher $teacher = $service->courses_teachers->create($courseId, $teacher); printf("User '%s' was added as a teacher to the course with ID '%s'.\n", $teacher->profile->name->fullName, $courseId); } catch (Exception $e) { if ($e->getCode() == 409) { printf("User '%s' is already a member of this course.\n", $teacherEmail); } else { throw $e; } } return $teacher; }
Python
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def classroom_add_teacher(course_id): """ Adds a teacher to a 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 service = build("classroom", "v1", credentials=creds) teacher_email = "gduser1@workspacesamples.dev" teacher = {"userId": teacher_email} try: teachers = service.courses().teachers() teacher = teachers.create(courseId=course_id, body=teacher).execute() print( "User %s was added as a teacher to the course with ID %s" % (teacher.get("profile").get("name").get("fullName"), course_id) ) except HttpError as error: print('User "{%s}" is already a member of this course.' % teacher_email) return error return teachers if __name__ == "__main__": # Put the course_id of course for which Teacher needs to be added. classroom_add_teacher(453686957652)
인증된 교사를 대신하여 교사를 추가하는 경우 invitations.create()
메서드를 사용해야 합니다.
teachers.delete()
메서드를 사용하여 강의에서 교사를 추가로 삭제할 수 있습니다. 이렇게 하면 지정된 교사만 강의에서 삭제되며 다른 강의에 대한 할당이나 사용자 프로필에는 영향을 미치지 않습니다.
학생 등록 또는 삭제
도메인 관리자는 다음 샘플과 같이 students.create()
메서드를 사용하여 도메인 내에서 학생을 직접 추가할 수 있습니다.
.NET
using Google.Apis.Auth.OAuth2; using Google.Apis.Classroom.v1; using Google.Apis.Classroom.v1.Data; using Google.Apis.Services; using System; using System.Net; using Google; namespace ClassroomSnippets { // Class to demonstrate the use of Classroom Create Student API public class AddStudent { public static Student ClassroomAddStudent(string courseId, string enrollmentCode) { try { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ GoogleCredential credential = GoogleCredential.GetApplicationDefault() .CreateScoped(ClassroomService.Scope.ClassroomRosters); var service = new ClassroomService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "Classroom API .NET Quickstart" }); var student = new Student { UserId = "me" }; var request = service.Courses.Students.Create(student, courseId); request.EnrollmentCode = enrollmentCode; student = request.Execute(); Console.WriteLine( "User '{0}' was enrolled as a student in the course with ID '{1}'.\n", student.Profile.Name.FullName, courseId); } catch (Exception e) { // TODO(developer) - handle error appropriately if (e is AggregateException) { Console.WriteLine("Credential Not found"); } else if (e is GoogleApiException) { Console.WriteLine("Failed to Add the Student. Error message: {0}", e.Message); } else { throw; } } return null; } } }
자바
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.googleapis.json.GoogleJsonError; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.classroom.Classroom; import com.google.api.services.classroom.ClassroomScopes; import com.google.api.services.classroom.model.Student; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.Arrays; /* Class to demonstrate the use of Classroom Add Student API */ public class AddStudent { /* Scopes required by this API call. If modifying these scopes, delete your previously saved tokens/ folder. */ static ArrayList<String> SCOPES = new ArrayList<>(Arrays.asList(ClassroomScopes.CLASSROOM_ROSTERS)); /** * Add a student in a specified course. * * @param courseId - Id of the course. * @param enrollmentCode - Code of the course to enroll. * @return newly added student * @throws IOException - if credentials file not found. * @throws GeneralSecurityException - if a new instance of NetHttpTransport was not created. */ public static Student addStudent(String courseId, String enrollmentCode, String studentId) throws GeneralSecurityException, IOException { // Create the classroom API client. final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Classroom service = new Classroom.Builder( HTTP_TRANSPORT, GsonFactory.getDefaultInstance(), ClassroomCredentials.getCredentials(HTTP_TRANSPORT, SCOPES)) .setApplicationName("Classroom samples") .build(); Student student = new Student().setUserId(studentId); try { // Enrolling a student to a specified course student = service .courses() .students() .create(courseId, student) .setEnrollmentCode(enrollmentCode) .execute(); // Prints the course id with the Student name System.out.printf( "User '%s' was enrolled as a student in the course with ID '%s'.\n", student.getProfile().getName().getFullName(), courseId); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 409) { System.out.println("You are already a member of this course."); } else if (error.getCode() == 403) { System.out.println("The caller does not have permission.\n"); } else { throw e; } } return student; } }
PHP
use Google\Client; use Google\Service\Classroom; use Google\Service\Classroom\Student; use Google\Service\Exception; function enrollAsStudent($courseId,$enrollmentCode) { /* Load pre-authorized user credentials from the environment. TODO (developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope("https://www.googleapis.com/auth/classroom.profile.emails"); $service = new Classroom($client); $student = new Student([ 'userId' => 'me' ]); $params = [ 'enrollmentCode' => $enrollmentCode ]; try { $student = $service->courses_students->create($courseId, $student, $params); printf("User '%s' was enrolled as a student in the course with ID '%s'.\n", $student->profile->name->fullName, $courseId); } catch (Exception $e) { if ($e->getCode() == 409) { print "You are already a member of this course.\n"; } else { throw $e; } } return $student; }
Python
import os from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError SCOPES = ["https://www.googleapis.com/auth/classroom.coursework.students"] def classroom_add_student_new(course_id): """ Adds a student to a course, the teacher has access to. The file token.json stores the user's access and refresh tokens, and is created automatically when the authorization flow completes for the first time. 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 = None # The file token.json stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists("token.json"): creds = Credentials.from_authorized_user_file("token.json", SCOPES) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( "credentials.json", SCOPES ) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open("token.json", "w", encoding="utf8") as token: token.write(creds.to_json()) enrollment_code = "abc-def" student = {"userId": "gduser1@workspacesamples.dev"} try: service = build("classroom", "v1", credentials=creds) student = ( service.courses() .students() .create( courseId=course_id, enrollmentCode=enrollment_code, body=student ) .execute() ) print( '''User {%s} was enrolled as a student in the course with ID "{%s}"''' % (student.get("profile").get("name").get("fullName"), course_id) ) return student except HttpError as error: print(error) return error if __name__ == "__main__": # Put the course_id of course for which student needs to be added. classroom_add_student_new(478800920837)
인증된 교사를 대신하여 학생을 추가하는 경우 invitations.create()
메서드를 사용해야 합니다.
students.delete()
메서드를 사용하여 강의에서 학생을 삭제할 수 있습니다. 이렇게 하면 지정된 학생만 강의에서 삭제되며 다른 강의 등록이나 사용자 프로필에는 영향을 미치지 않습니다.
사용자의 강의 검색
학생 또는 교사의 과정 목록을 가져오려면 courses.list()
를 호출하고 해당 사용자의 studentId
또는 teacherId
를 제공합니다.
사용자 프로필 검색
사용자의 ID 및 이름을 포함한 요약된 프로필을 검색하려면 사용자의 ID, 이메일 또는 요청하는 사용자의 'me'를 사용하여 userProfiles.get()
를 호출합니다.
emailAddress
필드를 검색하려면 classroom.profile.emails
범위를 포함해야 합니다.
반환된 ID는 일치하는 studentId
또는 teacherId
가 포함된 Directory API 사용자 리소스에 해당합니다.
강의 소유자 관리
도메인 관리자는 교사 간에 강의 소유권을 이전할 수 있습니다. 중요한 세부정보는 강의 소유권 이전 섹션을 참고하세요.