3

這是我這麼遠,通過結合thisthis如何通過Drive API創建公共谷歌文檔(PHP客戶端)

require_once "google-api-php-client/src/Google_Client.php"; 
require_once "google-api-php-client/src/contrib/Google_DriveService.php"; 
require_once "google-api-php-client/src/contrib/Google_Oauth2Service.php"; 

//First, build a Drive service object authorized with the service accounts 
$auth = new Google_AssertionCredentials(
    DRIVE_SERVICE_ACCOUNT_EMAIL, 
    array(DRIVE_SCOPE), 
    file_get_contents(DRIVE_SERVICE_ACCOUNT_KEY) 
); 
$client = new Google_Client(); 
$client->setUseObjects(true); 
$client->setAssertionCredentials($auth); 
$service = new Google_DriveService($client); 

//Then, insert the file 
$file = new Google_DriveFile(); 
$file->setTitle('My document'); 
$file->setMimeType('text/plain'); 
$createdFile = $service->files->insert($file, array(
    'data' => 'Hello world!', 
    'mimeType' => 'text/plain', 
)); 

print_r($createdFile); 

它的工作原理,這意味着它會創建一個文本/ plain文件並返回一個包含其元數據的數組。但是,我想要的是創建一個Google文檔,而不是文本/純文本。我嘗試了將MIME類型(兩種外觀)改爲「application/vnd.google-apps.document」,但得到了以下結果:

致命錯誤:未收到的異常'Google_ServiceException'帶消息'Error calling POST https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart: (400)Bad Request'in /local/path/to/google-api-php-client/src/io/Google_REST.php:66

此外,我需要將文檔公開訪問。當我通過上述方法上傳文本/純文件,然後嘗試瀏覽它時(來自不同於上傳者的帳戶),我被告知需要許可。我把在$createdFile陣列定睛一看,發現沒有價值「共享」鍵,所以很天真我想它設置爲1:

$file->setShared(1); 

它沒有工作,而且,當我再看看陣列,我注意到'共享'鍵仍然沒有分配給它的值。我在網上查找任何可能幫助我的文檔,但沒有運氣。任何人都可以幫助我?謝謝!!

回答

7

經過多次閱讀和測試,我找到了我的問題的答案。

問題在於文件的「數據」參數:Google文檔不能將純文本作爲數據(其數據需要包含某些標頭或其他內容)。所以通過刪除'data'參數(以及'mimeType',爲什麼不),我得到的錯誤消失了。

至於權限,解決方案是先用默認權限創建文件,然後添加一個新的權限。

下面我粘貼最少的代碼來創建可公開訪問的谷歌文檔:

require_once "google-api-php-client/src/Google_Client.php"; 
require_once "google-api-php-client/src/contrib/Google_DriveService.php"; 
require_once "google-api-php-client/src/contrib/Google_Oauth2Service.php"; 

//Build the Drive Service object authorized with your Service Account 
$auth = new Google_AssertionCredentials(
    DRIVE_SERVICE_ACCOUNT_EMAIL, 
    array(DRIVE_SCOPE), 
    file_get_contents(DRIVE_SERVICE_ACCOUNT_KEY) 
); 
$client = new Google_Client(); 
$client->setUseObjects(true); 
$client->setAssertionCredentials($auth); 
$service = new Google_DriveService($client); 

//Create the file 
$file = new Google_DriveFile(); 
$file->setTitle('Hello world!'); 
$file->setMimeType('application/vnd.google-apps.document'); 
$file = $service->files->insert($file); 

//Give everyone permission to read and write the file 
$permission = new Google_Permission(); 
$permission->setRole('writer'); 
$permission->setType('anyone'); 
$permission->setValue('me'); 
$service->permissions->insert($file->getId(), $permission); 

print_r($file); 
+2

嗨,我試圖做同樣的,但我不能找到新的Google_Permission的代碼()。我的錯誤總是 - 致命錯誤:類'Google_Permission'未找到...有人可以給我一個鏈接到源。 https://github.com/google/google-api-php-client - 沒有這個課程! – SuperYegorius

+0

是的,與@SuperYegorius相同的問題。我找不到Google使用的Google_Permission。 –

+2

看起來它已更名爲'Google_Service_Drive_Permission',而無需更新文檔或phpdoc –

相關問題