1

我正在做一个小页面,列出了谷歌驱动器中的所有文件。第一次进行身份验证并保存刷新令牌+用户ID和电子邮件,然后列出所有文件。要获取信息,我这样做:

$result = array();
$pageToken = NULL;
do {
  try {             
    $parameters = array();
    if ($pageToken) {
      $parameters['pageToken'] = $pageToken;
    }

    $files = $service->files->listFiles($parameters);
    $list=$files->getItems();

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

它可以工作,但是如果用户刷新页面,我确实刷新了访问令牌(从 db 获取刷新令牌),然后继续执行与上面相同的操作。在这种情况下,该代码给了我一个错误,因为这次我得到一个关联数组:

$files = $service->files->listFiles($parameters);

为了使其工作,我需要将代码更改为:

$result = array();
$pageToken = NULL;
do {
  try {
    $parameters = array();
    if ($pageToken) {
      $parameters['pageToken'] = $pageToken;
    }
    $files = $service->files->listFiles($parameters);
    $list=$files['items'];
    $result = array_merge($result,$list);
    $pageToken = $files['nextPageToken'];
  } catch (Exception $e) {
    echo "An error occurred: " . $e->getMessage();
    $pageToken = NULL;
  }
} while ($pageToken);

这不应该发生,但我不知道出了什么问题。

4

1 回答 1

4

从该类的相关php源中,我想我找到了让您烦恼的原因。看Google_DriveService.php

// ~Line 119
public function listFiles($optParams = array()) {
  $params = array();
  $params = array_merge($params, $optParams);
  $data = $this->__call('list', array($params));
  if ($this->useObjects()) {                       // THIS CALL HERE
    return new Google_FileList($data);
  } else {
    return $data;
  }
}

它检查您是否要使用对象:$this->useObjects(). 此方法在超类中定义Google_ServiceResource.php

// ~Line 180
public  function useObjects() {
  global $apiConfig;
  return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
}

这告诉我,当您配置服务时,您必须设置'use_object'true.

于 2012-11-09T18:10:42.443 回答