web-dev-qa-db-ja.com

PHPでGoogleドライブスプレッドシートを読むにはどうすればよいですか?

私がやろうとしているのは、WebサイトからGoogleスプレッドシートを読むことだけです。 Google Drive APIドキュメントとGoogle Drive PHP Stack Overflowのすべて)を読んで再読みしましたが、まだエンドゾーンに到達できません。

これが私がやったことです:

  1. Google APIコンソールにアクセスして、:
    1. 「サービス」で「ドライブAPI」と「ドライブSDK」を有効にしました。
    2. 「API Access」の下にOAuth 2.0クライアントID。 「URIをリダイレクト」および「JavaScriptオリジン」。
  2. 「Google API PHPクライアントライブラリ」をダウンロードしました。
  3. Googleドライブドキュメント(スプレッドシート)を開き、[共有]をクリックしてドキュメントの「キー」を取得しました。
  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)認証されていない使用の1日の制限を超えました。継続使用するにはサインアップが必要です。

私は何を間違えていますか?私は髪を抜いた(まあ、残ったもの)。

34
Kiser

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");
68
Ben

GoogleドライブPHPクイックスタート を確認してください。実際にクライアントを承認していません。$authUrl = $client->createAuthUrl();から開始

すべてのGoogleドライブリクエストには何らかの認証が必要です。

7
Ali Afshar

スプレッドシートのコンテンツにアクセスするために、Googleスプレッドシートに対する認証にサービスアカウントを使用するサンプルプロジェクトを作成しました。

README at https://github.com/juampynr/google-spreadsheet-reader )をご覧ください。

3
Juampy NR

Googleを使用しない場合、oauthを使用する必要があります。これは、いくつかのリクエストのみを許可します。

Googleスプレッドシートからデータを読み取るか、データを書き込むだけの場合は、スプレッドシートAPIを使用できます。 php-google-spreadsheet-client をご覧ください。

2
Asim

所有するファイルを読み取るには、「WebアプリケーションのクライアントID」ではなく、サービスアカウントが必要です。私はこの問題を自分自身と長い間闘ってきましたが、これが解決策をもたらしました: https://developers.google.com/drive/web/service-accounts

1
Daan Luttik