tOAuth: la API de Twitter con OAuth y PHP
19 Febrero 2010 15 Comentario(s) Comentar Trackback URILa API de Twitter dispone de soporte para OAuth, un protocolo que permite que los usuarios puedan hacer uso de aplicaciones sin tener que introducir su usuario y contraseña, evitando el riesgo que esto conlleva. Para los usuarios, este protocolo es una ventaja, además de por la seguridad que ofrece, por la comodidad a la hora de autentificarse en las aplicaciones (para lo que bastan unos simples clics del ratón), pero para los desarrolladores no lo es tanto. Desde mi (humilde) punto de vista, al OAuth le pueden dar por saco.
En la documentación oficial de la API hay un código de ejemplo alojado en GitHub de cómo usar OAuth con PHP. Este ejemplo no me gustaba y me parecía lioso, por eso me puse a ver cómo funcionaba hasta conseguir crear un clon más sencillo. El resultado, tOAuth, una class en PHP que permite usar de manera simple la API de Twitter con OAuth.
Podéis encontrar el código de la class junto con un ejemplo de uso en el repositorio tOAuth de mi cuenta de GitHub. El ejemplo creo que es bastante explícito por sí solo, pero de todas formas a continuación procedo a explicarlo.
Registro:
Para hacer uso de OAuth en nuestras aplicaciones, deberemos tenerlas registradas como tales en Twitter. Esto se logra desde la página http://twitter.com/oauth_clients/ en la que tenemos un formulario para hacer esto y donde podremos administrar todas las aplicaciones que registremos. En dicho formulario tendremos que rellenar varios campos, entre ellos:
- Application Type: Evidentemente tendremos que marcar "Browser"
- Callback URL: La URL a la que Twitter redirigirá a los usuarios una vez autentificados. Por ejemplo: http://dominio.com/toauth
- Default Access type: Marcamos "Read & Write" para que nuestra aplicación sea capaz de enviar datos (por ejemplo, para actualizar el timeline del usuario)
- Use Twitter for login: Marcamos "Yes, use Twitter for login"
Una vez registrada la aplicación, se nos asignarán dos keys fundamentales para el uso de OAuth. En el ejemplo, estas dos keys son definidas como constantes para su posterior uso:
<?php
define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxx');
define('CONSUMER_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
Todo usuario que quiera hacer uso de nuestra aplicación tendrá que autentificarse. Este proceso consta de dos partes. Lo primero será obtener el link de Twitter al que tendrá que entrar el usuario para autentificarse:
<?php
$connection = new tOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$a = $connection->authenticate(true);
Esto nos devolverá un array con dos token que deberemos almacenar de forma temporal (por ejemplo en una sesión) y el link mencionado anteriormente.
Una vez que el usuario vuelva a nuestra página tendremos que hacer una nueva petición enviando los token de la anterior ($_SESSION['toauth_rt'] y $_SESSION['toauth_rts'] en el ejemplo):
<?php
$connection = new tOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['toauth_rt'], $_SESSION['toauth_rts']);
$a = $connection->authenticate(false);
Nuevamente nos devolverá un array, salvo que en este caso contendrá sólo dos token que son los que usaremos en las peticiones a la API como si del usuario/contraseña se tratara. Si queremos podemos guardarlo de forma permanente (por ejemplo, en una base de datos) para usos futuros.
Peticiones:
Para realizar peticiones (ya sean GET o POST) a la API lo primero será crear una nueva instancia de la class pasándole los token del usuario que obtuvimos en la autentificación ($_SESSION['toauth_at'] y $_SESSION['toauth_ats'] en el ejemplo):
<?php
$connection = new tOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['toauth_at'], $_SESSION['toauth_ats']);
Después ya podremos hacer las peticiones que necesitemos a la API. Ejemplos:
<?php
# GET Usage: array get ( string $method [, array $args ] )
# POST Usage: array post ( string $method , array $args )
$r = $connection->get('account/verify_credentials');
$r = $connection->post('statuses/update', array('status'=>'Hello World'));
Y esto es todo, espero que os sea de utilidad tanto como a mí. Si queréis estar al tanto de cambios y actualizaciones, podéis suscribiros al repositorio en GitHub. Para cualquier duda, sugerencia, crítica o lo que sea, ya sabéis, dejad un comentario :)
wow :) por fin lo sacas xDDD gracias :3