
Hola, Bienvenidos. He aquí mi primer artículo Twitter Search API y Ruby on Rails. Si quieres integrar twitter en tu sitio web, filtrar hashtag, buscar por tweets en español/inglés, con coordenadas específicas de una región ó buscar dentro de la timeline de un usuario, este tutorial te puede ayudar…eso espero! =D
Voy a recrear el paso a paso de cómo fue mezclar la API de Twitter con un proyecto en ruby on rails, con layout basado en bootstrap 3.
Para partir necesitas:
Ejemplo lo trabajé en Ruby 2.0 en Rails 4.1.4 en mi compu. (Cómo instalar Rails?)
Una cuenta en Heroku y descargar Toolbelt
Tener una cuenta de usuario de Twitter.
Un proyecto de Ruby on Rails creado y operativo desde Localhost:3000
Paso 1: Creando una cuenta en Twitter developer.
1. Crea una cuenta de twitter.
2. Ingresa con tu user y Password a twitter
3. entra a https://apps.twitter.com/
4. click en el boton «create new APP»
5. completar el formulario de la nueva app
3. click en el tab «API KEY»
aqui tienes que reservar en un block de notas (ya parece receta de cocina! 🙂 ) 4 KEYS que twitter te proveerá, las cuales usaremos como «credenciales» de acceso. Las claves «access token/access token secret» se generan una vez que apretas el boton «generate token».
API key
API secret
Access token
Access token secret
El Access Level yo lo configuré con «read-write».
Con estos datos estamos ok para entrar a la segunda etapa del desarrollo.
Paso 2: Instalando la Gema Dotenv
Dotend es una gema que emula lo que existe en heroku localmente para poder homologar los ambientes de desarrollo.
Para instalar la gema tienes que escribir en el gemfile:
gem 'dotenv', '~> 0.11.1'
y luego ejecutas en la consola gitbash:
$ gem install dotenv
y ejecutar a continuación:
$ bundle
Paso 2.1: Instalando la Gema Twitter
Twitter gem es una interfaz de Ruby de la API de Twitter.
gem 'twitter', '~> 5.11.0'
y luego ejecutas en la consola gitbash:
$ gem install twitter
y ejecutar a continuación:
bundle
Paso 3: Configurando las Credenciales de Twitter
Para insertar las credenciales de Twitter (api keys) en la aplicación que crearemos, lo haremos de una forma un poco más larga, pero más segura.
1.- Crea un archivo -sin nombre- sólo con extensión «.env» en la raíz del proyecto y pega estos valores.
TWITTER_API_KEY = "aqui-va-tu-clave-twitter-api-key" TWITTER_API_SECRET = "aqui-va-tu-clave-twitter-api-secret" TWITTER_ACCESS_TOKEN = "aqui-tu-clave-access-token" TWITTER_ACCESS_TOKEN_SECRET = "aqui-tu-clave-access-token-secret"
revisa la imagen del archivo .env aqui
2. Agrega ahora la extensión .env dentro del archivo .gitignore, con esto nos aseguramos que «subes todos los archivos pero no los que están referenciados en el archivo .gitignore» de ésta manera se «ignoran» los datos sensibles al realizar un push a heroku o a github por ejemplo.
revisa la imagen de .gitignore aquí
3. en la consola gitbash tienes que escribir los siguientes comandos (para registrar en heroku cada KEY de twitter, uno a la vez.)
$ heroku config:set TWITTER_API_KEY="************" $ heroku config:set TWITTER_API_SECRET="************" $ heroku config:set TWITTER_ACCESS_TOKEN="************" $ heroku config:set TWITTER_ACCESS_TOKEN_SECRET="************"
luego de cada key agregada verás un mensaje como este:
settings config vars and restarting tunombredesitio...done, v340....
4. Ahora en tu proyecto > config > application.rb puedes poner las variables que contienen tus verdaderas claves de twitter.
$client = Twitter::REST::Client.new do |config| config.consumer_key = ENV['TWITTER_API_KEY'] config.consumer_secret = ENV['TWITTER_API_SECRET'] config.access_token = ENV['TWITTER_ACCESS_TOKEN'] config.access_token_secret = ENV['TWITTER_ACCESS_TOKEN_SECRET'] end
revisa la imagen de tu proyecto > config > application.rb aquí
EJEMPLO #1:
Estoy usando la API «Search» de twitter.
1. Vamos a Proyecto > app > controllers > welcome_controller.rb el ejemplo 1: (screenshoot)
«Listar una máximo de 3 tweets en español con el hashtag #hack4good excluyendo retweets»
def index @search = $client.search("#hack4good -rt", :lang => "es").take(3).collect end
«Listar una máximo de 3 tweets en español con el hashtag #hack4good incluyendo retweets»
def index #Ejemplo 2 twitter api: buscar un hashtag especifico de cualquier usuario. @search = $client.search("#hack4good", :lang => "es").take(3).collect end
2. Lo que puse en el controller, hay que mostrarlo por pantalla….eso se hace en la «Vista.
sigue esta ruta Proyecto > app > views > welcome > index.html.erb (screenshot)
<ul class="list-unstyled text-gris small"> <% @search.each do |tweet| %> <li> <span class="glyphicon glyphicon-music text-info"></span> <%= tweet.text%> <span class="text-gris-oscuro"> <%= time_ago_in_words(tweet.created_at) %></span> </li> <% end %> <a href="http://twitter.com/tunombredeusuario" title="Twitter"> <%= image_tag("iconotwitter.png", class:"pull-right") %> </a> </ul>
Explicando la vista index línea a línea
El código comienza con un ciclo each en la línea 2 <% @search.each do |tweet| %> se traduce mas o menos así: «por cada item tweet del objeto @search vamos a imprimir por pantalla todos los tweets iterados.
El <%= tweet.text %> es imprimir por pantalla el texto que contiene cada tweet.
El codigo de línea 5 <%= time_ago_in_words(tweet.created_at) %> imprime el tiempo transcurrido del tweet, pero en palabras. para implementar la funcion time_ago_in_words() revisa este link
Finamente el <% end %> cierra el Loop.
El Link que que se ve en linea 8 a la 10 <a href=»…»> imprime un icono de twitter que alc clickearlo se dirige a mi cuenta de twitter.
EJEMPLO #2:
Otro ejemplo es filtrar tweets de un usuario específico. Para esto seleccionamos un nombre de usuario, en este caso el mio
listar últimos 3 tweets, incluir retweets del user danigattoni_
Luego creamos un objeto @search para invocar a un método llamado «user_timeline» que necesita de 2 parámetros: el username y las opciones.
def index username = 'danigattoni_' options = {:count => 3, :include_rts => true} @search = $client.user_timeline(username, options) end
sigue esta ruta Proyecto > app > views > welcome > index.html.erb (screenshot)
<ul class="list-unstyled text-gris small"> <% @search.each do |tweet| %> <li> <span class="glyphicon glyphicon-music text-info"></span> <%= tweet.text%> <span class="text-gris-oscuro"> <%= time_ago_in_words(tweet.created_at) %></span> </li> <% end %> <a href="http://twitter.com/nombredeusuario" title="Twitter"> <%= image_tag("twittericono.png", class:"pull-right") %> </a> </ul>
Continúa en Twitter Search API + Ruby on Rails (II parte)

- Friendly URL en Rails - marzo 8, 2015
- Borrar un Scaffold en Ruby on Rails - enero 24, 2015
- «My Concerts Wishlist» ajax scaffold Ruby on Rails - enero 1, 2015
- StreetmusicMap parte 2: Integración Gmaps4Rails - diciembre 12, 2014
- StreetmusicMap parte 1: Combobox uno a muchos en Ruby on Rails - diciembre 11, 2014
- Twitter Search API + Ruby on Rails (II parte) - septiembre 24, 2014
- Twitter Search API + Ruby on Rails - septiembre 24, 2014
- SSL error: Certificate Verify Failed - septiembre 18, 2014