Ruby (Rails), Java, JavaScript, PostgreSQL, Cloud, Ubuntu :)

Twiteando desde Ruby. Usando gema de Twitter para Ruby [Parte I]



Hoy daremos un pequeño paseo por una de mis gemas favoritas para Ruby, hablo de la gema para Twitter, que podemos encontrar en https://github.com/sferik/twitter. Como pudieron ver, si ingresaron al enlace en cuestión, hay una gran cantidad de documentación realmente útil disponible, así que para comenzar no pretendo reinventar la rueda, aunque además de lo básico también exploraremos algunas maneras ingeniosas de usar esta excelente gema.

Entonces arrancamos, y para comenzar podemos ir abriendo nuestra querida consola o terminal. De momento estoy suponiendo que ya tienes instalado Ruby en tu PC o Mac, sino instalarlo es una cosa sencilla, puedes consultar mi tutorial para Ubuntu 12.04 aquí.

Instalando gema de Twitter

gem install twitter

Luego sigue un paso necesario por razones de seguridad. En el sitio de la gema lo expresan de la siguiente manera:
Para asegurar que el código que se está instalando no ha sido manipulado, se recomienda que compruebe la firma. Para ello, es necesario añadir la llave pública como un certificado de confianza (sólo es necesario hacerlo una vez)
gem cert --add <(curl -Ls https://raw.github.com/sferik/twitter/master/certs/sferik.pem)

A continuación instalamos la gema con directivas de alta seguridad:

gem install twitter -P HighSecurity

Creando aplicación en Twitter

Ya con esto tenemos la mitad del trabajo hecho, ahora falta el otro 25%, que no son sino configuraciones que podemos hacer directamente en Twitter.

Para ello nos vamos a esta URL, y registramos una nueva aplicación en Twitter:


Una vez creada nuestra aplicación nos dirigirá a otra pantalla que contiene información valiosa que utilizaremos en los pasos siguientes.


¿Que es OAuth y qué son Access Tokens?

Los datos que necesitaremos luego son: Consumer key y Consumer secret. Pero antes de continuar abordaré un poco de qué significa OAuth y el porqué de estos datos.

Wikipedia define OAuth de la siguiente manera:
OAuth (Open Authorization) es un protocolo abierto, propuesto por Blaine Cook y Chris Messina, que permite autorización segura de un API de modo estándar y simple para aplicaciones de escritorio, móviles, y web.
OAuth logo
Para desarrolladores de consumidores, OAuth es un método de interactuar con datos protegidos y publicarlos. Para desarrolladores de proveedores de servicio, OAuth proporciona a los usuarios un acceso a sus datos al mismo tiempo que protege las credenciales de su cuenta. En otras palabras, OAuth permite a un usuario del sitio A compartir su información en el sitio A (proveedor de servicio) con el sitio B (llamado consumidor) sin compartir toda su identidad.
De manera que de momento, tenemos una especie de llave de acceso y una clave para acceder a nuestra aplicación en twitter. Pero lo único que nos falta es acceder a nuestro perfil [o a cualquier otro] con el fin de publicar contenido y realizar acciones propias de twitter como seguir, ver información de usuarios, retwitear, etc. Y para hacer eso necesitaremos un Access Token.

Twitter define los Access Token de la siguiente manera:
Para hacer llamadas autorizadas a las API de Twitter, la aplicación debe primero obtener un token de acceso OAuth en nombre de un usuario de Twitter. La forma en que va a obtener esos tokens dependerá de su caso de uso. https://dev.twitter.com/docs/auth/obtaining-access-tokens.

Configuraciones finales y generación de Access Token

 Antes de continuar debemos hacer un paso adicional. De momento nuestra aplicación tiene solo permisos de lectura, pero para lo que la necesitamos en este tutorial, es necesario tener permisos de lectura y escritura.Así que estando en nuestra aplicación, nos vamos a "Settings" o ajustes.


Una vez allí, nos vamos a la sección de Tipo de Aplicación, en la cual seleccionamos la última opción "Read, Write and Access direct messages".

Guardamos y regresamos a la sección de "Details". En la parte hay un apartado para nuestro token de acceso, presionamos en "Crear mi token de acceso" y listo. Ya con eso tendremos los datos que necesitamos para hacer nuestras pruebas.


El "Hello World" del tutorial

Muy bien, ahora que ya hemos generado los datos que necesitábamos, procederemos a configurar nuestra primera aplicación en Ruby en consola, que nos preguntará si queremos publicar un Tweet y nos dará la oportunidad de hacerlo.

La estructura básica será la siguiente:
  • Primero necesitaremos incluir la gema de Twitter en nuestra aplicación:
     require 'twitter'
  • Luego vamos a necesitar todo lo que hemos generado a partir de nuestra aplicación de Twitter
    Twitter.configure do |config|
      config.consumer_key = 'TU_CONSUMER_KEY'
      config.consumer_secret = 'TU_CONSUMER_SECRET'
      config.oauth_token = 'TU_TOKEN_DE_ACCESO'
      config.oauth_token_secret = 'TU_TOKEN_SECRETO'
    end
  • Un poco de relleno
    puts "Publicar un nuevo Tweet..."
    tweet= gets() #Obtenemos lo que el usuario digite
    
    
    
    
    
    
  • Y ahora es momento de la magia
    Twitter.update(tweet)

El código completo:

   require 'twitter'

  Twitter.configure do |config|
      config.consumer_key = 'TU_CONSUMER_KEY'
      config.consumer_secret = 'TU_CONSUMER_SECRET'
      config.oauth_token = 'TU_TOKEN_DE_ACCESO'
      config.oauth_token_secret = 'TU_TOKEN_SECRETO'
    end

   puts "Publicar un nuevo Tweet..."
   tweet= gets() #Obtenemos lo que el usuario digite

   Twitter.update(tweet)

"Hello World" con ciertas mejoras

Ahora digamos que tenemos múltiples usuarios. Entonces que pasaría si quisieramos usar nuestra aplicación previamente creada para actualizar el estado de varios usuarios.

   require 'twitter'

  Twitter.configure do |config|
      config.consumer_key = 'TU_CONSUMER_KEY'
      config.consumer_secret = 'TU_CONSUMER_SECRET'
    end
     
    gerardo = Twitter::Client.new(
        :oauth_token => "Mi token acceso",
        :oauth_token_secret => "Mi acceso secreto"
    )

   david = Twitter::Client.new(
        :oauth_token => "Su token de acceso",
        :oauth_token_secret => "su token secreto"
    )

   puts "Publicar un nuevo Tweet como Gerardo..."
   tweet= gets() #Obtenemos lo que el usuario digite
   gerardo.update(tweet)

   puts "Publicar un nuevo Tweet como David..."
   tweet= gets() #Obtenemos lo que el usuario digite
   david.update(tweet)

Eso ha sido todo para esta primera parte. En la segunda parte estaremos explorando otras interesantes caracteristicas de esta excelente gema. Si tienen dudas o problemas al respecto, favor preguntar en los comentarios. Saludos.