Как я могу получить список опубликованных курсовых работ из класса во время аутентификации в качестве студента в Google Classroom API? - PullRequest
0 голосов
/ 01 апреля 2020

Как указано в вопросе, я пытаюсь получить список всех опубликованных курсовых работ из моих классов. Я использовал страницу googles "PHP quick start" в документации API класса (https://developers.google.com/classroom/quickstart/php), чтобы начать работу. Мне удалось успешно запустить аутентифицированный API-клиент, и я смог распечатать список имен своих классов (как показано на вышеупомянутой странице "PHP quick start").

Я попробовал два метода получения списка курсовых работ.

  1. Из ссылки на класс (школьный класс и объектно-ориентированный класс!) Запустите функцию getCourseMaterialSets .

    # Before the code you see here, $client is set to an authenticated google API client
    $service = new Google_Service_Classroom($client);
    
    $mycourses = $service->courses->listCourses();
    $courseId = $mycourses->getCourses()[1]->getId();
    
    # This always returns 0 because the array is empty - I have tried several courses that definitely have coursework set.
    echo count($mycourses->getCourses($courseId)[1]->getCourseMaterialSets());
    

    Это всегда возвращает пустой массив, даже если я уверен, что в рассматриваемом классе установлен курс (как показано на рисунке ниже). This image shows the coursework that should have been returned.

  2. Используя $ service-> courses_courseWork-> listCoursesCourseWork ($ courseId), я смогу получить доступ к списку курсовых работ. Тем не менее, это выдает ошибку, которая говорит мне: «У запроса недостаточно областей аутентификации». Это странно, потому что студенты должны иметь доступ к опубликованным курсовым работам и по умолчанию listCoursesCourseWork возвращает только опубликованные курсовые работы. Вот код:

    # Before the code you see here, $client is set to a valid student client
    $service = new Google_Service_Classroom($client);
    
    $mycourses = $service->courses->listCourses();
    $courseId = $mycourses->getCourses()[1]->getId();
    
    # This throws an error that states "Request had insufficient authentication scopes."
    echo count($service->courses_courseWork->listCoursesCourseWork($courseId));
    

    И это ошибка:

    Fatal error: Uncaught Google_Service_Exception: { "error": { "code": 403, "message": "Request had insufficient authentication scopes.", "errors": [ { "message": "Insufficient Permission", "domain": "global", "reason": "insufficientPermissions" } ], "status": "PERMISSION_DENIED" } } in /myWorkingDirectory/vendor/google/apiclient/src/Google/Http/REST.php:118 Stack trace: #0 /myWorkingDirectory/vendor/google/apiclient/src/Google/Http/REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #1 /myWorkingDirectory/vendor/google/apiclient/src/Google/Task/Runner.php(176): Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #2 /myWorkingDirectory/ in /myWorkingDirectory/vendor/google/apiclient/src/Google/Http/REST.php on line 118
    

Подводя итог, я не могу найти способ получить список опубликовал курсовую работу из класса. Помните, что я делаю это из учетной записи учащегося, и поэтому у меня будут ограниченные разрешения (но у меня должны быть разрешения, необходимые для просмотра опубликованных курсовых работ в классе, к которому я присоединился).

1 Ответ

1 голос
/ 01 апреля 2020

Вы должны предоставить одну или несколько необходимых областей авторизации . Если вы используете область действия, указанную в быстром запуске, этого недостаточно для courses.courseWork.list API.

Список доступных областей можно найти в Google_Service_Classroom, или вы можете используйте сам URL.

// either of the following should work.
$client->setScopes([
    Google_Service_Classroom::CLASSROOM_COURSEWORK_ME,
    'https://www.googleapis.com/auth/classroom.coursework.me'
]);

Попробуйте выбрать как можно меньше областей действия, чтобы выполнить sh то, что вам нужно.

...