如何使用 API PHP 客户端更新 Google 表格文件

How to update Google Sheets file with API PHP Client

我一直在查看 Google API PHP Client 并想用它来向 Google Sheet 添加行。从代码来看,似乎有人会使用这种方法:

  public function insert($fileId, Google_Service_Drive_Property $postBody, $optParams = array())
  {
    $params = array('fileId' => $fileId, 'postBody' => $postBody);
    $params = array_merge($params, $optParams);
    return $this->call('insert', array($params), "Google_Service_Drive_Property");
  }

但我真的不知道参数是什么。我正朝着正确的方向前进吗?此外,不太确定如何连接到特定 Sheet。请指教

谢谢!

使用来自 zend framework 1.12 的 Google 工作表 class。他们为 Google 电子表格

编写了非常漂亮的编码库

https://github.com/zendframework/zf1/tree/master/library/Zend/Gdata/Spreadsheets

我想出了如何解决这个问题并想与大家分享。正如我在评论中所说,我认为使用 Zend 的 GData class 对我来说不是一个好方法,因为它非常依赖整个框架中的其他 classes,因此太重了。

所以我最终在 Google 的 API 之上使用了 this Spreadsheet Client。 Google 的 API 用于验证我的服务,然后我开始调用 Spreadsheet Client 库。

在为身份验证过程中遇到的各种问题花费了一天多的时间后,我做了以下工作:

  • 为 Google 创建了一个新项目 API here
  • 单击了左侧 "APIs & Auth"
  • 下的 "APIs" 菜单
  • 搜索驱动器 API 并启用它(不记得是否有必要)
  • 单击了左侧的 "Credentials" 菜单
  • 单击 OAuth
  • 下的 "Create new Client ID" 按钮
  • 已选择"Service Account"
  • 显示信息并 json 下载(不需要)后,我点击了 "Generate new P12 Key" 按钮
  • 我将 p12 文件保存在可以通过 PHP
  • 访问的地方

然后在代码中,我添加了以下几行:

$email = 'somethingsomethingblahblah@developer.gserviceaccount.com';
$CLIENT_ID = $email;
$SERVICE_ACCOUNT_NAME = $email;
$KEY_FILE = 'path/to/p12/file';
$SPREADSHEETS_SCOPE = 'https://spreadsheets.google.com/feeds';

$key = file_get_contents($KEY_FILE);
$auth = new Google_Auth_AssertionCredentials(
    $SERVICE_ACCOUNT_NAME,
    array($SPREADSHEETS_SCOPE),
    $key
);

$client = new Google_Client();
$client->setScopes(array($SPREADSHEETS_SCOPE));
$client->setAssertionCredentials($auth);
$client->getAuth()->refreshTokenWithAssertion();
$client->setClientId($CLIENT_ID);
$accessToken = $client->getAccessToken();

此外,我必须确保:

  • 在上面的代码中特别与我的服务帐户中的电子邮件地址共享了我的电子表格
  • Synced my server's time(我是 运行ning Vagrant CentOS 所以略有不同)

我相信您可以 运行 将此代码与电子表格以外的其他服务一起使用,例如 Youtube、Analytics 等,但您需要获得正确的范围 link(请参阅 $SPREADSHEETS_SCOPE 以上)。请记住,这仅适用于在 Google 控制台上使用服务帐户时,这意味着您正在以编程方式从代码中获取数据。如果您想让其他用户使用 API 登录,那就不一样了。