首页 > 解决方案 > 如何使用 php 中的 api 从 Google Classroom 中检索草稿成绩

问题描述

我想使用项目的 API 从 Google Classroom 读取草稿成绩。但我找不到草稿等级。我已经在 quickstart.php 文件中添加了一些代码:

require __DIR__ . '/vendor/autoload.php';

// if (php_sapi_name() != 'cli') {
//     throw new Exception('This application must be run on the command line.');
// }

/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
function getClient()
{
 $client = new Google_Client();
 $client->setApplicationName('Google Classroom API PHP Quickstart');
 $client->setScopes(array(
   Google_Service_Classroom::CLASSROOM_COURSES, 
   Google_Service_Classroom::CLASSROOM_STUDENT_SUBMISSIONS_STUDENTS_READONLY, 
   Google_Service_Classroom::CLASSROOM_ROSTERS)
 );  
 $client->setAuthConfig(__DIR__ .'/credentials.json');
 $client->setAccessType('offline');
 $client->setPrompt('select_account consent');

 // Load previously authorized token from a file, if it exists.
 // 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.
 $tokenPath = 'token.json';
 if (file_exists($tokenPath)) {
     $accessToken = json_decode(file_get_contents($tokenPath), true);
     $client->setAccessToken($accessToken);
 }

 // If there is no previous token or it's expired.
 if ($client->isAccessTokenExpired()) {
     // Refresh the token if possible, else fetch a new one.
     if ($client->getRefreshToken()) {
         $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
     } else {
         // Request authorization from the user.
         $authUrl = $client->createAuthUrl();
         printf("Open the following link in your browser:\n%s\n", $authUrl);
         print 'Enter verification code: ';
         $authCode = trim(fgets(STDIN));

         // Exchange authorization code for an access token.
         $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
         $client->setAccessToken($accessToken);

         // Check to see if there was an error.
         if (array_key_exists('error', $accessToken)) {
             throw new Exception(join(', ', $accessToken));
         }
     }
     // Save the token to a file.
     if (!file_exists(dirname($tokenPath))) {
         mkdir(dirname($tokenPath), 0700, true);
     }
     file_put_contents($tokenPath, json_encode($client->getAccessToken()));
 }
 return $client;
}



$optParams = array(
'pageSize' => 1000
);

// Copyright 2021 Google LLC.
// SPDX-License-Identifier: Apache-2.0

// Get the API client and construct the service object.
$client = getClient();
$service = new Google_Service_Classroom($client);

// set these parameters:
// 328776504166 <- It is my course id 
// 339429593407 <- It is my course work id
$courseId = "328776504166";
$courseWorkId = "339429593407";



$results = $service->courses_courseWork_studentSubmissions->listCoursesCourseWorkStudentSubmissions($courseId, $courseWorkId);

foreach ($results->studentSubmissions as $r => $submission) {
 $student = $service->courses_students->get($courseId, $submission->userId);
 $studentName = $student->profile->name->fullName;

 print("<br>Student Name: ".$studentName . ": ");

 print("<br>Draft Grade: ".$submission->draftGrade. "\n");
 print("<br>Course Work Id: ".$submission->courseWorkId. "\n");


 echo '<pre>';
 print_r($submission);
}

然后,当我在 localhost 运行 quickstart.php 时,可以看到以下问题:

Fatal error: Uncaught Google_Service_Exception: { "error": { "code": 400, "message": "Precondition check failed.", "errors": [ { "message": "Precondition check failed.", "domain": "global", "reason": "failedPrecondition" } ], "status": "FAILED_PRECONDITION" } } in C:\xampp\htdocs\api\vendor\google\apiclient\src\Google\Http\REST.php:118 Stack trace: #0

我找不到我的错。如何解决这个问题呢?请给我一些建议。

标签: google-apigoogle-api-php-clientgoogle-api-clientgoogle-workspacegoogle-classroom

解决方案


文档中所述:

学生看不到草稿成绩

这就是为什么打算检索草稿成绩的学生会得到 403 - "Insufficient Permission"错误的原因。


推荐阅读