我尝试使用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
有谁知道我做错了什么?
非常感谢提前。
答案 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
。如果问题得到解决,请告诉我。