LoginSignup
0
1

More than 1 year has passed since last update.

Google Classromで自分のクラスの学生リスト取得

Last updated at Posted at 2022-07-21

Google Classroomで学生ごとの処理をGASでやりたい場合、まず対象クラスの学生情報リストを取得することになります。Classroom APIでは日本語で「クラス」と言っている対象はCourseに該当しますが、面倒なので本稿ではクラス=コース、の意味でまぜこぜで使います。

基本的にはClassroom.Courses.list().coursesでクラス(コース)のリストを取得し、nameが対象クラスのクラス名に等しいものについて処理するのが簡単です(コースのidが分かっていればClassroom.Courses.get(id) で一発でとれますが、筆者の知る範囲ではコースidを調べるには結局list()で取ってnameの一致でidを特定することになるので、だったらそこもコードに含めてしまえ、ということです)。

ただ、list()で返ってくる学生数は固定で30となっているようで、全員の情報を取得するには返ってくるリスト情報に含まれるnextPageTokenを使って尽きるまで取り続ける必要があります。
Google APIの他のリスト系関数ではmaxResultsで上限数を上書きできるものもありますが、どうもClassroom.Coursesではそもそもこのパラメータがないらしい…。

で、単純にググってもなかなかこれ!という記事を見つけられなかったので、自分でまとめてみたのが末尾のコードです。というか必要な情報は断片的にあちこちに散らばってるのでそれをつなぎ合わせただけですが。

要点は、list()で取得する学生リストには、更に続きがあればnextPageTokenが含まれていて、
リストを取りつくしたらnullが返ってくるので、do { } while()nextPageTokenがnullになるまで回す、というだけです。

んにしても上限30って少ない気がする…。

function gSLtestByName() {
  let course = 'Google Classroomのリスト取得';
  let students = getStudentListByName(course);

  students.map(function(s) { console.log(s['profile']['name']['fullName']); });
}

function getStudentListByName(target) {
  let studentList = [];
  let courses = Classroom.Courses.list().courses;
  let course = courses.filter(function(c) {return c['name'] === target; })

  let nextPageToken = null;
  do {
    let students = Classroom.Courses.Students.list(
      course[0]['id'],{pageToken: nextPageToken}
    );
    studentList = studentList.concat(students['students']);
    nextPageToken = students.nextPageToken;
  } while(nextPageToken != null);

  return studentList;
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1