私がやろうとしているのは、WebサイトからGoogleスプレッドシートを読むことだけです。 Google Drive APIドキュメントとGoogle Drive PHP Stack Overflowのすべて)を読んで再読みしましたが、まだエンドゾーンに到達できません。
これが私がやったことです:
_<?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日の制限を超えました。継続使用するにはサインアップが必要です。
私は何を間違えていますか?私は髪を抜いた(まあ、残ったもの)。
APIやGoogle認証に煩わされたくない場合は、はるかに簡単ですがクリーンではないソリューションもあります。
これで、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");
GoogleドライブPHPクイックスタート を確認してください。実際にクライアントを承認していません。$authUrl = $client->createAuthUrl();
から開始
すべてのGoogleドライブリクエストには何らかの認証が必要です。
スプレッドシートのコンテンツにアクセスするために、Googleスプレッドシートに対する認証にサービスアカウントを使用するサンプルプロジェクトを作成しました。
README at https://github.com/juampynr/google-spreadsheet-reader )をご覧ください。
Googleを使用しない場合、oauthを使用する必要があります。これは、いくつかのリクエストのみを許可します。
Googleスプレッドシートからデータを読み取るか、データを書き込むだけの場合は、スプレッドシートAPIを使用できます。 php-google-spreadsheet-client をご覧ください。
所有するファイルを読み取るには、「WebアプリケーションのクライアントID」ではなく、サービスアカウントが必要です。私はこの問題を自分自身と長い間闘ってきましたが、これが解決策をもたらしました: https://developers.google.com/drive/web/service-accounts