如何使用 PHP 从 Google Clas-s-room 课程列表中过滤课程对象字段
Posted
技术标签:
【中文标题】如何使用 PHP 从 Google Clas-s-room 课程列表中过滤课程对象字段【英文标题】:How to Filter course object fields from Google Clas-s-room courses list using PHP 【发布时间】:2021-12-18 10:16:52 【问题描述】:我想从 Google 课堂课程列表中过滤课程对象字段。当我为课程列表调用 API 时,它会响应所有对象。但我想要特定的课程对象名称,课程列表中的部分。
$optParams = array(
'pageSize' => 100,
'courses' => 'name','section',
'fields' => 'courses(id)'
);
$results = $service->courses->listCourses($optParams);
如何使用 PHP 从课程列表中获取特定的课程对象名称和部分。
以下问题显示代码是否测试
Fatal error: Uncaught Google\Exception: (list) unknown parameter: 'courses' in C:\xampp\htdocs\clas-s-room\vendor\google\apiclient\src\Service\Resource.php:153 Stack trace: #0 C:\xampp\htdocs\clas-s-room\vendor\google\apiclient-services\src\Clas-s-room\Resource\Courses.php(122): Google\Service\Resource->call('list', Array, 'Google\\Service\\...') #1 C:\xampp\htdocs\clas-s-room\quickstart1.php(70): Google\Service\Clas-s-room\Resource\Courses->listCourses(Array) #2 C:\xampp\htdocs\clas-s-room\quickstart1.php(132): test('406487331584') #3 main thrown in C:\xampp\htdocs\clas-s-room\vendor\google\apiclient\src\Service\Resource.php on line 153
如果代码部分如下所示,则响应中的所有对象名称都没有值,并显示我想要的字段对象名称、部分和值。
$optParams = array(
'pageSize' => 100,
'fields' => 'courses(name,section)'
);
$results = $service->courses->listCourses($optParams);
列出课程响应对象:
[courses] => Array
(
[0] => Google\Service\Clas-s-room\Course Object
(
[collection_key:protected] => courseMaterialSets
[alternateLink] =>
[calendarId] =>
[courseGroupEmail] =>
[courseMaterialSetsType:protected] => Google\Service\Clas-s-room\CourseMaterialSet
[courseMaterialSetsDataType:protected] => array
[courseState] =>
[creationTime] =>
[description] =>
[descriptionHeading] =>
[enrollmentCode] =>
[guardiansEnabled] =>
[id] =>
[name] => android
[ownerId] =>
[room] =>
[section] => PC-D
[teacherFolderType:protected] => Google\Service\Clas-s-room\DriveFolder
[teacherFolderDataType:protected] =>
[teacherGroupEmail] =>
[updateTime] =>
[internal_gapi_mappings:protected] => Array
(
)
[modelData:protected] => Array
(
)
[processed:protected] => Array
(
)
)
[1] => Google\Service\Clas-s-room\Course Object
(
[collection_key:protected] => courseMaterialSets
[alternateLink] =>
[calendarId] =>
[courseGroupEmail] =>
[courseMaterialSetsType:protected] => Google\Service\Clas-s-room\CourseMaterialSet
[courseMaterialSetsDataType:protected] => array
[courseState] =>
[creationTime] =>
[description] =>
[descriptionHeading] =>
[enrollmentCode] =>
[guardiansEnabled] =>
[id] =>
[name] => CSS
[ownerId] =>
[room] =>
[section] => PC-D
[teacherFolderType:protected] => Google\Service\Clas-s-room\DriveFolder
[teacherFolderDataType:protected] =>
[teacherGroupEmail] =>
[updateTime] =>
[internal_gapi_mappings:protected] => Array
(
)
[modelData:protected] => Array
(
)
[processed:protected] => Array
(
)
)
但我需要如下所示:
[courses] => Array
(
[0] => Google\Service\Clas-s-room\Course Object
(
[name] => Android
[section] => PC-D
)
)
【问题讨论】:
【参考方案1】:您要查找的是名为partial response 的内容。据我所知,所有的 google api 都支持它。
它的工作方式是您请求要查看的属性。开始工作可能有点棘手,我建议在将其添加到代码之前使用文档页面上的 try me 进行测试。
让我们看看它是如何工作的。
这是您的方法的响应对象。它返回一个课程列表。所以你可能想要的第一件事就是课程。
"courses": [
object (Course)
],
"nextPageToken": string
然后您可能希望将对象限制在课程中。这是一个course object 一个课程对象有一个id。那么,如果您只想要所有课程的所有 ID 怎么办。
代码应该是这样的。
$optParams = array(
'pageSize' => 100,
'courses' => 'name','section',
'fields' => 'courses(id)'
);
$results = $service->courses->listCourses($optParams);
请注意,我无权访问此 API,因此无法对其进行测试,如果您有任何问题,请告诉我。
更新问题和评论
字段的作用是确保只返回您要求的字段。因此,从外观上看,我建议的更改正在发挥作用
但是你说你想看到这样的东西
[courses] => Array
(
[0] => Google\Service\Clas-s-room\Course Object
(
[name] => Android
[section] => PC-D
)
)
这是不可能的。 API 只会在您请求的字段中返回空值,部分响应只是为了使请求更快。您的代码应该忽略空字段。
【讨论】:
@DalmTo 我已经测试了你的代码,然后我更新了我的问题。请检查一下。 检查我的更新你不能这样做 @DalmTo 非常感谢。是的,现在我明白了。我的问题完全解决了。 如果对你有帮助请记得采纳答案。以上是关于如何使用 PHP 从 Google Clas-s-room 课程列表中过滤课程对象字段的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 从 Google Clas-s-room 课程列表中过滤课程对象字段
如何使用 PHP 检测“Google Chrome”作为用户代理?