我正在做一个列出谷歌驱动器中所有文件的小页面。我第一次进行身份验证并保存刷新令牌+用户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);
这不应该发生,但我不知道出了什么问题。
答案 0 :(得分: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
。