Google Drive API(PHP)无法列出文件 [英] Google Drive API (PHP) can't list files

查看:115
本文介绍了Google Drive API(PHP)无法列出文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写应用程序以从Google云端硬盘中检索文件(在我自己的云端硬盘帐户中)。



我创建了Google服务帐户以避免OAuth因为我使用的是自己的Google云端硬盘帐户。 然后,我从Google获取了此代码示例:

 函数buildService(){

$ SERVICE_ACCOUNT_EMAIL ='xxxx@developer.gserviceaccount.com';
$ SERVICE_ACCOUNT_PKCS12_FILE_PATH ='xxx-privatekey.p12';

$ key = file_get_contents($ SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$ auth = new Google_AssertionCredentials(
$ SERVICE_ACCOUNT_EMAIL,
array('https://www.googleapis.com/auth/drive'),
$ key);
$ client = new Google_Client();
$ client-> setUseObjects(true);
$ client-> setAssertionCredentials($ auth);

返回新的Google_DriveService($ client);



$ b函数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发生错误:。 $ E->的getMessage();
$ pageToken = NULL;
}
} while($ pageToken);
返回$ result;
}


$ service = buildService();

$ allFiles = retrieveAllFiles($ service);

print_r($ allFiles);

当我有文件和文件夹时,它返回一个空数组:

 阵列


在配置中,电子邮件和私钥是OK的,由Google自己提供;我做错了什么?

解决方案

尝试更改此处的代码 https://developers.google.com/drive/delegation

  function buildService($ userEmail){

$ SERVICE_ACCOUNT_EMAIL ='xxxx@developer.gserviceaccount.com';
$ SERVICE_ACCOUNT_PKCS12_FILE_PATH ='xxx-privatekey.p12';

$ key = file_get_contents($ SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$ auth = new Google_AssertionCredentials(
$ SERVICE_ACCOUNT_EMAIL,
array('https://www.googleapis.com/auth/drive'),
$ key);
$ auth-> sub = $ userEmail;
$ client = new Google_Client();
$ client-> setUseObjects(true);
$ client-> setAssertionCredentials($ auth);

返回新的Google_DriveService($ client);
}

// ...函数retrieveAllFiles($ service)

$ service = buildService(some @ mail);
$ allFiles = retrieveAllFiles($ service);
print_r($ allFiles);


I'm programming an app to retrieve files from Google Drive (in my own drive account).

I've created a Google Service Account to avoid the OAuth process because I'm using my own Google Drive account.

Then I've taken this code example from Google:

function buildService() {

$SERVICE_ACCOUNT_EMAIL = 'xxxx@developer.gserviceaccount.com'; 
$SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxx-privatekey.p12';

  $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
  $auth = new Google_AssertionCredentials(
      $SERVICE_ACCOUNT_EMAIL,
      array('https://www.googleapis.com/auth/drive'),
      $key);
  $client = new Google_Client();
  $client->setUseObjects(true);
  $client->setAssertionCredentials($auth);

  return new Google_DriveService($client);
}



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;
}


$service = buildService();

$allFiles = retrieveAllFiles($service);

print_r($allFiles);

It returns an empty array when I've there files and folders:

Array
(
)

In the configuration the email and the private key are OK, provided by Google itself; what I'm doing wrong?

解决方案

Try to change code like here https://developers.google.com/drive/delegation:

  function buildService($userEmail) {

   $SERVICE_ACCOUNT_EMAIL = 'xxxx@developer.gserviceaccount.com'; 
   $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxx-privatekey.p12';

   $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
   $auth = new Google_AssertionCredentials(
     $SERVICE_ACCOUNT_EMAIL,
     array('https://www.googleapis.com/auth/drive'),
     $key);
   $auth->sub = $userEmail;
   $client = new Google_Client();
   $client->setUseObjects(true);
   $client->setAssertionCredentials($auth);

   return new Google_DriveService($client);
 }

 //... function retrieveAllFiles($service) 

 $service = buildService("some@mail");
 $allFiles = retrieveAllFiles($service);
 print_r($allFiles);

这篇关于Google Drive API(PHP)无法列出文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