php服务器谷歌驱动器下载文件在后台

时间:2016-10-09 20:50:26

标签: php google-drive-api google-api-php-client

我需要表单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'?

0 个答案:

没有答案