HINWEIS : Bitte prüfen Sie zunächst, ob das Paket, das Sie installieren möchten, in unserer Liste der Google Cloud-Pakete verfügbar ist, da es sich hierbei um die empfohlenen Bibliotheken handelt.
Die Google API Client Library ermöglicht Ihnen die Arbeit mit Google APIs wie Gmail, Drive oder YouTube auf Ihrem Server.
Diese Clientbibliotheken werden offiziell von Google unterstützt. Die Bibliotheken gelten jedoch als vollständig und befinden sich im Wartungsmodus. Das bedeutet, dass wir kritische Fehler und Sicherheitsprobleme beheben, aber keine neuen Funktionen hinzufügen.
Für Google Cloud Platform-APIs wie Datastore, Cloud Storage, Pub/Sub und Compute Engine empfehlen wir die Verwendung der Google Cloud-Clientbibliotheken. Eine vollständige Liste der unterstützten Google Cloud-Clientbibliotheken finden Sie unter googleapis/google-cloud-php.
Der Ordner „docs“ enthält detaillierte Anleitungen zur Verwendung dieser Bibliothek.
Sie können Composer verwenden oder einfach die Version herunterladen
Die bevorzugte Methode ist über Composer. Befolgen Sie die Installationsanweisungen, wenn Sie Composer noch nicht installiert haben.
Sobald Composer installiert ist, führen Sie den folgenden Befehl in Ihrem Projektstammverzeichnis aus, um diese Bibliothek zu installieren:
composer require google/apiclient:^2.15.0
Wenn ein Timeout-Fehler auftritt, erhöhen Sie entweder das Timeout für Composer, indem Sie das env-Flag als COMPOSER_PROCESS_TIMEOUT=600 composer install
hinzufügen, oder Sie können dies in den config
des Composer-Schemas einfügen:
{
"config": {
"process-timeout": 600
}
}
Stellen Sie abschließend sicher, dass Sie den Autoloader einbinden:
require_once ' /path/to/your-project/vendor/autoload.php ' ;
Diese Bibliothek basiert auf google/apiclient-services
. Diese Bibliothek stellt aktuelle API-Wrapper für eine große Anzahl von Google-APIs bereit. Damit Benutzer die neuesten API-Clients nutzen können, ist diese Bibliothek nicht an eine bestimmte Version von google/apiclient-services
gebunden. Um die versehentliche Installation von API-Wrappern mit Breaking Changes zu verhindern , wird dringend empfohlen, dass Sie sich selbst auf die neueste Version fixieren, bevor Sie diese Bibliothek in der Produktion verwenden.
Es gibt über 200 Google API-Dienste. Die Chancen stehen gut, dass Sie nicht alle wollen. Um zu vermeiden, dass diese Abhängigkeiten mit Ihrem Code mitgeliefert werden, können Sie die Aufgabe GoogleTaskComposer::cleanup
ausführen und die Dienste angeben, die Sie behalten möchten, in composer.json
:
{
"require" : {
"google/apiclient" : " ^2.15.0 "
},
"scripts" : {
"pre-autoload-dump" : " Google \ Task \ Composer::cleanup "
},
"extra" : {
"google/apiclient-services" : [
" Drive " ,
" YouTube "
]
}
}
In diesem Beispiel werden alle Dienste außer „Drive“ und „YouTube“ entfernt, wenn composer update
oder eine neue composer install
ausgeführt wird.
WICHTIG : Wenn Sie in composer.json
wieder Dienste hinzufügen, müssen Sie das Verzeichnis vendor/google/apiclient-services
explizit entfernen, damit die von Ihnen vorgenommene Änderung wirksam wird:
rm -r vendor/google/apiclient-services
composer update
HINWEIS : Dieser Befehl führt eine exakte Übereinstimmung mit dem Dienstnamen durch. Um also auch YouTubeReporting
und YouTubeAnalytics
beizubehalten, müssen Sie beide explizit hinzufügen:
{
"extra" : {
"google/apiclient-services" : [
" Drive " ,
" YouTube " ,
" YouTubeAnalytics " ,
" YouTubeReporting "
]
}
}
Wenn Sie Composer nicht verwenden möchten, können Sie das Paket vollständig herunterladen. Auf der Seite „Releases“ werden alle stabilen Versionen aufgelistet. Laden Sie eine beliebige Datei mit dem Namen google-api-php-client-[RELEASE_NAME].zip
für ein Paket herunter, das diese Bibliothek und ihre Abhängigkeiten enthält.
Dekomprimieren Sie die heruntergeladene ZIP-Datei und fügen Sie den Autoloader in Ihr Projekt ein:
require_once ' /path/to/google-api-php-client/vendor/autoload.php ' ;
Weitere Installations- und Einrichtungsanweisungen finden Sie in der Dokumentation.
Beispiele für die wichtigsten Clientfunktionen finden Sie im Verzeichnis examples/
. Sie können sie in Ihrem Browser anzeigen, indem Sie den in PHP integrierten Webserver ausführen.
$ php -S localhost:8000 -t examples/
Navigieren Sie dann zu dem von Ihnen angegebenen Host und Port (im obigen Beispiel 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" ;
}
Ein Beispiel hierfür ist in
examples/simple-file-upload.php
zu sehen.
Befolgen Sie die Anweisungen zum Erstellen von Anmeldeinformationen für Webanwendungen
Laden Sie die JSON-Anmeldeinformationen herunter
Legen Sie den Pfad zu diesen Anmeldeinformationen mit GoogleClient::setAuthConfig
fest:
$ client = new Google Client ();
$ client -> setAuthConfig ( ' /path/to/client_credentials.json ' );
Legen Sie die erforderlichen Bereiche für die API fest, die Sie aufrufen möchten
$ client -> addScope ( Google Service Drive :: DRIVE );
Legen Sie den Umleitungs-URI Ihrer Anwendung fest
// 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 );
Tauschen Sie im Skript, das den Umleitungs-URI verarbeitet, den Autorisierungscode gegen ein Zugriffstoken aus:
if ( isset ( $ _GET [ ' code ' ])) {
$ token = $ client -> fetchAccessTokenWithAuthCode ( $ _GET [ ' code ' ]);
}
Ein Beispiel hierfür ist in
examples/service-account.php
zu sehen.
Einige APIs (z. B. die YouTube Data API) unterstützen keine Dienstkonten. Sehen Sie in der spezifischen API-Dokumentation nach, ob API-Aufrufe unerwartete 401- oder 403-Fehler zurückgeben.
Befolgen Sie die Anweisungen zum Erstellen eines Dienstkontos
Laden Sie die JSON-Anmeldeinformationen herunter
Legen Sie den Pfad zu diesen Anmeldeinformationen mithilfe der Umgebungsvariablen GOOGLE_APPLICATION_CREDENTIALS
fest:
putenv ( ' GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json ' );
Weisen Sie den Google-Client an, die Anmeldeinformationen Ihres Dienstkontos zur Authentifizierung zu verwenden:
$ client = new Google Client ();
$ client -> useApplicationDefaultCredentials ();
Legen Sie die erforderlichen Bereiche für die API fest, die Sie aufrufen möchten
$ client -> addScope ( Google Service Drive :: DRIVE );
Wenn Sie den domänenweiten Zugriff auf das Dienstkonto delegiert haben und die Identität eines Benutzerkontos annehmen möchten, geben Sie die E-Mail-Adresse des Benutzerkontos mit der Methode setSubject an:
$ client -> setSubject ( $ user_to_impersonate );
Wenn Sie einen bestimmten JSON-Schlüssel verwenden möchten, anstatt die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
zu verwenden, können Sie Folgendes tun:
$ jsonKey = [
' type ' => ' service_account ' ,
// ...
];
$ client = new Google Client ();
$ client -> setAuthConfig ( $ jsonKey );
Die zum Aufrufen der API in google-api-php-client-services verwendeten Klassen werden automatisch generiert. Sie werden direkt den JSON-Anfragen und -Antworten zugeordnet, die im APIs Explorer gefunden werden.
Eine JSON-Anfrage an die Datastore-API würde so aussehen:
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
}
}
Mit dieser Bibliothek würde derselbe Aufruf etwa so aussehen:
// 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 );
Da jedoch jede Eigenschaft der JSON-API über eine entsprechende generierte Klasse verfügt, könnte der obige Code auch so geschrieben werden:
// 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 );
Die verwendete Methode hängt von Ihren Vorlieben ab, aber es wird sehr schwierig sein, diese Bibliothek zu verwenden, ohne zuvor die JSON-Syntax für die API zu verstehen . Daher wird empfohlen, einen Blick auf den APIs Explorer zu werfen, bevor Sie einen der hier aufgeführten Dienste verwenden.
Wenn für externe Anwendungen eine Google-Authentifizierung gewünscht ist oder eine Google-API in dieser Bibliothek noch nicht verfügbar ist, können HTTP-Anfragen direkt gestellt werden.
Wenn Sie diesen Client nur zur Authentifizierung Ihrer eigenen HTTP-Client-Anfragen installieren, sollten Sie stattdessen google/auth
verwenden.
Die Methode authorize
gibt einen autorisierten Guzzle-Client zurück, sodass jede über den Client gestellte Anfrage die entsprechende Autorisierung enthält.
// 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 ' );
Es wird empfohlen, eine andere Caching-Bibliothek zu verwenden, um die Leistung zu verbessern. Dies kann durch Übergabe einer PSR-6-kompatiblen Bibliothek an den Client erfolgen:
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 );
In diesem Beispiel verwenden wir PHP Cache. Fügen Sie dies Ihrem Projekt mit Composer hinzu:
composer require cache/filesystem-adapter
Bei der Verwendung von Aktualisierungstokens oder Anmeldeinformationen für Dienstkonten kann es sinnvoll sein, eine Aktion auszuführen, wenn ein neues Zugriffstoken gewährt wird. Übergeben Sie dazu einen Callable an die setTokenCallback
-Methode auf dem Client:
$ 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 );
Es ist oft sehr nützlich, Ihre API-Aufrufe zu debuggen, indem Sie die rohe HTTP-Anfrage anzeigen. Diese Bibliothek unterstützt die Verwendung von Charles Web Proxy. Laden Sie Charles herunter, führen Sie es aus und erfassen Sie dann den gesamten HTTP-Verkehr über Charles mit dem folgenden Code:
// 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 );
Jetzt werden alle von dieser Bibliothek getätigten Aufrufe in der Charles-Benutzeroberfläche angezeigt.
In Charles ist ein zusätzlicher Schritt erforderlich, um SSL-Anfragen anzuzeigen. Gehen Sie zu Charles > Proxy > SSL-Proxy-Einstellungen und fügen Sie die Domain hinzu, die Sie erfassen möchten. Im Fall der Google APIs ist dies normalerweise *.googleapis.com
.
Der Google API-Client verwendet Guzzle als Standard-HTTP-Client. Das bedeutet, dass Sie Ihre HTTP-Anfragen auf die gleiche Weise steuern können wie bei jeder anderen Anwendung, die Guzzle verwendet.
Nehmen wir zum Beispiel an, wir möchten auf jede Anfrage einen Referrer anwenden.
use GuzzleHttp Client ;
$ httpClient = new Client ([
' headers ' => [
' referer ' => ' mysite.com '
]
]);
$ client = new Google Client ();
$ client -> setHttpClient ( $ httpClient );
Andere Guzzle-Funktionen wie Handler und Middleware bieten noch mehr Kontrolle.
Wenn Sie OAuth2 3LO verwenden (z. B. wenn Sie ein Kunde sind, der Anmeldeinformationen von einem Dritten anfordert, wie im Beispiel für einen einfachen Datei-Upload), möchten Sie möglicherweise die teilweise Zustimmung nutzen.
Damit Clients im OAuth2-Bildschirm nur bestimmte Bereiche gewähren können, übergeben Sie beim Generieren der Autorisierungs-URL den Querystring-Parameter für enable_serial_consent
:
$ authUrl = $ client -> createAuthUrl ( $ scope , [ ' enable_serial_consent ' => ' true ' ]);
Sobald der Ablauf abgeschlossen ist, können Sie sehen, welche Bereiche gewährt wurden, indem Sie getGrantedScope
für das OAuth2-Objekt aufrufen:
// 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
Weitere Informationen finden Sie auf der Beitragsseite. Insbesondere lieben wir Pull-Requests – aber bitte stellen Sie sicher, dass Sie die Mitwirkenden-Lizenzvereinbarung unterzeichnen.
Wenn Sie Unterstützung für die Bibliothek benötigen, wenden Sie sich am besten an das google-api-php-client-Tag auf StackOverflow: https://stackoverflow.com/questions/tagged/google-api-php-client
Wenn es einen bestimmten Fehler in der Bibliothek gibt, melden Sie bitte ein Problem im GitHub Issues Tracker, einschließlich eines Beispiels für den fehlerhaften Code und aller abgerufenen spezifischen Fehler. Funktionsanfragen können ebenfalls eingereicht werden, sofern es sich um Kernbibliotheksanfragen handelt und nicht API-spezifisch sind: Informationen dazu finden Sie in der Dokumentation zu den einzelnen APIs, wo Sie Anfragen am besten einreichen können. Versuchen Sie bitte, das Problem klar darzulegen, das mit der Funktion behoben werden soll.
Wenn X ein Feature der Bibliothek ist, legen Sie es ab! Wenn es sich bei die Bibliothek. Wenn Sie Beispiele für andere APIs haben, lassen Sie es uns wissen und wir fügen gerne einen Link zur README-Datei oben hinzu!
Die GoogleService -Klassen werden im Allgemeinen automatisch aus den API-Discovery-Dokumenten generiert: https://developers.google.com/discovery/. Manchmal werden APIs neue Funktionen mit ungewöhnlichen Namen hinzugefügt, was zu unerwarteten oder nicht standardmäßigen Namensstilen in den PHP-Klassen führen kann.
Einige Dienste geben standardmäßig XML oder ähnliches zurück und nicht JSON, was von der Bibliothek unterstützt wird. Sie können eine JSON-Antwort anfordern, indem Sie optionalen Parametern ein „alt“-Argument hinzufügen, das normalerweise das letzte Argument eines Methodenaufrufs ist:
$ opt_params = array (
' alt ' => " json "
);
Die Bibliothek entfernt Nullwerte aus den an die Google APIs gesendeten Objekten, da dies der Standardwert aller nicht initialisierten Eigenschaften ist. Um dies zu umgehen, setzen Sie das Feld, das Sie auf Null setzen möchten, auf GoogleModel::NULL_VALUE
. Dies ist ein Platzhalter, der beim Senden über die Leitung durch eine echte Null ersetzt wird.
Führen Sie die PHPUnit-Tests mit PHPUnit aus. Sie können in BaseTest.php einen API-Schlüssel und ein Token konfigurieren, um alle Aufrufe auszuführen. Dazu sind jedoch einige Einstellungen in der Google Developer Console erforderlich.
phpunit tests/
Führen Sie Folgendes aus, um nach Verstößen gegen den Codierungsstil zu suchen:
vendor/bin/phpcs src --standard=style/ruleset.xml -np
Führen Sie Folgendes aus, um (korrigierbare) Verstöße gegen den Codierungsstil automatisch zu beheben
vendor/bin/phpcbf src --standard=style/ruleset.xml