如何使用Google API和PHP创建电子表格并设置适当的权限?

9

I have this

define('CLIENT_SECRET_PATH', __DIR__ . '/config_api.json');
define('ACCESS_TOKEN', '0b502651********c52b3');

我可以创建一张电子表格,获取id和url。
$requestBody = new Google_Service_Sheets_Spreadsheet();
$response = $service->spreadsheets->create($requestBody);
print_r($response);
$new_spr_id = $response['spreadsheetId'];

但是这个电子表格似乎因为被“保护”或者其他原因,没有出现在谷歌表格列表中。 我正在尝试设置权限,但是出现了一个错误:致命错误:调用未定义的方法Google_Service_Drive_Permission::setValue()

insertPermission($service, $new_spr_id, '**@gmail.com' , 'user', 'owner');
function insertPermission($service, $fileId, $value, $type, $role) {
  $newPermission = new Google_Service_Drive_Permission();
  $newPermission->setValue($value);
  $newPermission->setType($type);
  $newPermission->setRole($role);
  try {
    return $service->permissions->insert($fileId, $newPermission);
  } catch (Exception $e) {
    print "An error occurred: " . $e->getMessage();
  }
  return NULL;
}

我需要一个创建新电子表格并为其设置适当权限的示例,以便我可以从我的帐户中修改此电子表格等。非常感谢!

这个链接不够吗? - Sangbok Lee
3个回答

1
你的代码无法定位类并且无法创建Google_Service_Drive_Permission()实例。我建议不要使用单独的函数来创建Google_Service_Drive_Permission()对象。将设置权限的所有代码放在创建文件的代码部分中。此外,如果您正在使用多个文件,请检查您的文件是否被PHP解析器正确加载和定位。因为未定义方法调用的致命错误不是由API方法的实现引起的,而是由调用不存在的方法或PHP解析器无法定位造成的。
参考资料:

http://hotexamples.com/examples/-/Google_Service_Drive_Permission/setValue/php-google_service_drive_permission-setvalue-method-examples.html


-1 是因为已经创建了 Google_Service_Drive_Permission() 实例,而致命错误与该类中没有名为 setValue 的方法有关。我们可以用 setEmailAddress 方法替换 setValue 方法。然而,稍后会触发另一个错误,即 ...->permissions->insert(),因为 permissions 类型是数组。这是 Google API PHP Client 的问题,我还没有找到任何解决方法。 - Hossein Shahsahebi

1

我曾经遇到同样的问题,无法使用专门设计用于更改权限的Google API PHP客户端方法来解决。然而,有可能从PHP客户端中检索具有身份验证信息的Guzzle实例。因此,我们可以简单地调用所需的API端点以发送请求。下面的代码是完整的解决方案,用于在Google Drive上更改文件所有者/权限:

//if you're using Service Account, otherwise follow your normal authorization
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/json');
$client = new Google_Client();
$client->setScopes(Google_Service_Drive::DRIVE);
$client->useApplicationDefaultCredentials();

//Now the main code to change the file permission begins
$httpClient = $client->authorize(); //It returns a Guzzle instance with proper Headers
$result = $httpClient->request('POST', 'https://www.googleapis.com/drive/v3/files/[FILE_ID]/permissions?transferOwnership=true', [
  'json' => [
    'role' => 'owner',
    'type' => 'user', 
    'emailAddress' => 'email@example.com'
  ]
]);

$result->getBody()->getContents() 的示例响应为:

{
 "kind": "drive#permission",
 "id": "14...",
 "type": "user",
 "role": "owner"
}

0

我认为你使用了错误的 API。文件权限设置在Drive API 权限中。

但是回答你的问题,以下是使用Sheets API 的 spreadsheets.create 创建新电子表格的方法:

<?php
/*
 * BEFORE RUNNING:
 * ---------------
 * 1. If not already done, enable the Google Sheets API
 *    and check the quota for your project at
 *    https://console.developers.google.com/apis/api/sheets
 * 2. Install the PHP client library with Composer. Check installation
 *    instructions at https://github.com/google/google-api-php-client.
 */

// Autoload Composer.
require_once __DIR__ . '/vendor/autoload.php';

$client = getClient();

$service = new Google_Service_Sheets($client);

// TODO: Assign values to desired properties of `requestBody`:
$requestBody = new Google_Service_Sheets_Spreadsheet();

$response = $service->spreadsheets->create($requestBody);

// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response, true), '</pre>', "\n";

function getClient() {
  // TODO: Change placeholder below to generate authentication credentials. See
  // https://developers.google.com/sheets/quickstart/php#step_3_set_up_the_sample
  //
  // Authorize using one of the following scopes:
  //   'https://www.googleapis.com/auth/drive'
  //   'https://www.googleapis.com/auth/spreadsheets'
  return null;
}
?>

当文件已经在您的Google Drive中创建并保存后,您现在可以尝试使用Drive REST API设置权限。


1
谢谢您的回答,但是我已经能够使用 $requestBody = new Google_Service_Sheets_Spreadsheet(); $response = $service->spreadsheets->create($requestBody); 创建一个新的电子表格。我得到了电子表格的URL和ID,但是我无法从帐户或API访问它,因此我正在寻找有关如何使用API设置权限的示例。 - SERG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接