使用Google Drive API(PHP)列出文件时出错

时间:2016-06-23 08:35:42

标签: php google-drive-api

我尝试使用Google的PHP API(https://developers.google.com/drive/v2/web/quickstart/php)列出Google云端硬盘中的文件。

我设法获得了一个范围访问令牌,但Google为列表文件(https://developers.google.com/drive/v2/reference/files/list#response)提供的示例代码却返回错误。

这是我的代码:

$client = new Google_Client();
    $client->setAuthConfigFile('/usr/share/nginx/google.json');
    $client->setAccessToken($a4e->user->google_token); // access token scoped for DRIVE_READONLY
    $drive_service = new Google_Service_Drive($client);

    $files=retrieveAllFiles($drive_service);
    var_dump($files);

    function retrieveAllFiles($service) {
      $result = array();
      $pageToken = NULL;

      do {
        try {
          $parameters = array();
          if ($pageToken) {
            $parameters['pageToken'] = $pageToken;
          }
          $files = $service->files->listFiles($parameters);

          $result = array_merge($result, $files->getItems());
          $pageToken = $files->getNextPageToken();
        } catch (Exception $e) {
          print "An error occurred: " . $e->getMessage();
          $pageToken = NULL;
        }
      } while ($pageToken);
      return $result;
    }

这会返回以下错误:

  

致命错误:调用未定义的方法   Google_Service_Drive_FileList :: getItems()in   第30行/usr/share/nginx/html/tools/google/index.php

有谁知道我做错了什么?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

我猜您正在使用Drive API V3并尝试在V3中调用V2版本的方法。清楚地查看文档,Drive API V2以以下格式{ "kind": "drive#fileList", "etag": etag, "selfLink": string, "nextPageToken": string, "nextLink": string, "items": [ files Resource ] }返回响应 所以你可以在V2中做$files->getItems()。但是,Drive API V3会按以下格式{ "kind": "drive#fileList", "nextPageToken": string, "files": [ files Resource ] }返回列表的回复 因此,您可能需要执行$files->getFiles()。试试看 !!我希望这会奏效。供你参考 Drive API V3 Listing Response Drive API V2 Listing Response 。如果问题得到解决,请告诉我。