如何在 Google 课堂中使用主题名称获取主题 ID?

How can I get a Topic ID using Topic Name in Google Classroom?

我正在使用 Google Apps 脚本在几个 Google 教室中的每个教室中之前创建的几个主题下创建作业。我知道主题名称,但不知道 ID - 有没有一种方法可以使用名称创建作业以获取 ID?

这是我正在尝试的(但 topicID 最终为 null 而不是实际 ID):

function addAssignments() {
  var courseIds = ['100000000000','100000000001'];
  var topicNames = ['Topic1','Topic2'];
  for (var i = 0; i < courseIds.length; i++) {
    for (var j = 0; j < topicNames.length; j++) {
      var topicId = topicNames[j].topicID; 
      var exec = Classroom.Courses.CourseWork.create({
            title: "My Assignment",
            topicId: topicId,
            workType: "ASSIGNMENT",
        }, courseIds[i]);
      }
    }
  }

查看 (But this is making a new Topic in the process of making the Assignment - my Topics are already made), and Is there an example of the Classroom.Courses.Topics.get so I can call Classroom.Courses.CourseWork.create with an existing topicId? (But, when I tried courses.topics.get(),我想不出一种快速的方法来从响应中获取我需要的 ID - 问题也可能是我的迭代或其他问题,所以我将其包含在我的代码示例)。

我相信你的目标如下。

  • 您想从主题名称中检索主题 ID,并使用 Google Apps 脚本使用检索到的主题 ID 创建课程。

为此,这个答案怎么样?

修改点:

  • var topicId = topicNames[j].topicID;,您尝试从 var topicNames = ['Topic1','Topic2']; 的数组中检索 topicID
  • 为了检索主题ID,使用了"courses.topics.list"的方法。
  • 在这次修改中,我使用了以下流程。
    1. 检索主题 ID 列表。
    2. 创建用于从主题名称搜索主题 ID 的对象。
    3. 使用检索到的主题 ID 创建课程作业。

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本:

function addAssignments() {
  var courseIds = ['100000000000','100000000001'];
  var topicNames = ['Topic1','Topic2'];
  for (var i = 0; i < courseIds.length; i++) {

    var topics = Classroom.Courses.Topics.list(courseIds[i]).topic;  // Added
    var topicObj = topics.reduce((o, e) => Object.assign(o, {[e.name]: e.topicId}), {});  // Added

    for (var j = 0; j < topicNames.length; j++) {

      var topicId = topicObj[topicNames[j]];  // Added

      var exec = Classroom.Courses.CourseWork.create({
        title: "My Assignment",
        topicId: topicId,
        workType: "ASSIGNMENT",
      }, courseIds[i]);
    }
  }
}

注:

  • 在此修改后的脚本中,它假设 Google 教室 API 已经在高级 Google 服务中启用。 Ref

参考: