管理主题

主题资源表示一组按相似性分类的动态项,例如分配的周数或课程主题。

每个主题都由服务器分配的唯一 ID 进行标识。与此 ID 关联的是主题所属的课程 ID、Google 课堂界面上显示的实际主题名称,以及上次更新的日期和时间。

创建主题

您可以使用 topics.create() 方法在课程中创建新主题,如以下示例所示:

classroom/snippets/src/main/java/CreateTopic.java
Topic topic = null;
try {
 
// Create the new Topic.
 
Topic content = new Topic().setName("Semester 1");
  topic
= service.courses().topics().create(courseId, content).execute();
 
System.out.println("Topic id: " + topic.getTopicId() + "\n" + "Course id: " + courseId);
} catch (GoogleJsonResponseException e) {
 
// TODO (developer) - handle error appropriately
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("The courseId does not exist: %s.\n", courseId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return topic;
topic = {
   
"name": 'Example Topic'
}
response
= service.courses().topics().create(
  courseId
=<course ID or alias>,
  body
=topic).execute()
print('Topic created: ', response['name'])

检索主题详情

您可以使用 topics.get() 方法检索相应课程的主题,如以下示例所示:

classroom/snippets/src/main/java/GetTopic.java
Topic topic = null;
try {
 
// Get the topic.
  topic
= service.courses().topics().get(courseId, topicId).execute();
 
System.out.printf("Topic '%s' found.\n", topic.getName());
} catch (GoogleJsonResponseException e) {
 
// TODO (developer) - handle error appropriately
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("The courseId or topicId does not exist: %s, %s.\n", courseId, topicId);
 
}
 
throw e;
} catch (Exception e) {
 
throw e;
}
return topic;
response = service.courses().topics().get(
  courseId
=<course ID or alias>,
  id
=<topic ID>).execute()
print('{0} ({1})'.format(response['name'], response['topicId']))

如需列出课程,请使用 topics.list() 方法,如以下示例所示:

classroom/snippets/src/main/java/ListTopics.java
List<Topic> topics = new ArrayList<>();
String pageToken = null;

try {
 
do {
   
ListTopicResponse response =
        service
           
.courses()
           
.topics()
           
.list(courseId)
           
.setPageSize(100)
           
.setPageToken(pageToken)
           
.execute();

   
/* Ensure that the response is not null before retrieving data from it to avoid errors. */
   
if (response.getTopic() != null) {
      topics
.addAll(response.getTopic());
      pageToken
= response.getNextPageToken();
   
}
 
} while (pageToken != null);

 
if (topics.isEmpty()) {
   
System.out.println("No topics found.");
 
} else {
   
for (Topic topic : topics) {
     
System.out.printf("%s (%s)\n", topic.getName(), topic.getTopicId());
   
}
 
}
} catch (GoogleJsonResponseException e) {
 
// TODO (developer) - handle error appropriately
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("The courseId does not exist: %s.\n", courseId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return topics;
topics = []
page_token
= None
while True:
    response
= service.courses().topics().list(
        pageToken
=page_token,
        pageSize
=30,
        courseId
=<course ID or alias>).execute()
    topics
.extend(response.get('topic', []))
    page_token
= response.get('nextPageToken', None)
   
if not page_token:
       
break
if not topics:
   
print('No topics found.')
else:
   
print('Topics:')
   
for topic in topics:
       
print('{0} ({1})'.format(topic['name'], topic['topicId']))

更新主题

您可以使用 topics.patch() 方法更新现有主题的名称,如以下示例所示:

classroom/snippets/src/main/java/UpdateTopic.java
Topic topic = null;
try {
 
// Retrieve the topic to update.
 
Topic topicToUpdate = service.courses().topics().get(courseId, topicId).execute();

 
// Update the name field for the topic retrieved.
  topicToUpdate
.setName("Semester 2");

 
/* Call the patch endpoint and set the updateMask query parameter to the field that needs to
  be updated. */

  topic
=
      service
         
.courses()
         
.topics()
         
.patch(courseId, topicId, topicToUpdate)
         
.set("updateMask", "name")
         
.execute();

 
/* Prints the updated topic. */
 
System.out.printf("Topic '%s' updated.\n", topic.getName());
} catch (GoogleJsonResponseException e) {
 
// TODO(developer) - handle error appropriately
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("The courseId or topicId does not exist: %s, %s.\n", courseId, topicId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return topic;
topic = {
 
"name": "New Topic Name"
}
response
= service.courses().topics().patch(
  courseId
=<course ID or alias>,
  id
=<topic ID>,
  updateMask
="name",
  body
=topic).execute()
print('{0} ({1})'.format(response['name'], response['topicId']))

删除主题

您可以使用 topics.delete() 方法删除现有主题,如以下示例所示:

classroom/snippets/src/main/java/DeleteTopic.java
try {
  service
.courses().topics().delete(courseId, topicId).execute();
} catch (GoogleJsonResponseException e) {
 
// TODO(developer) - handle error appropriately
 
throw e;
} catch (Exception e) {
 
throw e;
}