2017-06-28 28 views
0

Googleドライブに表示されるすべてのフォルダのリストを取得しようとしています。 フォルダを確認することができます。既に存在しているかどうか。そうでなければ、私は1つを作成することができます。 GoogleドライブのPHP APIはフォルダの空のリストを返しますが、Googleドライブ(ブラウザ経由)にはたくさんのフォルダが表示されます。Googleドライブのphp apiがGoogleドライブのフォルダを返さない

<?php 

class gdrive{ 

    //credentials (get those from google developer console https://console.developers.google.com/) 

var $clientId = "1047996724365-MyID.apps.googleusercontent.com"; 

var $clientSecret = "MySecret"; 
var $redirectUri = 'http://localhost/google_drive2/gdrive_upload.php'; 

    //variables 
    var $fileRequest; 
    var $mimeType; 
    var $filename; 
    var $path; 
    var $client; 


    function __construct(){ 
     require_once 'src/Google/autoload.php'; // get from here https://github.com/google/google-api-php-client.git 
     require_once 'src/Google/Client.php'; // get from here https://github.com/google/google-api-php-client.git 
     //require_once 'src/Google/Drive.php'; // get from here https://github.com/google/google-api-php-client.git 

     $this->client = new Google_Client(); 
    } 


    function initialize(){ 
     //echo "<br/>initializing class\n"; 
     $client = $this->client; 

     $client->setClientId($this->clientId); 
     $client->setClientSecret($this->clientSecret); 
     $client->setRedirectUri($this->redirectUri); 
     $client->addScope(
    "https://www.googleapis.com/auth/drive", 
    "https://www.googleapis.com/auth/drive.appfolder"); 


     $refreshToken = file_get_contents(__DIR__ . "/token.txt"); 

     $client->refreshToken($refreshToken); 
     $tokens = $client->getAccessToken(); 

     $client->setAccessToken($tokens); 
     //$client->setDefer(true); 
     $this->processFile(); 

    } 

    function processFile(){ 

     $fileRequest = $this->fileRequest; 
     //echo "Process File $fileRequest\n"; 
     $path_parts = pathinfo($fileRequest); 
     $this->path = $path_parts['dirname']; 
     $finfo = finfo_open(FILEINFO_MIME_TYPE); 
     $this->mimeType = finfo_file($finfo, $fileRequest); 
     finfo_close($finfo); 

     //echo "Mime type is " . $this->mimeType . "\n"; 

     $this->upload(); 

    } 


/** 
* Get the folder ID if it exists, if it doesnt exist, create it and return the ID 
* 
* @param Google_DriveService $service Drive API service instance. 
* @param String $folderName Name of the folder you want to search or create 
* @param String $folderDesc Description metadata for Drive about the folder (optional) 
* @return Google_Drivefile that was created or got. Returns NULL if an API error occured 
*/ 
function getFolderExistsCreate($service, $folderName, $folderDesc) { 
error_reporting(E_ALL); ini_set('display_errors', 1); 
    $parameters['q'] = "mimeType='application/vnd.google-apps.folder' and trashed=false"; 
    $files = $service->files->listFiles($parameters); 
    $found = false; 
    // Go through each one to see if there is already a folder with the specified name 

print_r($files);exit; /****************RESPONSE ON THIS LINE *********/ 


    foreach ($files['items'] as $item) { 
     if ($item['title'] == $folderName) { 
      $found = true; 
      return $item['id']; 
      break; 
     } 
    } 
    // If not, create one 
    if ($found == false) { 
     $folder = new Google_Service_Drive_DriveFile(); 
     //Setup the folder to create 
     $folder->setTitle($folderName); 
     if(!empty($folderDesc)) 
      $folder->setDescription($folderDesc); 
     $folder->setMimeType('application/vnd.google-apps.folder'); 
     //Create the Folder 
     try { 
      $createdFile = $service->files->insert($folder, array(
       'mimeType' => 'application/vnd.google-apps.folder', 
       )); 
      // Return the created folder's id 
      echo $createdFile->id; 
     } catch (Exception $e) { 
      print "An error occurred: " . $e->getMessage(); 
     } 
    } 





exit; 

/* 
     $client = new Google_Client(); 
     $client->setClientId($this->clientId); 
     $client->setClientSecret($this->clientSecret); 
     $client->setRedirectUri($this->redirectUri); 

     $refreshToken = file_get_contents(__DIR__ . "/token.txt"); 

     $client->refreshToken($refreshToken); 
     $tokens = $client->getAccessToken(); 
     $client->setAccessToken($tokens); 
     $client->setDefer(true); 

     $service = new Google_Service_Drive($client); 
    // List all user files (and folders) at Drive root 
    $parameters['q'] = "mimeType='application/vnd.google-apps.folder' and trashed=false"; 
    $files = $service->files->listFiles($parameters); 
    print_r($files);exit; 
*/ 
    $found = false; 
    // Go through each one to see if there is already a folder with the specified name 
    foreach ($files['items'] as $item) { 
     if ($item['title'] == $folderName) { 
      $found = true; 
      return $item['id']; 
      break; 
     } 
    } 
    // If not, create one 
    if ($found == false) { 
     $folder = new Google_Service_Drive_DriveFile(); 
     //Setup the folder to create 
     $folder->setTitle($folderName); 
     if(!empty($folderDesc)) 
      $folder->setDescription($folderDesc); 
     $folder->setMimeType('application/vnd.google-apps.folder'); 
     //Create the Folder 
     try { 
      $createdFile = $service->files->insert($folder, array(
       'mimeType' => 'application/vnd.google-apps.folder', 
       )); 
      // Return the created folder's id 
      return $createdFile->id; 
     } catch (Exception $e) { 
      print "An error occurred: " . $e->getMessage(); 
     } 
    } 
} 

