Get it on Google Play
09-10-2018
 

Integración con las APIs de Google: Youtube con Java y JSoup

Google tiene centralizadas todas sus APIs, cosa que se agradece mucho porque existe una manera, mas o menos, única para acceder a un montón de servicios. O dicho de otra manera, una manera, mas o menos única, para hacer un montón de cosas ‘guais’: Login con el Id de Google, trabajo con vídeos, analytics, etc.

Vamos a ver como lo hacemos para loguearnos a su API y trabajar un poquito con el API de Youtube(Por ejemplo).

Credenciales

Lo primero, será crear un proyecto en la consola de Google Cloud(https://console.cloud.google.com) y seguidamente habilitar las APIs que vamos a usar(https://console.cloud.google.com/apis). En mi caso he seleccionado todas las de Youtube.

Una vez que tenemos nuestro proyecto con las APIs habilitadas es hora de crear nuestras credenciales. Podemos crear distintos tipos de credenciales en función del tipo de aplicación que queramos crear. Como yo lo que quiero es pedirle permisos al usuario para usar su cuenta vamos a crear unas credenciales del tipo “ID de cliente de Oauth”.

API Google Credentials

API Google Credentials

Al crear las credenciales es muy importante que configuréis las “URIs de redirección autorizados” que es la URL donde Google redirigirá a nuestro usuario después de dar el permiso y donde nos mandará un código para loguear.

Ya podemos pasar al siguiente paso.

Login y permisos

Ahora ya podemos crear el enlace para que nuestro usuario nos de permisos para usar sus datos(Las APIs que hemos habilitado).

Para ello crearemos una URL con los datos de las credenciales que hemos creado:

https://accounts.google.com/o/oauth2/auth?
	client_id=#client_id#&
	redirect_uri=#redirect_uri#&
	scope=https://www.googleapis.com/auth/youtube&
	response_type=code&
	access_type=offline&
	approval_prompt=force

Este link pedirá los permisos al usuario y lo redirigirá a la URL #redirect_uri# (Que debe estar configurada en las credenciales como autorizada). Si todo ha ido bien Google añadirá a la URL un parámetro ‘code’, que vamos a usar en el siguiente paso.

Tenéis la documentación en el siguiente enlace por si queréis acceder https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps.

Access Token y Refresh Token

Con el código ‘code’ y la siguiente petición obtendremos el ‘access_token’ y el ‘refresh_token’.

El ‘access_token’ lo usaremos para hacer peticiones a las API y tiene una validez limitada, normalmente a una hora. Con el ‘refresh_token’ podremos ir refrescando el ‘access_token’ indefinidamente. Es importante guardar bien los dos tokens porque no hay manera de recuperarlos(A no ser que le pidamos otra vez permiso al usuario).

String tokens=Jsoup.connect( "https://accounts.google.com/o/oauth2/token" )
	.ignoreContentType(true)
	.header("Content-Type", "application/x-www-form-urlencoded")
	.method( Method.POST )
	.data("code", code) /* El código que nos ha mandado Google */
	.data("client_id", /* credenciales que hemos creado */ )
	.data("client_secret", /* credenciales que hemos creado */ )
	.data("redirect_uri", /* redirect URI, debe estar autorizada, aunque no se usa */ )
	.data("grant_type","authorization_code")
	.execute()
	.body();

Esto nos devolverá un JSON con los datos.

Refrescar tokens de acceso

Como comentaba un poco mas arriba, cada hora nos caducará el token de acceso(‘access_token’) y deberemos renovarlo. Esto lo podemos hacer con esta petición:

String refreshTokenCall=Jsoup.connect( "https://accounts.google.com/o/oauth2/token" )
	.ignoreContentType(true)
	.header("Content-Type", "application/x-www-form-urlencoded")
	.method( Method.POST )
	.data("client_id", /* credenciales que hemos creado */ )
	.data("client_secret", /* credenciales que hemos creado */ )
	.data("refresh_token", refreshToken)
	.data("grant_type","refresh_token")
	.execute()
	.body();

Esto nos devolverá un JSON con el nuevo token de acceso.

Acceso al API

Con nuestro token podemos acceder al API de Youtube con normalidad, por ejemplo, para acceder a toda la actividad:

String resp=Jsoup.connect( "https://www.googleapis.com/youtube/v3/activities?part=id,snippet,contentDetails&maxResults=50&mine=true&access_token="+accessToken )
	.ignoreContentType(true)
	.method( Method.GET )
	.execute()
	.body();

Revocación de un token

Finalmente, si el usuario decide que quiere dejar de usar el servicio debemos revocar el token:

String resp=Jsoup.connect( "https://accounts.google.com/o/oauth2/revoke?token=
"+accessToken )
	.ignoreContentType(true)
	.method( Method.GET )
	.execute()
	.body();

De hecho, el usuario también puede rev

Si te ha servido, por favor comparte
 

Leave a Reply