• Inspiración
  • Tutoriales
  • Bootcamp

Planer

  • Inspiración
  • Tutoriales
  • Bootcamp

Ruby 24

Twitter Search API + Ruby on Rails

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>&nbsp; <%= 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.

Así se ve el Twitter API y ruby. código del View con los tweets que encontró la consulta en el controller.

Así se ve el código del View con los tweets .

 

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>&nbsp; <%= 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>

 

screenshot-username-tweets

 

 

 

 

 

 

 

 

 Código fuente disponible Github.

Continúa en  Twitter Search API + Ruby on Rails (II parte)

 

Share
September 24, 2014 Ruby, TutorialesRuby on Rails, twitter api

SSL error: Certificate Verify Failed

certificado SSL
Cuando se utilizan las APIs de Facebook o de Twitter en Ruby on Rails en un computador con windows verás el siguiente error.
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Este es un error común cuando se trabaja con APIs que están detrás de un protocolo HTTPs. La solución para arreglar este error en windows consiste en seguir los siguientes pasos.

1. Descargar este archivo: http://curl.haxx.se/ca/cacert.pem

2. En tu proyecto > lib guardas ese archivo con “guardar como..”  y le pones este nombre: ca-bundle.crt

3. Luego abres tu editor de texto favorito, el mío es Sublime y en  tu proyecto >config >initializers

4. Dentro de carpeta “initializers” creas un archivo llamado fix_ssl.rb

5. Pega este código a continuación: (Screenshot)

require 'open-uri'
require 'net/https'
 
module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=
    
    def use_ssl=(flag)
      self.ca_file = Rails.root.join('lib/ca-bundle.crt').to_s
      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end

Luegos reinicias el Server por consola con rails s

 

PD: si revisas el ejemplo con el artículo original certificados de seguridad de Ruby te darás cuenta de un pequeñísimo cambio en la línea 9
original:

1 self.ca_file = Rails.root.join(‘lib/ca-bundle.crt’)
modificación:

self.ca_file = Rails.root.join(‘lib/ca-bundle.crt’).to_s

Este cambio se debe a que Rails 4 necesita este recibir este valor como un string o dará como error

error+no implicit conversion of Pathname into String
Share
September 18, 2014 Ruby, Seguridad, TutorialesAPIs, Certificado SSL, Ruby on Rails, SSL, Twitter

Vim + Tmux una powerup para programadores

Cómo instalar Tmux en OSX y en Ubuntu (En windows se puede pero se necesita CYGWIN)

 

Share
VideoSeptember 11, 2014 Herramientas, Ruby, TutorialesHerramientas, tmux, vim

Actualización de vistas parciales de Rails en tiempo real

Puedes ver el listado de pasos a seguir para implementar vistas parciales sincronizadas de forma automática en la página oficial.

 

Share
VideoSeptember 9, 2014 RubyGemas, ruby, Ruby on Rails

Como cargar un javascript específico en un controller de rails

javascript

Una de las muchas ventajas que tiene ruby on rails es que junta todos los archivos de javascript dentro de la carpeta de assets en uno solo, haciendo mucho más rápida la carga y transferencia cuando se encuentra en un entorno de producción. La desventaja de juntar todos los archivos es que en algunos casos podríamos querer que un javascript se ejecute únicamente en una página específica, o sea exclusivamente para un controller y para una página específica. Hay varias formas de resolver este problema, pero hasta el momento la más sencilla que he encontrado es ocupando la gema LoadJS https://github.com/guidomb/loadjs Para ocuparla basta con agregar la gema al gemfile

gem 'loadjs'

Luego realizar un bundle y reiniciar el servidor. El siguiente paso es cambiar la linea de código del layout (o layouts) donde está la etiqueta body, por la siguiente:

<body data-controller="<%= controller.controller_path %>" data-action="<%= controller.action_name %>">

Dentro de asseets/javascript/application.js hay que cargar loadjs

//= require loadjs

y finalmente, el javascript que queramos que se ejecute específicamente en un vista y una acción, tenemos que envolverlo con

load("foo#bar", function (controller, action) {
  alert("Hello World!");
});

Obviamente cambiando foo#bar por el controller#accion correspondientes. Existe sólo un gran contra en esta solución, que expone el nombre de los controller y de las acciones en el código, no es grave pero es bueno que estés consciente de la información que estas exponiendo.

Advertencia: Turbolinks no será tu amigo, la gema de jquery-turbolink te ayudará en el proceso:

 

Share
August 23, 2014 Ruby, TutorialesJavascript, Ruby on Rails
Page 4 of 5«12345»
Tags
mostbetslotticamostbet UZslottica PLkudos casino no deposit bonuskudos casino bonus codeskudos casino free chipkudos casino loginRuby on Railskudos casino sister siteskudos casino free spinskudos casino no deposit bonus codesaviatoraviator KZozwincasinoozwincasino AUemprendimientos digitalesfortunetigerfortunetiger BRTutorialesDiseño20bet plbet20 casinokudos casinoLondonLondon UZ20 betbj88slottica BR20bet casino logowanie20bet kasynoHerramientas20 bet casinohtml5gratogana entrargratogana juegos en vivo20bet logowanieWordpressrubyLanding PageBases de datosplaycroco casinoplay crocogratogana onlineparty poker casino
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • Interesado en otros tipos de emprendimiento?

    Quieres aprender a importar y exportar productos a todo el mundo? entra aquí

  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • No te pierdas ningún artículo.

  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • 2025 © UGMSLOT
    Planer theme by Dankov