如何在没有 oAuth 同意屏幕的情况下使用 Google 工作表 API 写入 sheet

How to write to a sheet with Google Sheets API without oAuth consent screen

我正在 PHP 中编写一个脚本来自动执行从数据库中获取数据并将其插入到 google sheet 中的过程。 因为它将以 15 分钟的间隔 运行 并且 Oauth 同意屏幕并不是真正的最佳选择。 是否有另一种选择无需通过浏览器登录即可获得写入 sheet 的必要授权?

我在文档和网上看到的大多数示例都使用同意屏幕。 如果我试试这个:

$client = new Google_Client(); 
$service = new Google_Service_Sheets($client);

可以与文本转语音一起使用 API 我明白了(自然):

> PHP Fatal error:  Uncaught Google\Service\Exception: {   "error": {
>     "code": 401,
>     "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid
> authentication credential. See
> https://developers.google.com/identity/sign-in/web/devconsole-project.",
>     "errors": [
>       {
>         "message": "Login Required.",
>         "domain": "global",
>         "reason": "required",
>         "location": "Authorization",
>         "locationType": "header"
>       }
>     ],
>     "status": "UNAUTHENTICATED"   } }

错误消息中的 link 只是指导您完成同意屏幕。根据我在网上可以找到的内容,如果我只读取一个文件,那不会有问题,但是写入它,即使我将 sheet 设置为 public,也需要身份验证。

注意:这是 Gcloud VM 实例中的全部 运行

您可以使用服务帐户,然后与该服务帐户共享 sheet。

  1. 转到 console.cloud.google.com 并使用包含 sheet
  2. 的帐户登录
  3. 添加 Google 表格 API(转到 API 和服务,查找 Google 表格 API,添加它)
  4. 返回 APIs and Services 并点击 Credentials
  5. 单击创建凭据 -> 服务帐户

  1. 填写必填项(主要是服务帐户名称,并赋予其所有者角色)并按完成
  2. 点击您刚刚创建的服务帐户
  3. 转到密钥选项卡 -> 添加密钥 -> 创建新密钥 -> JSON

这应该会给你一个密钥来使用。这是你的client_secret.json。使用

$client->setAuthConfig('./client_secret.json')$client->setAuthConfigFile('./client_secret.json')

取决于您使用的 php google api 客户端的版本。

此外,请确保使用

设置适当的范围
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
  1. 与创建的服务帐户共享您驱动器中的 sheet 并授予其编辑权限