    function upload(){ 
     $client = $this->client; 
     $service = new Google_Service_Drive($client); 

    $folderName='aaaaaaa'; 
    $folderDesc='Folder Desc'; 

// Setup the folder you want the file in, if it is wanted in a folder 
    if(isset($folderName)) { 
     if(!empty($folderName)) { 
      //$parent = new Google_Service_Drive_ParentReference(); 
      //$parent->setId(getFolderExistsCreate($service, $folderName, $folderDesc)); 
      $parent=$this->getFolderExistsCreate($service, $folderName, $folderDesc); 
      print_r($parent);exit; 
      $file->setParents(array($parent)); 
     } 
    } 




     $file = new Google_Service_Drive_DriveFile(array(
    'name' => $this->filename)); 
     $file->title = "a.txt"; 
     $chunkSizeBytes = 1 * 1024 * 1024; 

     $fileRequest = $this->fileRequest; 
     $mimeType = $this->mimeType; 

     //$request = $service->files->create($file); 

     // Create a media file upload to represent our upload process. 
     $media = new Google_Http_MediaFileUpload(
      $client, 
      $request, 
      $mimeType, 
      null, 
      true, 
      $chunkSizeBytes 
     ); 
     $media->setFileSize(filesize($fileRequest)); 

     // Upload the various chunks. $status will be false until the process is 
     // complete. 
     $status = false; 
     $handle = fopen($fileRequest, "rb"); 

     // start uploading  
     //echo "Uploading: " . $this->filename . "\n"; 

     $filesize = filesize($fileRequest); 

     // while not reached the end of file marker keep looping and uploading chunks 
     while (!$status && !feof($handle)) { 
      $chunk = fread($handle, $chunkSizeBytes); 
      $status = $media->nextChunk($chunk); 
     } 

     // The final value of $status will be the data from the API for the object 
     // that has been uploaded. 
     $result = false; 
     if($status != false) { 
      $result = $status; 
     } 

     fclose($handle); 
     // Reset to the client to execute requests immediately in the future. 
     $client->setDefer(false); 
     ?>https://drive.google.com/open?id=<?= $result->id ?><?php 
    } 

} 

?> 

しかし、そのは、この応答を返す: - - :ここで

は、私が使用しているクラスで、私は間違っているところ

Google_Service_Drive_FileList Object ([collection_key:protected] => files [filesType:protected] => Google_Service_Drive_DriveFile [filesDataType:protected] => array [kind] => drive#fileList [nextPageToken] => [internal_gapi_mappings:protected] => Array () [modelData:protected] => Array ([incompleteSearch] => [files] => Array ()) [processed:protected] => Array ()) 

を教えてください?

答えて

1

セキュリティ上の理由から、ユーザーのドライブアカウントのすべてのファイルを一覧表示する方法はありません。これについては、先にSO postにチェックしてください。また

は、ドライブのAPIの助成金は、ファイルの2クラスにのみアクセス:

  • ファイル、ユーザは、ユーザが指定したドライブアプリで開くことを考えると、ドライブアプリ
  • ファイルで作成されたことを

推奨リンクを確認するには、Googleドライブのファイルとフォルダのうちmanage sharingが必要な場合があります。また、Permissions collectionを使用してAPI経由でアクセス許可を管理することに加えて、ユーザーはファイルを共有できる標準のGoogleドライブ共有ダイアログを表示できます。権限を持つ

、あなたはその後、Files.listを使用して続行し、クエリパラメータで指定することがあります。ルートディレクトリにフォルダを返す必要があります

('root' in parents and mimeType = 'application/vnd.google-apps.folder') 

。 Try-itを使用してテストします。

あなたはより多くの情報については、以下のリンクをチェックすることもできます。

関連する問題