注: これらは推奨ライブラリであるため、まず、インストールしたいパッケージが Google クラウド パッケージのリストに含まれているかどうかを確認してください。
Google API クライアント ライブラリを使用すると、サーバー上で Gmail、ドライブ、YouTube などの Google API を操作できるようになります。
これらのクライアント ライブラリは Google によって正式にサポートされています。ただし、ライブラリは完了したとみなされ、メンテナンス モードになっています。これは、重大なバグやセキュリティ問題には対処しますが、新しい機能は追加しないことを意味します。
Datastore、Cloud Storage、Pub/Sub、Compute Engine などの Google Cloud Platform API の場合は、Google Cloud クライアント ライブラリを使用することをお勧めします。サポートされている Google Cloud クライアント ライブラリの完全なリストについては、googleapis/google-cloud-php をご覧ください。
docs フォルダーには、このライブラリを使用するための詳細なガイドが含まれています。
Composer を使用することも、単にリリースをダウンロードすることもできます
推奨される方法は、composer を使用することです。 Composer がまだインストールされていない場合は、インストール手順に従ってください。
Composer がインストールされたら、プロジェクト ルートで次のコマンドを実行して、このライブラリをインストールします。
composer require google/apiclient:^2.15.0
タイムアウト エラーが発生した場合は、env フラグをCOMPOSER_PROCESS_TIMEOUT=600 composer install
として追加してコンポーザーのタイムアウトを増やすか、これをコンポーザー スキーマのconfig
セクションに含めることができます。
{
"config": {
"process-timeout": 600
}
}
最後に、必ずオートローダーを含めてください。
require_once ' /path/to/your-project/vendor/autoload.php ' ;
このライブラリはgoogle/apiclient-services
に依存しています。このライブラリは、多数の Google API 用の最新の API ラッパーを提供します。ユーザーが最新の API クライアントを利用できるように、このライブラリはgoogle/apiclient-services
の特定のバージョンに固定されません。重大な変更を含む API ラッパーが誤ってインストールされるのを防ぐために、このライブラリを運用環境で使用する前に、自分で最新バージョンに固定することを強くお勧めします。
Google API サービスは 200 を超えています。すべてを必要としない可能性が高いです。これらの依存関係をコードに同梱しないようにするには、 GoogleTaskComposer::cleanup
タスクを実行し、 composer.json
に保持したいサービスを指定します。
{
"require" : {
"google/apiclient" : " ^2.15.0 "
},
"scripts" : {
"pre-autoload-dump" : " Google \ Task \ Composer::cleanup "
},
"extra" : {
"google/apiclient-services" : [
" Drive " ,
" YouTube "
]
}
}
この例では、 composer update
または新しいcomposer install
が実行されると、「ドライブ」と「YouTube」以外のすべてのサービスが削除されます。
重要: サービスをcomposer.json
に追加し直す場合は、行った変更を有効にするために、 vendor/google/apiclient-services
ディレクトリを明示的に削除する必要があります。
rm -r vendor/google/apiclient-services
composer update
注: このコマンドはサービス名に対して完全一致を実行するため、 YouTubeReporting
とYouTubeAnalytics
も保持するには、それぞれを明示的に追加する必要があります。
{
"extra" : {
"google/apiclient-services" : [
" Drive " ,
" YouTube " ,
" YouTubeAnalytics " ,
" YouTubeReporting "
]
}
}
Composer を使用したくない場合は、パッケージ全体をダウンロードできます。 「リリース」ページには、すべての安定バージョンがリストされます。このライブラリとその依存関係を含むパッケージのgoogle-api-php-client-[RELEASE_NAME].zip
名前のファイルをダウンロードします。
ダウンロードした zip ファイルを解凍し、プロジェクトにオートローダーを含めます。
require_once ' /path/to/google-api-php-client/vendor/autoload.php ' ;
追加のインストールおよびセットアップ手順については、ドキュメントを参照してください。
主要なクライアント機能の例については、 examples/
ディレクトリを参照してください。 php 組み込み Web サーバーを実行すると、ブラウザーでそれらを表示できます。
$ php -S localhost:8000 -t examples/
次に、指定したホストとポートを参照します (上記の例では、 http://localhost:8000
)。
// include your composer dependencies
require_once ' vendor/autoload.php ' ;
$ client = new Google Client ();
$ client -> setApplicationName ( " Client_Library_Examples " );
$ client -> setDeveloperKey ( " YOUR_APP_KEY " );
$ service = new Google Service Books ( $ client );
$ query = ' Henry David Thoreau ' ;
$ optParams = [
' filter ' => ' free-ebooks ' ,
];
$ results = $ service -> volumes -> listVolumes ( $ query , $ optParams );
foreach ( $ results -> getItems () as $ item ) {
echo $ item [ ' volumeInfo ' ][ ' title ' ], " <br /> n" ;
}
この例は
examples/simple-file-upload.php
で見ることができます。
指示に従ってWebアプリケーション認証情報を作成します。
JSON認証情報をダウンロードする
GoogleClient::setAuthConfig
を使用して、これらの認証情報へのパスを設定します。
$ client = new Google Client ();
$ client -> setAuthConfig ( ' /path/to/client_credentials.json ' );
呼び出す API に必要なスコープを設定します。
$ client -> addScope ( Google Service Drive :: DRIVE );
アプリケーションのリダイレクト URI を設定する
// Your redirect URI can be any registered URI, but in this example
// we redirect back to this same page
$ redirect_uri = ' http:// ' . $ _SERVER [ ' HTTP_HOST ' ] . $ _SERVER [ ' PHP_SELF ' ];
$ client -> setRedirectUri ( $ redirect_uri );
リダイレクト URI を処理するスクリプトで、アクセス トークンの認証コードを交換します。
if ( isset ( $ _GET [ ' code ' ])) {
$ token = $ client -> fetchAccessTokenWithAuthCode ( $ _GET [ ' code ' ]);
}
この例は、
examples/service-account.php
で見ることができます。
一部の API (YouTube Data API など) はサービス アカウントをサポートしていません。 API 呼び出しが予期しない 401 または 403 エラーを返すかどうかは、特定の API ドキュメントを参照してください。
指示に従ってサービスアカウントを作成します
JSON認証情報をダウンロードする
GOOGLE_APPLICATION_CREDENTIALS
環境変数を使用して、これらの認証情報へのパスを設定します。
putenv ( ' GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json ' );
サービス アカウントの認証情報を使用して認証するように Google クライアントに指示します。
$ client = new Google Client ();
$ client -> useApplicationDefaultCredentials ();
呼び出す API に必要なスコープを設定します。
$ client -> addScope ( Google Service Drive :: DRIVE );
サービス アカウントへのドメイン全体のアクセスを委任していて、ユーザー アカウントになりすます場合は、setSubject メソッドを使用してユーザー アカウントの電子メール アドレスを指定します。
$ client -> setSubject ( $ user_to_impersonate );
GOOGLE_APPLICATION_CREDENTIALS
環境変数を使用する代わりに特定の JSON キーを使用したい場合は、次のようにすることができます。
$ jsonKey = [
' type ' => ' service_account ' ,
// ...
];
$ client = new Google Client ();
$ client -> setAuthConfig ( $ jsonKey );
google-api-php-client-services で API を呼び出すために使用されるクラスは自動生成されます。これらは、API Explorer で見つかった JSON リクエストとレスポンスに直接マッピングされます。
Datastore API への JSON リクエストは次のようになります。
POST https://datastore.googleapis.com/v1beta3/projects/YOUR_PROJECT_ID:runQuery?key=YOUR_API_KEY
{
"query" : {
"kind" : [{
"name" : " Book "
}],
"order" : [{
"property" : {
"name" : " title "
},
"direction" : " descending "
}],
"limit" : 10
}
}
このライブラリを使用すると、同じ呼び出しは次のようになります。
// create the datastore service class
$ datastore = new Google Service Datastore ( $ client );
// build the query - this maps directly to the JSON
$ query = new Google Service Datastore Query ([
' kind ' => [
[
' name ' => ' Book ' ,
],
],
' order ' => [
' property ' => [
' name ' => ' title ' ,
],
' direction ' => ' descending ' ,
],
' limit ' => 10 ,
]);
// build the request and response
$ request = new Google Service Datastore RunQueryRequest ([ ' query ' => $ query ]);
$ response = $ datastore -> projects -> runQuery ( ' YOUR_DATASET_ID ' , $ request );
ただし、JSON API の各プロパティには対応する生成されたクラスがあるため、上記のコードは次のように記述することもできます。
// create the datastore service class
$ datastore = new Google Service Datastore ( $ client );
// build the query
$ request = new Google Service Datastore_RunQueryRequest ();
$ query = new Google Service Datastore Query ();
// - set the order
$ order = new Google Service Datastore_PropertyOrder ();
$ order -> setDirection ( ' descending ' );
$ property = new Google Service Datastore PropertyReference ();
$ property -> setName ( ' title ' );
$ order -> setProperty ( $ property );
$ query -> setOrder ([ $ order ]);
// - set the kinds
$ kind = new Google Service Datastore KindExpression ();
$ kind -> setName ( ' Book ' );
$ query -> setKinds ([ $ kind ]);
// - set the limit
$ query -> setLimit ( 10 );
// add the query to the request and make the request
$ request -> setQuery ( $ query );
$ response = $ datastore -> projects -> runQuery ( ' YOUR_DATASET_ID ' , $ request );
使用する方法は好みの問題ですが、 API の JSON 構文を理解していないとこのライブラリを使用するのは非常に難しいため、ここで説明するサービスを使用する前に API Explorer を確認することをお勧めします。
外部アプリケーションに Google 認証が必要な場合、または Google API がこのライブラリでまだ利用できない場合は、HTTP リクエストを直接行うことができます。
独自の HTTP クライアント要求を認証するためだけにこのクライアントをインストールする場合は、代わりにgoogle/auth
使用する必要があります。
authorize
メソッドは承認された Guzzle クライアントを返すため、クライアントを使用して行われたリクエストには対応する承認が含まれます。
// create the Google client
$ client = new Google Client ();
/**
* Set your method for authentication. Depending on the API, This could be
* directly with an access token, API key, or (recommended) using
* Application Default Credentials.
*/
$ client -> useApplicationDefaultCredentials ();
$ client -> addScope ( Google Service Plus :: PLUS_ME );
// returns a Guzzle HTTP Client
$ httpClient = $ client -> authorize ();
// make an HTTP request
$ response = $ httpClient -> get ( ' https://www.googleapis.com/plus/v1/people/me ' );
パフォーマンスを向上させるために、別のキャッシュ ライブラリを使用することをお勧めします。これは、PSR-6 互換ライブラリをクライアントに渡すことで実行できます。
use League Flysystem Adapter Local ;
use League Flysystem Filesystem ;
use Cache Adapter Filesystem FilesystemCachePool ;
$ filesystemAdapter = new Local ( __DIR__ . ' / ' );
$ filesystem = new Filesystem ( $ filesystemAdapter );
$ cache = new FilesystemCachePool ( $ filesystem );
$ client -> setCache ( $ cache );
この例では、PHP キャッシュを使用します。これをコンポーザーを使用してプロジェクトに追加します。
composer require cache/filesystem-adapter
リフレッシュ トークンまたはサービス アカウント資格情報を使用する場合、新しいアクセス トークンが付与されたときに何らかのアクションを実行すると便利な場合があります。これを行うには、クライアントのsetTokenCallback
メソッドに呼び出し可能オブジェクトを渡します。
$ logger = new Monolog Logger ();
$ tokenCallback = function ( $ cacheKey , $ accessToken ) use ( $ logger ) {
$ logger -> debug ( sprintf ( ' new access token received at cache key %s ' , $ cacheKey ));
};
$ client -> setTokenCallback ( $ tokenCallback );
多くの場合、生の HTTP リクエストを表示して API 呼び出しをデバッグすると非常に役立ちます。このライブラリは、Charles Web プロキシの使用をサポートします。 Charles をダウンロードして実行し、次のコードを使用して Charles を介したすべての HTTP トラフィックをキャプチャします。
// FOR DEBUGGING ONLY
$ httpClient = new GuzzleHttp Client ([
' proxy ' => ' localhost:8888 ' , // by default, Charles runs on localhost port 8888
' verify ' => false , // otherwise HTTPS requests will fail.
]);
$ client = new Google Client ();
$ client -> setHttpClient ( $ httpClient );
これで、このライブラリによって行われたすべての呼び出しが Charles UI に表示されるようになります。
Charles で SSL リクエストを表示するには、追加の手順が 1 つ必要です。 Charles > プロキシ > SSL プロキシ設定に移動し、キャプチャするドメインを追加します。 Google API の場合、これは通常*.googleapis.com
です。
Google API クライアントは、デフォルトの HTTP クライアントとして Guzzle を使用します。つまり、Guzzle を使用するアプリケーションと同じ方法で HTTP リクエストを制御できます。
たとえば、各リクエストにリファラーを適用したいとします。
use GuzzleHttp Client ;
$ httpClient = new Client ([
' headers ' => [
' referer ' => ' mysite.com '
]
]);
$ client = new Google Client ();
$ client -> setHttpClient ( $ httpClient );
ハンドラーやミドルウェアなどの他の Guzzle 機能を使用すると、さらに詳細な制御が可能になります。
OAuth2 3LO を使用する場合 (たとえば、単純なファイル アップロードの例のように、サードパーティから資格情報を要求するクライアントである場合)、部分同意を利用することをお勧めします。
クライアントが OAuth2 画面で特定のスコープのみを許可できるようにするには、認可 URL を生成するときに、 enable_serial_consent
のクエリ文字列パラメーターを渡します。
$ authUrl = $ client -> createAuthUrl ( $ scope , [ ' enable_serial_consent ' => ' true ' ]);
フローが完了すると、OAuth2 オブジェクトでgetGrantedScope
呼び出すことで、どのスコープが付与されたかを確認できます。
// Space-separated string of granted scopes if it exists, otherwise null.
echo $ client -> getOAuth2Service ()-> getGrantedScope ();
YouTube: https://github.com/youtube/api-samples/tree/master/php
詳細については、寄稿ページをご覧ください。特にプルリクエストは大好きですが、必ずコントリビューターライセンス契約に署名してください。
ライブラリに関するサポートについては、StackOverflow の google-api-php-client タグ経由で問い合わせるのが最適です: https://stackoverflow.com/questions/tagged/google-api-php-client
ライブラリに特定のバグがある場合は、失敗したコードの例や取得された特定のエラーを含めて、GitHub 問題トラッカーに問題を提出してください。機能リクエストは、コア ライブラリ リクエストで API 固有ではない限り、提出することもできます。その場合は、リクエストを提出する最適な場所について、個々の API のドキュメントを参照してください。この機能が解決する問題について明確に説明するよう努めてください。
X が図書館の機能である場合は、ファイルを保存してください。 X が特定のサービスの使用例である場合、それらの特定の API のチームに問い合わせるのが最適です。私たちの好みでは、サンプルをライブラリに追加するのではなく、そのサンプルにリンクすることを好みます。これにより、サンプルを特定のバージョンに固定できるからです。図書館。他の API の例がある場合は、お知らせください。上記の README へのリンクを喜んで追加します。
GoogleServiceクラスは通常、API 検出ドキュメント (https://developers.google.com/discovery/) から自動的に生成されます。場合によっては、新しい機能が珍しい名前で API に追加されることがあります。これにより、PHP クラスで予期しないまたは非標準のスタイルの名前が付けられる場合があります。
一部のサービスは、ライブラリがサポートする JSON ではなく、デフォルトで XML などを返します。 JSON 応答をリクエストするには、通常はメソッド呼び出しの最後の引数であるオプションの params に「alt」引数を追加します。
$ opt_params = array (
' alt ' => " json "
);
ライブラリは、初期化されていないすべてのプロパティのデフォルト値である null を、Google API に送信されたオブジェクトから削除します。これを回避するには、null にしたいフィールドをGoogleModel::NULL_VALUE
に設定します。これは、ネットワーク経由で送信されるときに真の null に置き換えられるプレースホルダーです。
PHPUnit を使用して PHPUnit テストを実行します。すべての呼び出しを実行するように BaseTest.php で API キーとトークンを構成できますが、これには Google 開発者コンソールでのセットアップが必要になります。
phpunit tests/
コーディングスタイル違反を確認するには、次を実行します。
vendor/bin/phpcs src --standard=style/ruleset.xml -np
(修正可能な) コーディング スタイル違反を自動的に修正するには、次のコマンドを実行します。
vendor/bin/phpcbf src --standard=style/ruleset.xml