如何使用 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 电子钱包?

如何在 PHP 中访问 Google 电子表格 API?

如何使用 PHP 检测“Google Chrome”作为用户代理?

如何使用 PHP 在重定向页面上使用 Google Analytics 进行跟踪?

使用 API 从 Google 日历中检索事件