40

我要做的就是从网站上阅读 Google 电子表格。我已经阅读并重新阅读了 Google Drive API 文档以及 Stack Overflow 上的所有 Google Drive PHP 内容,但我仍然无法到达终点区。

这是我所做的:

  1. 去过 Google APIs Console 并且:
    1. 在“服务”下启用“Drive API”和“Drive SDK”;
    2. 在“API 访问”下创建了 OAuth 2.0 客户端 ID。在“Web 应用程序的客户端 ID”下,控制台给了我“客户端 ID”、“电子邮件地址”、“客户端密码”、“重定向 URI”和“JavaScript 来源”;
  2. 下载了“Google API PHP 客户端库”;
  3. 打开 Google Drive 文档(电子表格)并单击“共享”以获取文档的“密钥”;
  4. 设置以下代码:
<?php 
session_start(); 
require_once 'lib/gapi/Google_Client.php'; 
require_once 'lib/gapi/contrib/Google_DriveService.php'; 

define( 'GDRIVE_CLIENT_ID', '<API Console - API Access - Client ID>' ); 
define( 'GDRIVE_CLIENT_SECRET', '<API Console - API Access - Client secret>' ); 
define( 'GDRIVE_REDIRECT_URIS', '<API Console - API Access - Redirect URIs>' ); 

define( 'GDRIVE_SCOPE_01', 'h t t p s://www.googleapis.com/auth/drive' ); 
define( 'GDRIVE_SCOPE_02', 'h t t p s://www.googleapis.com/auth/drive.apps.readonly' ); 
define( 'GDRIVE_SCOPE_03', 'h t t p s://www.googleapis.com/auth/drive.file' ); 
define( 'GDRIVE_SCOPE_04', 'h t t p s://www.googleapis.com/auth/drive.metadata.readonly' ); 
define( 'GDRIVE_SCOPE_05', 'h t t p s://www.googleapis.com/auth/drive.readonly' ); 
define( 'GDRIVE_FILE_KEY', '<'key' given from 'sharing' document>' ); 

$client = new Google_Client(); 
$client->setClientId( GDRIVE_CLIENT_ID ); 
$client->setClientSecret( GDRIVE_CLIENT_SECRET ); 
$client->setRedirectUri( GDRIVE_REDIRECT_URIS ); 
$client->setScopes( array( GDRIVE_SCOPE_01, GDRIVE_SCOPE_02, GDRIVE_SCOPE_03, GDRIVE_SCOPE_04, GDRIVE_SCOPE_05 ) ); 

try { 
  $file = $service->files->get( GDRIVE_FILE_KEY ); 
  echo "Title: ", $file->getTitle(); 
  echo "Description: ", $file->getDescription(); 
  echo "MIME type: ", $file->getMimeType(); 
} catch (Exception $e) { 
  echo "An error occurred: ", $e->getMessage(); 
} 
?> 

一切运行良好(无论如何都没有错误),直到$service->files->get( GDRIVE_FILE_KEY )触发异常的调用:

发生错误:调用 GET 时出错https://www.googleapis.com/drive/v2/files:(403) 已超出未验证使用的每日限制。继续使用需要注册。

我究竟做错了什么?我把头发拉了出来(嗯,剩下的)。

4

5 回答 5

76

如果您不想打扰 API 或 Google 身份验证,还有一个更简单但不太干净的解决方案。

  1. 转到 Google Drive 中的电子表格。
  2. 转到文件 -> 发布到网络
  3. 在“发布到网络”对话框中,您可以获得指向电子表格的 .csv 链接。

在此处输入图像描述

您现在可以像访问 Web 上的任何其他 csv 文件一样访问内容。这是一些示例代码:

$spreadsheet_url="https://docs.google.com/spreadsheet/pub?key=<somecode>&single=true&gid=0&output=csv";

if(!ini_set('default_socket_timeout', 15)) echo "<!-- unable to change socket timeout -->";

if (($handle = fopen($spreadsheet_url, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $spreadsheet_data[] = $data;
    }
    fclose($handle);
}
else
    die("Problem reading csv");
于 2013-08-07T14:54:32.703 回答
7

请查看Google Drive PHP 快速入门。您实际上并未授权您的客户。从...开始$authUrl = $client->createAuthUrl();

所有 Google Drive 请求都需要某种授权。

于 2013-02-09T16:01:33.140 回答
4

我创建了一个示例项目,该项目使用服务帐户对 Google 电子表格进行身份验证,以便访问电子表格的内容。

查看https://github.com/juampynr/google-spreadsheet-reader上的 README 。

于 2017-03-31T10:23:16.223 回答
2

您需要使用 oauth,如果您不使用,谷歌只会允许您提出一些请求。

如果您只想从谷歌电子表格中读取数据或将数据写入其中,那么您可以使用电子表格 API。查看php-google-spreadsheet-client

于 2013-08-17T10:29:16.737 回答
1

如果您希望自己的文件被读取,您需要一个服务帐户而不是“Web 应用程序的客户端 ID”。我自己一直在与这个问题作斗争很长时间,这给我带来了解决方案: https ://developers.google.com/drive/web/service-accounts

于 2014-04-22T02:11:12.007 回答