如何在PHP中阅读Google Drive电子表格?

Kis*_*ser 34 php google-drive-api

我要做的就是从网站上阅读Google电子表格.我已阅读并重新阅读Google Drive API文档以及Stack Overflow上的所有Google Drive PHP,但我仍无法访问终端区域.

这就是我所做的:

  1. 去过Google API控制台并:
    1. 在"服务"下启用"Drive API"和"Drive SDK";
    2. 在"API访问"下创建了OAuth 2.0客户端ID.在"Web应用程序的客户端ID"下,控制台向我提供了"客户端ID","电子邮件地址","客户端密钥","重定向URI"和"JavaScript源";
  2. 下载了"Google API PHP客户端库";
  3. 打开Goog​​le云端硬盘文档(电子表格),然后点击"分享"以获取文档的"密钥";
  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(); 
} 
?> 
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?我把头发拉了出来(好吧,还剩下什么).

Ben*_*Ben 68

如果您不想使用API​​或Google身份验证,那么还有一个更简单但不太干净的解决方案.

  1. 转到Google云端硬盘中的电子表格.
  2. 转到文件 - >在Web上发布
  3. 选择正确的工作表,并确保启用复选框始终更新.
  4. 仍然在同一个框中,您可以获得.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");
Run Code Online (Sandbox Code Playgroud)

  • 是的,此选项已被Google删除.但是这里仍然有一个解决方法:[link] http://stackoverflow.com/questions/21189665/new-google-spreadsheets-publish-limitation [/ link] CSV文件:`https://docs.google.com/电子表格/ d/<KEY> /出口?GID = 0&格式= csv` (7认同)
  • 现在是 2019 年 .. 可以通过将 csv 文件作为选项发布到网络来共享 google drive 中的 csv 文件,但是如果源文件上传了新内容,则此链接将更改。是否可以一直使用相同的 csv 文件? (3认同)
  • 当我找到这个答案时,我正准备开始编写 HTML 抓取代码。谢谢你! (2认同)
  • 这个答案今天仍然有效,你只需在提供的代码中获得一个不同的链接,就像@Ben在评论中已经说过的那样.+1 (2认同)
  • 这有效!辉煌!由于我必须使用的电子表格不包含任何机密数据(无论如何都要在网站上显示),这节省了很多时间. (2认同)

Ali*_*har 7

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

所有Google云端硬盘请求都需要某种授权.

  • 但是,Google文件是**MY**文件.我保持它.我只想要**MY**PHP脚本来阅读它.好像我在Google云端硬盘上保留了*included*文件.我希望我的脚本无条件地使用我的Google云端硬盘访问代码阅读此文档.访问者无需登录.他/她仍然无法修改我的文档; 他们只能看到它. (3认同)
  • 快速入门链接不再起作用. (3认同)

Jua*_* NR 5

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

请参阅https://github.com/juampynr/google-spreadsheet-reader上的自述文件。