我需要表单PHP级别,在后台没有用户交互登录谷歌驱动器和获取文件列表。我找到了类似topic和问题工作的代码,但需要手动登录,我需要在后台从php登录。
在second帖子中包含可能登录用户互动的代码,但我不知道哪里有错误。 我的代码PHP:
<?php
require_once 'vendor/autoload.php';
require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_DriveService.php';
require_once 'src/auth/Google_AssertionCredentials.php';
$client_email = 'xxxxxx@xxxxxxxxxxxxx.xxx.gserviceaccount.com';
$private_key = file_get_contents('key.p12');
$user_to_impersonate = 'xxxxxxxxxxxxxxx@gmail.com';
$scopes = array('https://www.googleapis.com/auth/drive');
$credentials = new Google_AssertionCredentials(
$client_email,
$scopes,
$private_key,
'notasecret', // Default P12 password
'http://oauth.net/grant_type/jwt/1.0/bearer', // Default grant type
$user_to_impersonate
);
$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$service = new Google_Service_Drive($client);
$files = $service->files->listFiles();
echo "count files=".count($files)."<br>";
foreach( $files as $item ) {
echo "title=".$item['title']."<br>";
}
?>
我从this指令获取的供应商目录,以及我从此GitHub获取的其他文件
我遇到了函数Google_Auth_AssertionCredentials
的问题,PHP没有使用此函数的文件。我发现文件src/auth/Google_AssertionCredentials.php
具有类似的功能Google_AssertionCredentials
。我包含Google_AssertionCredentials.php
文件并更改了函数名称。
最后我有了新的错误:
PHP致命错误:无法调用构造函数 \ google_drive \供应商\谷歌\ apiclient服务的\ src \谷歌\服务\ Drive.php 第75行
我不知道再做什么。我在google驱动器上尝试了许多其他方法,例如。使用API_KEY或通过json文件加载文件列表GET方法。
结果我想获取文件列表,下载它们。编辑和上传。
任何sugestions?
修改
我有部分成功。我找到了liblary this,它们使用了这段代码:
<?php
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;
}
session_start();
require_once '/google-api-php-client/autoload.php';
$client_email = 'xxxx@xxxxx.iam.gserviceaccount.com';
$user_to_impersonate = 'xxxxxx@gmail.com';
$private_key = file_get_contents('key.p12');
$scopes = array('https://www.googleapis.com/auth/drive');
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key,
'notasecret', // Default P12 password
'http://oauth.net/grant_type/jwt/1.0/bearer',
$user_to_impersonate
);
$client = new Google_Client();
if(isset($_SESSION['service_token'])==false && $_SESSION['service_token']=='') {
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($credentials);
}
$_SESSION['service_token'] = $client->getAccessToken();
}
if(isset($_SESSION['service_token']) && $_SESSION['service_token']) {
$client->setAccessToken($_SESSION['service_token']);
if ($client->isAccessTokenExpired()) {
$client->refreshToken($client->getRefreshToken());
$_SESSION['service_token'] = $client->getAccessToken();
}
$service = new Google_Service_Drive($client);
print_r(retrieveAllFiles($service));
}
?>
结果我只有一个文件[originalFilename] => Getting started
,这是PDF,但我在Gogle dirve上看不到这个文件。在谷歌驱动器上我上传了文件:README.md
。
我不确定,但也许这个文件在&#39; xxxx@xxxxx.iam.gserviceaccount.com'并且脚本未记录到&#39; xxxxxx@gmail.com'?