Integrando GMail y Twitter en Wipley
Esta semana hemos lanzado la integración de Twitter y GMail en Wipley. La integración con GMail se orienta a obtener la información de los contactos que tienes en GMail para poderlos agregar como amigos en Wipley (si es que ya están registrados), o bien enviarles invitaciones para que prueben el servicio. La integración con Twitter trata de trasladar parte de tu actividad en Wipley a tu cuenta de Twitter, para que tus followers sepan a qué estás jugando y cuáles son tus intereses en el mundo de los videojuegos.
Más allá de su utilidad dentro de Wipley, quería tratar el tema de cómo poder integrar estos servicios en nuestros desarrollos. Por suerte, el enorme éxito que han tenido las APIs REST nos permite disponer de APIs para casi todos los servicios que queramos utilizar. En concreto, para estas integraciones hemos utilizado las APIs:
- Google Contacts API – http://code.google.com/apis/contacts/
- Twitter API – http://apiwiki.twitter.com/Twitter-API-Documentation
Como Wipley funciona sobre PHP, hemos buscado algunas librerías que nos dieran un soporte más directo para estas APIs. Podríamos haberlo hecho directamente utilizando CURL, pero todo lo que pueda simplificar el desarrollo y no meter un costo computacional elevado, se agradece. Para el caso de Google Contacts, Zend provee Zend GData que nos falicita el acceso al API. El siguiente código ejemplifica cómo obtener los nombres y direcciones de correo de nuestros contactos utilizando PHP y Zend GData:
[php]
<?php
require_once ‘Zend/Loader.php’;
Zend_Loader::loadClass(‘Zend_Gdata’);
Zend_Loader::loadClass(‘Zend_Gdata_ClientLogin’);
Zend_Loader::loadClass(‘Zend_Http_Client’);
Zend_Loader::loadClass(‘Zend_Gdata_Query’);
Zend_Loader::loadClass(‘Zend_Gdata_Feed’);
//Cogemos el nombre de usuario y la password
$user = $_POST[ ‘user’ ];
$pass = $_POST[ ‘password’ ];
$contactos = array();
try {
//Hacemos login
$client = Zend_Gdata_ClientLogin::getHttpClient(
$user, $pass, ‘cp’);
$gdata = new Zend_Gdata($client);
$gdata->setMajorProtocolVersion(3);
//Lanzamos la consulta, para que nos devuelva los 500 primeros contactos
$query = new Zend_Gdata_Query(
‘http://www.google.com/m8/feeds/contacts/default/full’);
$query->maxResults = 500;
$feed = $gdata->getFeed($query);
//Parseamos el XML resultante
$results = array();
foreach($feed as $entry){
$xml = simplexml_load_string($entry->getXML());
$obj = new stdClass;
//Para cada uno de los contactos metemos nombre y mail en el array
$obj->name = (string) $entry->title;
foreach ($xml->email as $e) {
$obj->emailAddress[] = (string) $e[‘address’];
$contactos[(string) $e[‘address’]] = $obj->name;
}
$results[] = $obj;
}
} catch (Exception $e) {
die(‘ERROR:’ . $e->getMessage());
}
[/php]
Una vez tenemos el listado de contactos los procesamos como queramos procesarlos. En nuestro caso comprobamos cada correo para ver si tiene un usuario asociado en Wipley o no y sacamos dos listas, una para los usuarios que ya están en Wipley (que agregaremos como amigos) y otro para los que no están registrados (a los que enviaremos invitaciones).
Para Twitter la cosa también es sencilla. Utilizamos una pequeña librería, “TwitterOAuth” que nos ayuda a la hora de autenticarnos con Twitter (via OAuth) y también a enviar las peticiones al API de Twitter.
[php]
//Creamos un objeto TwitterOAuth a partir de las claves
//que nos da Twitter para nuestra aplicación
$to = new TwitterOAuth($consumer_key, $consumer_secret);
//Pedimos el token de autenticación a Twitter
$tok = $to->getRequestToken();
//Conseguimos el link de la página de Twitter que le pedirá
//permiso al usuario para integrar la aplicación con Twitter
$request_link = $to->getAuthorizeURL($token);
//Recogemos el token del usuario
$tok = $to->getAccessToken();
//Y ya estamos listos para enviar cosas a Twitter
$content = $to->OAuthRequest(‘https://twitter.com/statuses/update.xml’, array(‘status’ => ‘Hola Mundo!’), ‘POST’);
[/php]
Luego todo lo que falta son temas más cercanos a cómo queremos integrar estos servicios con nuestra plataforma, que lidian más con temas de interfaz y con la gestión interna de algunos datos que son cosas muy dependientes de cada aplicación.