Evilnapsis

Programming, Hacking and More

Google

[API] Conectar y Listar Archivos de Google Drive con PHP

Hola a todos, en esta ocasión voy a hablar un poco sobre APIs y mas específicamente sobre la API de Google Drive, vamos a ver un poco sobre los permisos de la aplicación, las credenciales, para después conectarnos al servicio de Google Drive y hacer un listado de todos los archivos que tenemos en nuestra cuenta.

Antes de nada, que es Google Drive? Para los que no saben, Google Drive es un servicio de Almacenamiento de archivos gratuito por parte de Google y nos ofrece 10 Gigas de almacenamiento gratuito en el cual podemos almacenar archivos, documentos, imágenes, vídeos, etc.

Para que conectarnos a Google Drive? Podemos usar Google Drive desde la aplicación de Google, pero al crear nuestra aplicación que se conecte al servicio de Google Drive podemos acceder a cualquier archivo de Google Drive desde nuestra aplicación y asi se reflejen los datos también en nuestra cuenta de Google Drive y viceversa.

Obtener la libreria de APIs cliente de Google

Usando Git podemos obtener la “API Client Library” de Google, mediante la cual nos podremos conectar a cualquier servicio de Google, siempre y cuando contemos con los permisos de acceso para hacerlo.

git clone -b v1-master https://github.com/google/google-api-php-client.git

Descargamos la librería y ya podemos empezar.

Obtener las credenciales de acceso

El siguiente paso sera obtener las credenciales de acceso, para ello debemos ir a la consola de desarrollador de google y hacer lo siguiente:

  • Crear un proyecto: Los proyectos nos sirven para hacer conexión a diferentes servicios de Google.
  • Habilitar API: Con el Proyecto creado debemos seleccionar cuales son las APIs a las que tendrá acceso el proyecto.
  • Añadir credenciales: Las credenciales sirven para autentificar la aplicación.

Para usar Google Drive debemos tener credenciales mediante el método oAuth 2.0 y debemos considerar lo siguiente:

  • Nombre de Producto: El nombre de producto es el nombre que se le mostrara al cliente.
  • Tipo de la aplicación: El tipo de la aplicación puede ser: aplicación web, android, aplicación de Chrome, iOs, etc.
  • Nombre: Sirve para identificar entre credenciales, ya que podemos tener muchas credenciales para un mismo proyecto.
  • URI de redireccionamiento autorizada: Muy importante ya que esta dirección sirve para que la aplicación redireccione, si intentamos direccionar de nuestra aplicación a una URI no autorizada entonces tendremos un error.

Una vez hecho estos pasos obtendremos los datos de autenticacion oAuth 2.0 una clave cliente y una clave secreta, las necesitamos las 2 para que la aplicación funcione.

Y ahora vamos al código:


<?php
session_start();
if(isset($_GET["logout"])){
session_destroy();
}
require_once 'google-api-php-client/src/Google/autoload.php';
$client = new Google_Client();
// Get your credentials from the console
$client->setClientId('TU_CLIENT_ID');
$client->setClientSecret('TU_CLIENT_SECRET');
$client->setRedirectUri('TU_REDIRECT_URI');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$authUrl = $client->createAuthUrl();
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://localhost/examples2/googledrive/step1.php');
}
if (!$client->getAccessToken() && !isset($_SESSION['token'])) {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Conectar</a>";
}
if (isset($_SESSION['token'])) {
print "<a class='logout' href='".$_SERVER['PHP_SELF']."?logout=1'>Salir</a><br>";
$client->setAccessToken($_SESSION['token']);
$service = new Google_Service_Drive($client);
$results = $service->files->listFiles();
if (count($results->getItems()) == 0) {
print "No files found.\n";
} else {
print "<table border='1'><thead><th>Archivo</th><th>Id</th></thead>";
foreach ($results->getItems() as $file) {
printf("<tr><td>%s</td><td> %s</td></tr>", $file->getTitle(), $file->getId());
}
print "</table>";
}
}
?>

Necesitamos tener las sesiones iniciadas.

Debemos incluir el archivo Google/autoload.php que se encargara de cargar los archivos necesarios para que la libreria de APIs de Google funcione.

Linea 11: Especificamos el Client Id, Linea 12: Especificamos la clave secreta, Linea 13: Escribimos la URI de redireccion.

