1. Julián R. Figueroa | @unmultimedio | julian@liztum.com
Ruby Twitter Bot 101
Lleva tus cuentas de Twitter al siguiente nivel
2. Julián R. Figueroa | @unmultimedio | julian@liztum.com
Disclaimer 1:
Hay ¡muchos!
Una búsqueda sencilla en github
+80,000 ‘twitter’ (API, interface)
+6,400 ‘twitter bot’ (py, js, rb)
+90 ‘twitter bot ruby’
3. Julián R. Figueroa | @unmultimedio | julian@liztum.com
Disclaimer 2:
Basado en…
Publicación existente en CodeByCodes:
http://www.codebycodes.com/blog/2015/08
/31/creating-a-simeple-twitter-bot-with-ruby
4. #UnBuenLibroEnRubyBogota
1. Usa el hashtag en un tweet + mensaje (opcional) + media (opcional)
2. Ver respuesta de @unmultimedio
3. RT de la respuesta (si te gusta la recomendación)
4. Repetir
6. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
Requerimientos iniciales
1. Ruby +2.0
2. Gema oficial “Twitter”
(http://www.rubydoc.info/gems/twitter/file
/README.md)
3. Documentación API REST Twitter
(https://dev.twitter.com/rest/reference)
Limitaciones:
● Igual 140 char
● Búsqueda por índice 1
semana
● Uso penalizable
○ 150 logged out
○ 350 authenticated
○ ~400 favs (@liztum)
7. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
Autorizar aplicación Twitter
1. Crea una cuenta en Twitter
2. Completa información básica
3. Verifica número telefónico
a. Usa el app (SMS, Llamada)
4. Ve al sitio de aplicaciones de Twitter
(https://apps.twitter.com/)
5. Crea una nueva aplicación
6. Genera credenciales de acceso
7. Copia los valores a local (Trátalos
como contraseña)
8. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
Hello World
# In your terminal
gem install twitter
# bot.rb
require 'Twitter'
@client = Twitter::REST::Client.new do |config|
config.consumer_key = your_own_consumer_key
config.consumer_secret = your_own_consumer_secret
config.access_token = your_own_access_token
config.access_token_secret = your_own_access_token_secret
end
# Send a tweet
@client.update( 'Hello Ruby World, from Terminal' )
10. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
Search Options
● :since_id (Integer) — ID más grande (más reciente) que el parámetro.
● :max_id (Integer) — ID más pequeño (más antiguo) o igual al
parámetro.
● :geocode (String) — Radio (km/mi) de una latitud/longitud.
○ 4.753,-74.113,1150km
● :lang (String) — Idioma (ISO 639-1).
○ es
● :locale (String) — Idioma de la búsqueda.
○ en
● :result_type (String) — Tipo preferido de resultados.
○ mixed | recent | popular
11. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
def auto_fav(query)
return if query.empty?
tweets = @client.search(query).take(50)
tweets.each do |tweet|
@client.favorite(tweet)
end
end
FavBot
12. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
def auto_fav(query, options: {}, amount: 50)
return if query.empty?
faved = 0
tweets = @client.search(query, options).take(amount)
tweets.each do |tweet|
@client.favorite(tweet)
faved += 1
puts "Faved(@#{tweet.user.screen_name}): #{tweet.text}"
end
puts "Faved #{faved} tweets."
end
FavBot
13. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
FavBot
def auto_fav(query, options: {}, amount: 50, skip: true, one_per_query: true)
return if query.empty?
faved = 0
faved_users = []
tweets = @client.search(query, options).take(amount)
tweets.each do |tweet|
if skip && @followers.include?(tweet.user.id)
puts "Skipped(@#{tweet.user.screen_name}): #{tweet.text}"
next
end
if one_per_query && faved_users.include?(tweet.user.id)
puts "Skipped(@#{tweet.user.screen_name}): #{tweet.text}"
next
end
@client.favorite(tweet)
faved_users << tweet.user.id
faved += 1
puts "Faved(@#{tweet.user.screen_name}): #{tweet.text}"
end
puts "Faved #{faved} tweets."
end
14. Julián R. Figueroa | @unmultimedio | julian@liztum.com
Revisión código propio
Revisión
#UnBuenLibroEnRubyBogota
15. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
¡Give me the code!
● Los métodos expuestos
● Protección de llaves (GIT)
● Auto fav (@liztum y @unmultimedio)
● Método recomendaciones de libros
● Instrucciones básicas
Repo bajo licencia GNU:
https://github.com/unmultimedio/ruby-twitter-bot
16. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
Próximos pasos
1. “Applicacionar”, ¿Rails?, ¿Sinatra?
2. Sistema de usuarios, AutoLoad cuenta, autorizar aplicación pública
3. Estabilizar, control de errores (140 char, API Limit, …)
4. Integrar
a. Exponer como Saas
b. Integrar en aplicaciones propias
c. Iniciar proyecto OpenSource
17. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
TwitterBot: Posibilidades
● Growth Hacking (cuentas personales, cuentas empresariales)
○ Seguimiento de hashtags, cuentas, ubicaciones
● SaaS de automatizar Twitter
● ‘Engagement’ con la audiencia
● Responder automáticamente las menciones
● Conexión con apps propias
○ “Share on twitter”
● Analizador de Hashtag(s) para eventos
● Concursos basados en Twitter
● …