Twitteando desde C#: El API de Twitter y OAuth

Hace unos días quise hacer que una aplicación escribiera tweets y, aunque hay librerías muy buenas para ello, no quería tener una depencia binaria más. Además lo que necesito es algo muy sencillo y pensé que seguramente sería fácil implementarlo con un par de líneas de código sin tener que usar una librería entera. La realidad es que no ha resultado tan sencillo como esperaba y el resultado son unos cuantos posts sobre lo que he ido bien y las dificultades que he encontrado.

Es importante dejar claro que si quieres interactuar con Twitter, lo mejor es utilizar alguna librería probada como Twitterizer o TweetSharp, que pueden hacer casi cualquier cosa con Twitter y seguro que son mucho más sólidas que lo que voy a contaros.

El API de Twitter

Para interactuar con Twitter debemos tener una cuenta en Twitter y usar el API oficial de Twitter. Existe mucha documentación disponible sobre ella y merece la pena echarle un vistazo.

Si queremos hacer algo más que leer datos de Twitter, necesitamos usar el interface REST, que nos permite acceder a prácticamente todas las funcionalides de twitter, de hecho hasta hace poco la propia página web de Twitter usaba este API para todo, aunque ahora parece que están migrando a una solución basada en renderizar en el servidor para mejorar el rendimiento.

Al ser un API basado en REST, para acceder a él haremos uso fundamentalmente de objetos WebRequest y, concretamente, HttpWebRequest. Los datos serán enviados como formularios HTML y la respuesta podemos obtenerla en varios formatos como XML o JSON. Podríamos usar alguna librería como RestSharp para facilitarnos la vida, pero os recuerdo que la idea es hacerlo todo sin dependencias externas.

OAuth

La parte más complicada de interactuar con Twitter es, sin duda alguna, la seguridad. De hecho, si no fuese por esto seguramente podría haber cumplido mi objetivo con las 3 líneas de código que pensaba al principio.

Twitter utiliza OAuth para autorizar las peticiones HTTP, y entender y manejar OAuth no es una tarea trivial, pero si os animais a profundizar sobre el tema podéis seguir esta serie sobre OAuth que lo explica bastante bien.

La idea es que con OAuth podemos comprobar si cada petición que recibimos está autorizada o no por el usuario sin necesidad de que el usuario comparta su clave con sistemas que no sean el nuestro. Es decir, con OAuth podemos acceder en nombre de un usuario a un servicio sin necesidad de tener las credenciales de ese usuario.

A partir de esa idea tan sencilla todo se complica, con tokens viajando de acá para allá y distintas variantes como el 3-legged (autorización a 3 bandas), PIN-based (para situaciones sin navegador), etc.

Quiero mis tokens

En nuestro caso, queremos hacer algo muy concreto: acceder desde una aplicación a nuestra propia cuenta de twitter (o a una cuenta de twitter que nosotros controlemos y que creemos especificamente para la aplicación, que para el caso es lo mismo) para añadir y leer mensajes.

Según la recomendación de Twitter, para ello lo más fácil es tomar un atajo y dejar que twitter genere por nosotros todos los tokens necesarios para crear las peticiones OAuth, tanto los que identifican a la aplicación como los que conceden acceso, evitando así tener que recurrir a autorización a 3 bandas u otros procesos más complejos.

Para ello necesitamos seguir los pasos indicados en la documentación sobre aplicaciones. Al crear la aplicación es importante indicar que queremos permisos de lectura y escritura para poder enviar tweets. Si todo ha ido bien, al final en la pestaña de detalles de la aplicación tendremos algo como esto:

Configuración de aplicación en Twitter

Los datos que aparecen como OAuth settings son los tokens que identifican a la aplicación: Consumer key y Consumer secret. Por asimilarlo a un sistema PKI, el Consumer key sería la clave pública y el Consumer secret la clave privada (aunque no estoy muy seguro de que criptográficamente hablando sea correcto verlos así).

En la parte de Your access token, aparecen los tokens que representan el permiso que hemos concedido a la aplicación para acceder a esta cuenta de Twitter: Access token y Access token secret.

Tanto Consumer key como Access token viajarán en cada petición HTTP que realicemos, pero Consumer secret y Access token secret son, como podéis imaginar, secretos y deberán mantenerse seguros en nuestra aplicación (cómo hacer eso es otra historia en la que no entraré ahora).

Autorízame

Una vez que tenemos todos estos tokens, podemos montar una petición HTTP autorizada con OAuth. Para eso necesitamos añadir una cabecera HTTP de autorización con varios datos requeridos por el protocolo OAuth.

La parte más importante de esa cabecera es la firma que deberemos generar sobre todos los datos que estamos enviando. Para generar esa firma debemos usar algoritmo criptográfico de firma, por ejemplo SHA1, y emplear como clave de firma los tokens Consumer secret y Access token secret.

¿Y el código?

A todos nos gusta ver el código, pero esto ya se ha alargado mucho y ha sido más denso de lo que esperaba, así que lo vamos a dejar para el siguiente post: enviando el primer tweet.

5 comentarios en “Twitteando desde C#: El API de Twitter y OAuth

  1. Pingback: Twitteando desde C#: Enviar un tweet

  2. Pingback: Twiteando desde C#: Leyendo tweets

  3. Pingback: TinyTwitter: Una micro librería para twittear desde C#

Comentarios cerrados.