En la linea 17 a la 22, Google creara una URL para que vallamos a solicitar permiso, despues de ir a esa URL se crear un código y mediante ese código ($_GET[“code”]) se generara un token ($_SESSION[“token”]) mediante el cual podremos hacer solicitudes a Google Drive.

Linea 29 a la 44: Una vez que tenemos el Token entonces lo verificamos, creamos un servicio de Google Drive (Google_Service_Drive) y hacemos el listado de archivos y lo mostramos en forma de tabla.

Resultado

google-drive-result

 

Conclusión

Este es un ejemplo completo con el que podemos empezar a explorar la API de Google Drive con el fin de poder conectar nuestras aplicaciones con la nube.

Aprovechare que me estoy metiendo a Google Drive para hacer que todos mis sistemas exporten datos a la nube.

Si tienen dudas o comentarios los esperare y responderé con gusto.

Agustin Ramos

Desarrollador de Software

13 thoughts on “[API] Conectar y Listar Archivos de Google Drive con PHP

  • Hola buenas,
    he seguido todos los pasos pero no se me genera la lista.
    Cuando obtiene el ‘code’ y redirige a ” header(‘Location: http://localhost/examples2/googledrive/step1.php‘);” (Linea 21), no se genera dicho fichero.
    Después de pulsar el botón “permitir” de google me redirige a “$client->setRedirectUri(‘http://localhost/’);” (Linea 13) que me lleva a la pagina principal de mi wamp con una url tipo = http://localhost/?code=4/UaA61WFzi7gCzAkzNvSxx3YjJDwPB_sjet8TG5zMH5Y#

    Espero su respuesta, muchas gracias.
    PD: espero ver más tutoriales sobre drive, son muy interesantes.

    • Hola Alejandro, google es muy estricto en esa parte, debes gestionar el Redirection URI en la consola de desarrolladores de Google, y debes agregar la URL exacta en tu servidor o localhost, para que despues de obtener el code, http://localhost/examples2/googledrive/ es la ubicacion donde yo hago mis pruebas y la tengo especificada en mis Redirection URIs. Saludos

  • Buenas,
    Estoy utilizando la api de google contacts, y ya logre la autenticación y todo, pero quisiera saber como hago para consultar los contactos de un correo diferente con el que me autentique. Es eso posible?

    • Hola brayan, la verdad creo que solo puedes obtener los contactos del usuario que se autentique. Seria un problema de seguridad poder acceder a los contactos de otro usuario… Saludos

      • Gracias Agustin, quería consultar si una empresa maneja sus correos corporativos con google (existe un usuario administrador) y necesita crearles grupos de contacto a cada usuario, hay alguna forma de realizar la creación de grupos con contactos a cada correo por medio de un script?

        • Hola brayan, la verdad no estoy muy familiarizado con las apis de google y menos con el manejo de cuentas corporativas, Saludos

  • Buen dia, espero puedas resolver mi duda, cuando hablas de URI de redireccionamiento autorizada, esta es el dominio de la pagina a utilizar? como si usara no se “www.midominio.com” y otra duda, sabes como usar esto en localhost?

    • Hola, en la uri de redireccionamiento, siempre vas a poner la url a la que se redirigira, si usas localhost desbes escribir la url “http://localhost/myapp/archivo.php” todo de acuerdo a tu aplicacion. Saludos

  • Angel Rodriguez

    Hola, que tal?
    Esta publicación es de casi un año, pero tal vez puedas responder.. XD
    Estoy usando tu ejemplo, pero solo llego al paso de pedir permiso. No me genera el token. Claro que estoy haciendo algo mal, pero no se que es.. XD
    Soy nueo en esto de la programación, y por supuesto que mas nuevo trabajando con APIs.
    Podrias hacer paso a paso con capturas de pantalla a ver como se conecta?
    Mil gracias.. Saludos.

    • Hola, recuerda que en la consola de desarrolladores de Google debes configurar una url de redireccionamiento ya que en base a esa url se genera el token …

  • HOLA NAPOLEON, COMO TE FUE CON LO QUE ESTABAS BUSCANDO?? YO ESTOY EN LAS MISMAS Y HE BUSCADO ALGO CON LO QUE GUIARME PERO NADA ME RESULTA

  • Hola, gracias mil por esta entrada. ¿Sabes de un script o php que me permita subir y bajar documentos a Drive? Como si de una unidad local se tratara. Trato de conectar una aplicación de gestión a Drive de forma transparente, según la configueación que haya realizado previamente el usuario. Gracias,

Leave a Reply to Agustin Ramos Cancel reply