Publicar en Twitter con API y autenticación OAuth C#

En Desarrollo, Webmasters por

Este artículo dedicado a la API de Twitter nos enseñará a publicar en Twitter con la autentificación OAuth mediante un programa en C#. Encontraréis el código fuente para su descarga al final del artículo, que consiste en un proyecto para Visual Studio 2010 en C# bajo .Net Framework 4.

Hace unos días publiqué como autentificarse en la API de Twitter con C# empleando el método Application-only que nos da una funcionalidad un tanto limitada ya que sólo podemos “leer” datos. Con este método de autentificación no podemos publicar en Twitter, por lo que esta vez emplearemos el método de autenticación OAuth que si nos permite publicar en Twitter a través de la API.

Publicar en Twitter con API OAuth en C#

Antes de empezar a programar en C# tenemos que tener claros unos conceptos previos que ya hemos comentado en artículos anteriores que trataban sobre como crear una aplicación en Twitter para usar la API y los diferentes métodos de autentificación en la API de Twitter. Una vez tenemos claros esos conceptos previos podemos pasar al siguiente apartado.

Configuración correcta de la aplicación Twitter

En primer lugar debemos configurar correctamente nuestra aplicación Twitter de forma que tenga permisos de “lectura y escritura” y recordad que cada vez que cambiemos los permisos hay que volver a generar los tokens de acceso pulsando el botón “Recreate my access token”.

Nos harán falta los siguientes datos de nuestra aplicación:

  • Consumer key
  • Consumer secret
  • Access token
  • Access token secret

Autentificar la API con OAuth y publicar en Twitter

Aquí es donde está la clave para publicar en Twitter y el proceso de autenticación es sencillo pero requiere el uso de bastantes parámetros por lo que puede resultar confuso a primera vista, pero una vez que nos familiarizamos con ellos es un proceso relativamente sencillo. Iremos analizando uno a uno todos los parámetros para autentificar nuestra petición a la API de Twitter.

Pra una mejor compresión de este texto no está de más leer previamente los artículos de protocolo HTTP para desarrolladores y la segunda parte de protocolo HTTP para desarrolladores.

Análisis de la cabecera HTTP de autentificación OAuth en Twitter

La autenticación OAuth se reduce a tener que enviar una cabecera HTTP con una serie de parámetros. Esta cabecera HTTP es del tipo Authorization con una serie de parámetros OAuth bastante larga. Para hacerse una idea lo mejor es ver un ejemplo de la cabecera de autentificación para luego analizar en profundidad cada elemento:

Authorization: OAuth oauth_consumer_key="TgFJXZXthKo1PaPa2nojVw", oauth_nonce="fd499de05a62321f46992debde57ccb5", oauth_signature="B2mjoFqrH4ErcVvb4PTJ6WTdwdg%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1388241123", oauth_token="2209782272-KRjensh0cvhrndGPza0rnAsSAh7PNDYS7lQ6xyo", oauth_version="1.0"

De esta cabecera ya disponemos de los parámetros oauth_consumer_key (es la consumer key de nuestra aplicación) y oauth_token (es el access token de la aplicación twitter), por eso ya no hablaré de ellos puesto que ya los tenemos listos para usar.

Parámetro oauth_nonce

Es un parámetro de caracteres alfanuméricos y de 32 caracteres de longitud. En un principio Twitter recomendaba emplear una codificación base64 para generar el oauth_nonce, pero como a veces las cadenas codificadas con base64 tienen los caracteres NO alfanuméricos “/” y “=” había que borrarlos, por esto es mucho más cómodo emplear un hash MD5 para este parámetro puesto que cumple nuestros requisitos al ser siempre de longitud 32 y con caracteres alfanuméricos SIEMPRE.

En el programa en C# este parámetro se crea con la función CreateNonce() que lo único que hace es generar un hash MD5 a partir de la fecha y hora actual exacta, por lo que nos aseguramos de que siempre será único.

Parámetro oauth_signature_method

Poco hay que decir de este parámetro puesto que siempre será HMAC-SHA1 que es el método de codificación de la firma que usa la API de Twitter. HMAC-SHA1 es un método de codificación de datos, nada más.

Parámetro oauth_timestamp

Es un parámetro que indica a Twitter cuando fue creada la petición de autenticación. Twitter necesita que sea un valor próximo a la fecha en la que se realiza la petición porque sino descarta esa petición.
Para generar este parámetro se emplea la función CreateTimestamp() que nos da el total de segundos transcurridos desde la fecha de origen UNIX (1 de Enero de 1970) hasta la actualidad. A esta forma de medir el tiempo se la conoce como tiempo UNIX o tiempo POSIX.

Parámetro oauth_version

Este parámetro será siempre 1.0 para cualquier petición a la API de Twitter.

Otros parámetros empleados: status, request_type y resource_url

  • status: es exclusivo de este ejemplo, que recordemos consiste en publicar un nuevo Tweet usando la API y autentificación OAuth. El parámetro estatus no es más que el contenido del Tweet que queremos publicar.
  • request_type: no es más que el tipo de verbo empleado en nuestra petición HTTP, en este ejemplo es del tipo POST.
  • resource_url: es la URL que interpreta nuestra petición a la API, en nuestro caso como se trata de publicar un Tweet la URL es https://api.twitter.com/1.1/statuses/update.json

Parámetro oauth_signature

Lo he dejado de último porque es el más complejo y para poder generarlo necesitamos usar varios de los parámetros que nombramos anteriormente. Este parámetro no es más que una firma que informa a Twitter de la integridad del mensaje (comprueba que no se ha modificado al ser enviado) y al mismo tiempo verifica que la aplicación tiene permisos para interactuar con la cuenta Twitter del usuario. En el programa se emplea la función CreateOAuthSignature(). Esta función codifica con el algoritmo HMAC-SHA1 una cadena de texto con la información de nuestra petición (le llamaremos baseString).

La baseString se genera concatenando los siguientes parámetros con el carácter “&”:

  • oauth_consumer_key
  • oauth_nonce
  • oauth_signature_method
  • oauth_timestamp
  • oauth_token
  • oauth_version
  • status
  • request_type
  • resource_url

Una vez que tenemos nuestra baseString generada procedemos a codificarla con el algoritmo HMAC-SHA1 empleando como llave HMAC los parámetros oauth_consumer_secret y oauth_token_secret concatenados por el carácter “&”, obteniendo como resultado una cadena de texto codificada con base64 que es nuestro parámetro oauth_signature listo para usar.
Twitter c#

Realizar petición HTTP autentificada con OAuth a la API de Twitter

Ya disponemos de todos los parámetros necesarios para formar nuestra cabecera HTTP de autenticación por lo que procedemos a realizar la petición HTTP con el método POST.

En este apartado el código en C# habla por si sólo, ya que realizamos una petición HTTP con POST estándar. Lo único destacable es advertiros de que los caracteres especiales (no alfanuméricos) que pueda contener nuestro Tweet deben ser codificados con la función URLEncode() puesto que la función que trae .Net Framework para esta tarea Uri.EscapeDataString() no codifica caracteres como los paréntesis y da errores.

Hasta aquí con la teoría, como ya puedes descargar el proyecto en C# con el código listo para usar.

Espero que os haya gustado este nuevo tutorial de como publicar en Twitter con la API y autentificación OAuth bajo C#.