NOTA : primero verifique si el paquete que desea instalar está disponible en nuestra lista de paquetes en la nube de Google, ya que estas son las bibliotecas recomendadas.
La biblioteca cliente de API de Google le permite trabajar con API de Google como Gmail, Drive o YouTube en su servidor.
Estas bibliotecas cliente cuentan con el respaldo oficial de Google. Sin embargo, las bibliotecas se consideran completas y se encuentran en modo de mantenimiento. Esto significa que abordaremos errores críticos y problemas de seguridad, pero no agregaremos ninguna característica nueva.
Para las API de Google Cloud Platform, como Datastore, Cloud Storage, Pub/Sub y Compute Engine, recomendamos utilizar las bibliotecas cliente de Google Cloud. Para obtener una lista completa de las bibliotecas cliente de Google Cloud compatibles, consulte googleapis/google-cloud-php.
La carpeta de documentos proporciona guías detalladas para usar esta biblioteca.
Puede utilizar Composer o simplemente descargar la versión
El método preferido es a través del compositor. Siga las instrucciones de instalación si aún no tiene instalado Composer.
Una vez que Composer esté instalado, ejecute el siguiente comando en la raíz de su proyecto para instalar esta biblioteca:
composer require google/apiclient:^2.15.0
Si se enfrenta a un error de tiempo de espera, aumente el tiempo de espera para Composer agregando el indicador env como COMPOSER_PROCESS_TIMEOUT=600 composer install
o puede poner esto en la sección config
del esquema de Composer:
{
"config": {
"process-timeout": 600
}
}
Finalmente, asegúrese de incluir el cargador automático:
require_once ' /path/to/your-project/vendor/autoload.php ' ;
Esta biblioteca se basa en google/apiclient-services
. Esa biblioteca proporciona contenedores de API actualizados para una gran cantidad de API de Google. Para que los usuarios puedan utilizar los clientes API más recientes, esta biblioteca no se fija a una versión específica de google/apiclient-services
. Para evitar la instalación accidental de contenedores de API con cambios importantes , se recomienda encarecidamente que usted mismo fije la última versión antes de utilizar esta biblioteca en producción.
Hay más de 200 servicios API de Google. Es muy probable que no los quiera todos. Para evitar enviar estas dependencias con su código, puede ejecutar la tarea GoogleTaskComposer::cleanup
y especificar los servicios que desea conservar en composer.json
:
{
"require" : {
"google/apiclient" : " ^2.15.0 "
},
"scripts" : {
"pre-autoload-dump" : " Google \ Task \ Composer::cleanup "
},
"extra" : {
"google/apiclient-services" : [
" Drive " ,
" YouTube "
]
}
}
Este ejemplo eliminará todos los servicios excepto "Drive" y "YouTube" cuando se ejecute composer update
o se ejecute una nueva composer install
.
IMPORTANTE : si vuelve a agregar algún servicio en composer.json
, deberá eliminar el directorio vendor/google/apiclient-services
explícitamente para que el cambio que realizó tenga efecto:
rm -r vendor/google/apiclient-services
composer update
NOTA : este comando realiza una coincidencia exacta con el nombre del servicio, por lo que para mantener YouTubeReporting
y YouTubeAnalytics
también, necesitarás agregar cada uno de ellos explícitamente:
{
"extra" : {
"google/apiclient-services" : [
" Drive " ,
" YouTube " ,
" YouTubeAnalytics " ,
" YouTubeReporting "
]
}
}
Si prefiere no utilizar Composer, puede descargar el paquete completo. La página Lanzamientos enumera todas las versiones estables. Descargue cualquier archivo con el nombre google-api-php-client-[RELEASE_NAME].zip
para un paquete que incluya esta biblioteca y sus dependencias.
Descomprima el archivo zip que descargue e incluya el cargador automático en su proyecto:
require_once ' /path/to/google-api-php-client/vendor/autoload.php ' ;
Para obtener instrucciones adicionales de instalación y configuración, consulte la documentación.
Consulte el directorio de examples/
para ver ejemplos de las funciones clave del cliente. Puede verlos en su navegador ejecutando el servidor web integrado php.
$ php -S localhost:8000 -t examples/
Y luego navegue hasta el host y el puerto que especificó (en el ejemplo anterior, 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" ;
}
Un ejemplo de esto se puede ver en
examples/simple-file-upload.php
.
Siga las instrucciones para crear credenciales de aplicaciones web
Descargue las credenciales JSON
Establezca la ruta a estas credenciales usando GoogleClient::setAuthConfig
:
$ client = new Google Client ();
$ client -> setAuthConfig ( ' /path/to/client_credentials.json ' );
Establezca los alcances necesarios para la API que va a llamar
$ client -> addScope ( Google Service Drive :: DRIVE );
Configure el URI de redireccionamiento de su aplicación
// 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 );
En el script que maneja el URI de redireccionamiento, intercambie el código de autorización por un token de acceso:
if ( isset ( $ _GET [ ' code ' ])) {
$ token = $ client -> fetchAccessTokenWithAuthCode ( $ _GET [ ' code ' ]);
}
Un ejemplo de esto se puede ver en
examples/service-account.php
.
Algunas API (como la API de datos de YouTube) no admiten cuentas de servicio. Consulte la documentación específica de la API si las llamadas a la API devuelven errores 401 o 403 inesperados.
Siga las instrucciones para crear una cuenta de servicio
Descargue las credenciales JSON
Establezca la ruta a estas credenciales utilizando la variable de entorno GOOGLE_APPLICATION_CREDENTIALS
:
putenv ( ' GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json ' );
Dígale al cliente de Google que use las credenciales de su cuenta de servicio para autenticarse:
$ client = new Google Client ();
$ client -> useApplicationDefaultCredentials ();
Establezca los alcances necesarios para la API que va a llamar
$ client -> addScope ( Google Service Drive :: DRIVE );
Si ha delegado acceso a todo el dominio a la cuenta de servicio y desea hacerse pasar por una cuenta de usuario, especifique la dirección de correo electrónico de la cuenta de usuario utilizando el método setSubject:
$ client -> setSubject ( $ user_to_impersonate );
Si desea una clave JSON específica en lugar de usar la variable de entorno GOOGLE_APPLICATION_CREDENTIALS
, puede hacer esto:
$ jsonKey = [
' type ' => ' service_account ' ,
// ...
];
$ client = new Google Client ();
$ client -> setAuthConfig ( $ jsonKey );
Las clases utilizadas para llamar a la API en google-api-php-client-services se generan automáticamente. Se asignan directamente a las solicitudes y respuestas JSON que se encuentran en el Explorador de API.
Una solicitud JSON a la API del almacén de datos se vería así:
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
}
}
Usando esta biblioteca, la misma llamada se vería así:
// 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 );
Sin embargo, como cada propiedad de la API JSON tiene una clase generada correspondiente, el código anterior también podría escribirse así:
// 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 );
El método utilizado es una cuestión de preferencia, pero será muy difícil utilizar esta biblioteca sin comprender primero la sintaxis JSON de la API , por lo que se recomienda consultar el Explorador de API antes de utilizar cualquiera de los servicios aquí.
Si se desea la autenticación de Google para aplicaciones externas, o si aún no hay una API de Google disponible en esta biblioteca, las solicitudes HTTP se pueden realizar directamente.
Si está instalando este cliente solo para autenticar sus propias solicitudes de cliente HTTP, debe usar google/auth
en su lugar.
El método authorize
devuelve un Cliente Guzzle autorizado, por lo que cualquier solicitud realizada utilizando el cliente contendrá la autorización correspondiente.
// 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 ' );
Se recomienda utilizar otra biblioteca de almacenamiento en caché para mejorar el rendimiento. Esto se puede hacer pasando una biblioteca compatible con PSR-6 al cliente:
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 );
En este ejemplo usamos PHP Cache. Agrega esto a tu proyecto con el compositor:
composer require cache/filesystem-adapter
Al utilizar tokens de actualización o credenciales de cuenta de servicio, puede resultar útil realizar alguna acción cuando se concede un nuevo token de acceso. Para hacer esto, pase un elemento invocable al método setTokenCallback
en el cliente:
$ 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 );
A menudo resulta muy útil depurar las llamadas API viendo la solicitud HTTP sin formato. Esta biblioteca admite el uso de Charles Web Proxy. Descargue y ejecute Charles y luego capture todo el tráfico HTTP a través de Charles con el siguiente código:
// 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 );
Ahora todas las llamadas realizadas por esta biblioteca aparecerán en la interfaz de usuario de Charles.
Se requiere un paso adicional en Charles para ver las solicitudes SSL. Vaya a Charles > Proxy > Configuración de proxy SSL y agregue el dominio que desea capturar. En el caso de las API de Google, suele ser *.googleapis.com
.
El cliente API de Google utiliza Guzzle como su cliente HTTP predeterminado. Eso significa que puede controlar sus solicitudes HTTP de la misma manera que lo haría con cualquier aplicación que utilice Guzzle.
Digamos, por ejemplo, que deseamos aplicar un referente a cada solicitud.
use GuzzleHttp Client ;
$ httpClient = new Client ([
' headers ' => [
' referer ' => ' mysite.com '
]
]);
$ client = new Google Client ();
$ client -> setHttpClient ( $ httpClient );
Otras funciones de Guzzle, como Handlers y Middleware, ofrecen aún más control.
Cuando utilice OAuth2 3LO (por ejemplo, es un cliente que solicita credenciales de un tercero, como en el ejemplo de carga de archivos simple), es posible que desee aprovechar el consentimiento parcial.
Para permitir que los clientes solo otorguen ciertos alcances en la pantalla OAuth2, pase el parámetro querystring para enable_serial_consent
al generar la URL de autorización:
$ authUrl = $ client -> createAuthUrl ( $ scope , [ ' enable_serial_consent ' => ' true ' ]);
Una vez que se completa el flujo, puede ver qué alcances se otorgaron llamando getGrantedScope
en el objeto OAuth2:
// 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
Consulte la página de contribución para obtener más información. En particular, nos encantan las solicitudes de extracción, pero asegúrese de firmar el acuerdo de licencia de colaborador.
Para obtener ayuda con la biblioteca, el mejor lugar para preguntar es a través de la etiqueta google-api-php-client en StackOverflow: https://stackoverflow.com/questions/tagged/google-api-php-client
Si hay un error específico con la biblioteca, presente un problema en el rastreador de problemas de GitHub, incluido un ejemplo del código defectuoso y cualquier error específico recuperado. También se pueden presentar solicitudes de funciones, siempre que sean solicitudes de biblioteca principal y no específicas de API: para ellas, consulte la documentación de las API individuales para conocer el mejor lugar para presentar solicitudes. Intente proporcionar una declaración clara del problema que solucionaría la función.
Si X es una característica de la biblioteca, ¡archive! Si X es un ejemplo del uso de un servicio específico, el mejor lugar para acudir es a los equipos para esas API específicas; nuestra preferencia es vincular sus ejemplos en lugar de agregarlos a la biblioteca, ya que luego pueden fijar versiones específicas de la biblioteca. Si tiene algún ejemplo para otras API, háganoslo saber y con gusto agregaremos un enlace al archivo README anterior.
Las clases de GoogleService generalmente se generan automáticamente a partir de los documentos de descubrimiento de API: https://developers.google.com/discovery/. A veces se agregan nuevas características a las API con nombres inusuales, lo que puede causar algunos nombres de estilo inesperados o no estándar en las clases de PHP.
Algunos servicios devuelven XML o similar de forma predeterminada, en lugar de JSON, que es lo que admite la biblioteca. Puede solicitar una respuesta JSON agregando un argumento 'alt' a los parámetros opcionales que normalmente es el último argumento de una llamada a un método:
$ opt_params = array (
' alt ' => " json "
);
La biblioteca elimina los valores nulos de los objetos enviados a las API de Google, ya que es el valor predeterminado de todas las propiedades no inicializadas. Para solucionar este problema, establezca el campo que desea anular en GoogleModel::NULL_VALUE
. Este es un marcador de posición que será reemplazado por un valor nulo verdadero cuando se envíe por cable.
Ejecute las pruebas de PHPUnit con PHPUnit. Puede configurar una clave API y un token en BaseTest.php para ejecutar todas las llamadas, pero esto requerirá cierta configuración en Google Developer Console.
phpunit tests/
Para comprobar si hay violaciones de estilo de codificación, ejecute
vendor/bin/phpcs src --standard=style/ruleset.xml -np
Para corregir automáticamente (reparables) violaciones de estilo de codificación, ejecute
vendor/bin/phpcbf src --standard=style/ruleset.xml