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

时间:2013-02-08 20:27:42

标签: php google-drive-api

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

这就是我所做的:

  1. 访问过Google API控制台并:
    1. 在“服务”下启用“云端硬盘API”和“云端硬盘SDK”;
    2. 在“API访问”下创建了OAuth 2.0客户端ID。在“Web应用程序的客户端ID”下,控制台向我提供了“客户端ID”,“电子邮件地址”,“客户端密钥”,“重定向URI”和“JavaScript源”;
  2. 下载了“Google API PHP客户端库”;
  3. 打开Goog​​le云端硬盘文档(电子表格)并点击“分享”以获取文档的“密钥”;
  4. 设置以下代码:
  5. <?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)超出未经身份验证的使用的每日限制。继续使用需要注册。

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

5 个答案:

答案 0 :(得分:67)

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

  1. 转到Google云端硬盘中的电子表格。
  2. 转到文件 - &gt;在网上发布
  3. 选择正确的工作表,并确保启用复选框始终更新。
  4. 仍然在同一个框中,您可以获得.csv链接到您的电子表格。
  5. 您现在可以像访问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");
    

答案 1 :(得分:7)

请检查Google Drive PHP Quickstart。您实际上没有授权您的客户。从$authUrl = $client->createAuthUrl();

开始

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

答案 2 :(得分:3)

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

https://github.com/juampynr/google-spreadsheet-reader处查看自述文件。

答案 3 :(得分:2)

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

如果您要做的只是从Google电子表格中读取数据或将数据写入其中,那么您只需使用电子表格API即可。查看php-google-spreadsheet-client

答案 4 :(得分:1)

如果您希望自己的文件被读取,则需要一个服务帐户,而不是“Web应用程序的客户端ID”。我一直在努力解决这个问题,因为这让我解决了问题: https://developers.google.com/drive/web/service-accounts