Spring Mobile y Spring Social, dos proyectos a tener en cuenta

1 Comment

El dia de hoy revisando los proyectos de Spring Source, detecte dos interesantes proyectos que apenas tienen 1 mes desde el primer commit, los proyectos son, Spring Mobile y Spring Social.

Aún no están en la lista oficial de proyectos de Spring Source. Pero puedes descargar el código , estan en un repositorio GIT,  así que tengras que instalar git o usar jGIT con eclipse.

Spring Mobile: https://jira.springframework.org/browse/MOBILE

Spring Social: https://jira.springframework.org/browse/SOCIAL

 // Spring Social
 git clone git://git.springsource.org/spring-social/spring-social.git
 // Spring Mobile
 git clone git://git.springsource.org/spring-mobile/spring-mobile.git

Brevemente, podemos describir que Spring Social esta orientado a crear un framework para la integracion de un sistema con Twitter, Facebook y otras comunidades sociales/, utilizando OAuth (con Spring Securitu OAuth) como metodo de autentificación y tratando de remplazar a Twitter4j.

Por el otro lado Spring Mobile por el poco código que veo en el repositorio, indica que será un una libreria para detectar dispositivos mobiles en las peticiones, un producto interesante ya con los SmartPhones en auge diariamente.

Autentificación OAuth con Twitter4j

3 Comments

El 31 de Agosto de este año (2010) twitter dejo de proveer seguridad por medio de contraseña y usuario como venia siendo habitual en muchos clientes de Twitter.

Asi que nos hemos vistos muchos, como en mi caso, obligados a migrar OAuth, al principio cuesta un poco entender como funciona, pero es realmente muy sencillo y no comprometemos las contraseñas de nuestros usuarios.

Si quieres aprender algo mas sobre el protocolo de autorizacion OAuth, por aquí.. No quiero entrar a explicar como registrar una aplicacion en twitter, porque eso lo hacen muy bien en KodeGeek con Twitter4j.

En mi caso, no es una aplicación de escritorio, es web y con Java Server Faces, no usaré servlets porque mi intencion es almacenar la información en la base de datos, y no sera una sola cuenta, podran ser muchas cuentas. Dejo este tipico ejemplo que es el mas común de encontrar y con el que vamos a empezar a aclarar un poco lo que he leido en varios blogs.

Solo presentaré extractos de código, lo mas importante para entender como registrar las autentificaciones válidas con OAuth en Twitter y poder usarlas posteriormente.

//Creamos una instancia de Twitter, usemos el TwitterFactory , trabajamos con la version de Twitter4j 2.3.1
this.twitter = new TwitterFactory().getInstance();
// Las 2 llaves que nos da Twitter al registrar la aplicacion, estas son fundamentales las
// usaremos mucho, se deben almacenar en la base de datos
this.twitter.setOAuthConsumer("consumer_key", "consumer_secret");
//Solicitamos un REQUEST TOKEN, este objeto solo se debe crear una sola vez.
this.requestToken = twitter.getOAuthRequestToken();
//Obtenemos el URL, este url lo podemos presentar en JSF con un link y nos enviara a la página
// de twitter, daremos permiso a nuestra aplicacion
// y obtendremos el pin que usaremos a continuacion.
final String url = this.requestToken.getAuthorizationURL();

Hasta aquí todo bien, tenemos nuestro RequestToken, deberian usarlo en su clase como una propiedad de la clase, lo usaremos en otro metodo, tambien el objeto Twitter lo reutilizaremos, por eso los this.

//El objeto AccessToken, este objeto lo usaremos constantemente, cada vez que querramos 
//comunicarnos con Twitter, en este caso para validar nuestro
// RequesToken y obtener 2 llaves mas, que son las definitivas y las que nos permitiran 
//publicar, hasta el momento no hemos terminado
this.accessToken = this.twitter.getOAuthAccessToken(this.requestToken, "PIN");
//Si despues de esto todo sale bien (sin TwitterExceptions) tendremos ya acceso a los TOKENS, 
// son 2 cadenas que almacenaremos en nuestra base de datos
// y usaremos posteriormente para publicar nuestros tweets o obtener algo de informacion de nuestra cuenta.
//El token
log.debug("New Token {"+this.accessToken.getToken());
//El Token Secret
log.debug("New Secret Token {"+this.accessToken.getTokenSecret());
 //Testing send twitter, WORKS !!
//Si queremos probar que todo funciona, seteamos el ACCESS TOKEN que validamos anteriormente con el objeto Twitter.
 this.twitter.setOAuthAccessToken(accessToken);
// Publicamos algo para comprobar.
 this.twitter.updateStatus("test accessToken");
//Guardamos los dos tokens en la base de datos.

Ahora tenemos 4 codigos en nuestra tabla, los 2 codigos consumer y los 2 codigos Token, con estos 4 codigos podremos postear mientras no revoquemos nuestros permisos en nuestro perfil de Twitter.

//Para poder acceder a nuestra cuenta, postear o obtener algo de info, recuperamos nuestros
// 4 datos principales, creamos un ACCESSTOKEN seteando en el // constructor el Token y el Secret Token validos
final AccessToken accessToken = new AccessToken("Token", "Secret Token");
//Creamos una nueva instancia de Twitter y creamos una nueva instancia de autorizacion 
// con nuestras otras 2 llaves Consumer y el objeto creado 
// anteriormente ACCESS TOKEN 
Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance("Consumer Key", "Consumer Secret", accessToken);
//Una vez echo esto, ya tenemos el objeto Twitter cargado y listo para ser usado, podemos probar las credenciales.
twitter.verifyCredentials();

En otros blogs podrás encontrar muchas maneras de hacer esto, pero muchos se basan en aplicaciones de escritorio o basados en servlets, de esta forma podemos almacenar nuestras multiples cuentas de Twitter con OAuth y utilizarlas segun nuestras necesidades.