【问题标题】:How to Filter course object fields from Google Classroom courses list using PHP如何使用 PHP 从 Google Classroom 课程列表中过滤课程对象字段
【发布时间】: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\classroom\vendor\google\apiclient\src\Service\Resource.php:153 Stack trace: #0 C:\xampp\htdocs\classroom\vendor\google\apiclient-services\src\Classroom\Resource\Courses.php(122): Google\Service\Resource->call('list', Array, 'Google\\Service\\...') #1 C:\xampp\htdocs\classroom\quickstart1.php(70): Google\Service\Classroom\Resource\Courses->listCourses(Array) #2 C:\xampp\htdocs\classroom\quickstart1.php(132): test('406487331584') #3 {main} thrown in C:\xampp\htdocs\classroom\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\Classroom\Course Object
                (
                    [collection_key:protected] => courseMaterialSets
                    [alternateLink] => 
                    [calendarId] => 
                    [courseGroupEmail] => 
                    [courseMaterialSetsType:protected] => Google\Service\Classroom\CourseMaterialSet
                    [courseMaterialSetsDataType:protected] => array
                    [courseState] => 
                    [creationTime] => 
                    [description] => 
                    [descriptionHeading] => 
                    [enrollmentCode] => 
                    [guardiansEnabled] => 
                    [id] => 
                    [name] => Android
                    [ownerId] => 
                    [room] => 
                    [section] => PC-D
                    [teacherFolderType:protected] => Google\Service\Classroom\DriveFolder
                    [teacherFolderDataType:protected] => 
                    [teacherGroupEmail] => 
                    [updateTime] => 
                    [internal_gapi_mappings:protected] => Array
                        (
                        )

                    [modelData:protected] => Array
                        (
                        )

                    [processed:protected] => Array
                        (
                        )

                )

            [1] => Google\Service\Classroom\Course Object
                (
                    [collection_key:protected] => courseMaterialSets
                    [alternateLink] => 
                    [calendarId] => 
                    [courseGroupEmail] => 
                    [courseMaterialSetsType:protected] => Google\Service\Classroom\CourseMaterialSet
                    [courseMaterialSetsDataType:protected] => array
                    [courseState] => 
                    [creationTime] => 
                    [description] => 
                    [descriptionHeading] => 
                    [enrollmentCode] => 
                    [guardiansEnabled] => 
                    [id] => 
                    [name] => CSS
                    [ownerId] => 
                    [room] => 
                    [section] => PC-D
                    [teacherFolderType:protected] => Google\Service\Classroom\DriveFolder
                    [teacherFolderDataType:protected] => 
                    [teacherGroupEmail] => 
                    [updateTime] => 
                    [internal_gapi_mappings:protected] => Array
                        (
                        )

                    [modelData:protected] => Array
                        (
                        )

                    [processed:protected] => Array
                        (
                        )

                )

但我需要如下所示:

 [courses] => Array
        (
            [0] => Google\Service\Classroom\Course Object
                (
                    
                    [name] => Android                
                    [section] => PC-D
                   
                   
                )
         )

【问题讨论】:

    标签: php google-api google-api-php-client google-classroom


    【解决方案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\Classroom\Course Object
                    (
                        
                        [name] => Android                
                        [section] => PC-D
                       
                       
                    )
             )
    

    这是不可能的。 API 只会在您请求的字段中返回空值,部分响应只是为了使请求更快。您的代码应该忽略空字段。

    【讨论】:

    • @DalmTo 我已经测试了你的代码,然后我更新了我的问题。请检查一下。
    • 检查我的更新你不能这样做
    • @DalmTo 非常感谢。是的,现在我明白了。我的问题完全解决了。
    • 如果对你有帮助请记得采纳答案。
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多