참고 : 설치하려는 패키지가 권장 라이브러리이므로 먼저 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 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 래퍼가 실수로 설치되는 것을 방지하려면 프로덕션에서 이 라이브러리를 사용하기 전에 직접 최신 버전을 고정하는 것이 좋습니다.
200개가 넘는 Google API 서비스가 있습니다. 당신이 그 모든 것을 원하지 않을 가능성이 높습니다. 코드와 함께 이러한 종속성을 전달하지 않으려면 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
실행될 때 "Drive" 및 "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 "
]
}
}
작곡가를 사용하지 않으려면 패키지 전체를 다운로드할 수 있습니다. 릴리스 페이지에는 모든 안정 버전이 나열됩니다. 이 라이브러리와 해당 종속성을 포함하는 패키지에 대해 google-api-php-client-[RELEASE_NAME].zip
이라는 이름의 파일을 다운로드합니다.
다운로드한 zip 파일의 압축을 풀고 프로젝트에 오토로더를 포함합니다.
require_once ' /path/to/google-api-php-client/vendor/autoload.php ' ;
추가 설치 및 설정 지침은 설명서를 참조하세요.
주요 클라이언트 기능의 예는 examples/
디렉터리를 참조하세요. PHP 내장 웹 서버를 실행하여 브라우저에서 볼 수 있습니다.
$ 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
에서 볼 수 있습니다.
지침에 따라 웹 애플리케이션 자격 증명을 생성하세요.
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 탐색기에 있는 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 탐색기를 살펴보는 것이 좋습니다.
외부 애플리케이션에 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 Proxy의 사용을 지원합니다. 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에 표시됩니다.
SSL 요청을 보려면 Charles에서 한 가지 추가 단계가 필요합니다. Charles > 프록시 > SSL 프록시 설정 으로 이동하여 캡처하려는 도메인을 추가하세요. Google API의 경우 일반적으로 *.googleapis.com
입니다.
Google API 클라이언트는 Guzzle을 기본 HTTP 클라이언트로 사용합니다. 즉, Guzzle을 사용하는 모든 애플리케이션에서와 동일한 방식으로 HTTP 요청을 제어할 수 있다는 의미입니다.
예를 들어 각 요청에 리퍼러를 적용하고 싶다고 가정해 보겠습니다.
use GuzzleHttp Client ;
$ httpClient = new Client ([
' headers ' => [
' referer ' => ' mysite.com '
]
]);
$ client = new Google Client ();
$ client -> setHttpClient ( $ httpClient );
핸들러 및 미들웨어와 같은 기타 Guzzle 기능은 훨씬 더 많은 제어 기능을 제공합니다.
OAuth2 3LO를 사용할 때(예: 간단한 파일 업로드 예와 같이 제3자로부터 자격 증명을 요청하는 클라이언트인 경우) 부분 동의를 활용할 수 있습니다.
클라이언트가 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 ();
유튜브: 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를 라이브러리에 추가하는 대신 해당 예에 연결하는 것을 선호합니다. 도서관. 다른 API에 대한 예가 있는 경우 알려주시면 위의 README에 링크를 추가해 드리겠습니다.
GoogleService 클래스는 일반적으로 API 검색 문서(https://developers.google.com/discovery/)에서 자동으로 생성됩니다. 때로는 새로운 기능이 특이한 이름으로 API에 추가되어 PHP 클래스에서 예상치 못한 또는 비표준 스타일 이름 지정이 발생할 수 있습니다.
일부 서비스는 기본적으로 라이브러리가 지원하는 JSON 대신 XML 또는 이와 유사한 것을 반환합니다. 일반적으로 메소드 호출의 마지막 인수인 선택적 매개변수에 'alt' 인수를 추가하여 JSON 응답을 요청할 수 있습니다.
$ opt_params = array (
' alt ' => " json "
);
라이브러리는 초기화되지 않은 모든 속성의 기본값이므로 Google API로 전송된 객체에서 null을 제거합니다. 이 문제를 해결하려면 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