谷歌教室api学生名单

时间:2017-11-24 18:55:12

标签: php google-api google-classroom

任何人都可以帮助我使用Google Classroom API列出特定班级的学生。我已经搜索了API文档,但我似乎无法找到如何做到这一点。

我基本上需要这样做 https://developers.google.com/classroom/reference/rest/v1/courses.students/list

这是我正在使用的代码。它适用于其他功能(例如$service->students->listCoursesStudents($course_id);):

function G_Course_Roster($course_id) {

    $clientId = '111111111111111111'; 
    $serviceAccountName = 'name@vocal-affinity-11111111.iam.gserviceaccount.com';
    $delegatedAdmin = 'email@email.net';
    // service account p12 key file:
    $keyFile = '/home/rootfolder/vendor/Google OAuth Login-1111111111.p12';
    $appName = 'name';
    $scopes = array(
        'https://www.googleapis.com/auth/classroom.profile.emails',
        'https://www.googleapis.com/auth/classroom.profile.photos',
        'https://www.googleapis.com/auth/classroom.rosters.readonly'
        );
    $creds = new Google_Auth_AssertionCredentials(
        $serviceAccountName,
        $scopes,
        file_get_contents($keyFile)
    ); 
    $creds->sub = $delegatedAdmin;
    $client = new Google_Client();
    $client->setApplicationName($appName);
    $client->setClientId($clientId);
    $client->setAssertionCredentials($creds);
    $service = new Google_Service_Classroom($client);
    $optParams = array(
        'courseId' => $course_id
    );
    $response = $service->students->listCoursesStudents($course_id);
    return $response;

}

2 个答案:

答案 0 :(得分:0)

我已尝试过在Apps脚本中运行正常。以下是代码段:

function listStudent(){

var optionalArgs = {
    pageSize: 10
  };
  var response = Classroom.Courses.list(optionalArgs);
  var courses = response.courses;
  if (courses && courses.length > 0) {
    for (i = 0; i < courses.length; i++) {
      var course = courses[i];
      Logger.log('%s (%s)', course.name, course.id);

      var response2 = Classroom.Courses.Students.list(course.id)
      var students = response2.students;
      if(students && students.length > 0){
      for (j = 0; j < students.length; j++){
           var student = students[j];
           Logger.log('%s (%s)', student.profile, student.userId);
           }
      }


    }
  } else {
    Logger.log('No courses found.');
  }

}

你可以测试一下,如果这不是PHP代码,请道歉。

希望这有帮助。

答案 1 :(得分:0)

这是我提出的代码。此代码在单独的选项卡中列出每个课程的学生。

限制似乎是Classroom API由于某种原因不会返回超过30名学生。

    function listStudents() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var optionalArgs = {
    pageSize: 0
  }; 

  //var response = Classroom.Courses.list();
  var courses = Classroom.Courses.list(optionalArgs).courses;


 for (var c = 0; c < courses.length; c++) {
      var course = courses[c];
      var courseName = course.name;
      var courseId = course.id;
      var students = Classroom.Courses.Students.list(courseId).students;        

  ss.insertSheet(course.name); 
  ss.getRange("A1").setValue('Last Name');
  ss.getRange("B1").setValue('First Name');
  ss.getRange("C1").setValue('Email');
  ss.getRange("D1").setValue('ID');
  ss.getActiveSheet().getRange(1,1,1,4).setBackground('silver').setFontSize(12).setFontWeight('bold');
  ss.setFrozenRows(1);


  for( var i = 0; i<students.length; i++) {


     var student = students[i]; 
     var profile = student.profile;
     var firstName = profile.name.givenName;
     var lastName = profile.name.familyName;
     var email = profile.emailAddress;

     SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(i+2, 1).setValue(lastName);
     SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(i+2, 2).setValue(firstName);
     SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(i+2, 3).setValue(email);
     SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(i+2, 4).setValue(email.substring(1,6));

  }
 }
}