SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Julián R. Figueroa | @unmultimedio | julian@liztum.com
Ruby Twitter Bot 101
Lleva tus cuentas de Twitter al siguiente nivel
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’
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
#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
liztum.com fb.com/liztum twitter.com/liztum
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)
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)
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' )
Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
# Send a tweet
@client.update( 'Hello World, from
Terminal')
# Search (within 1 week)
@client.search(query, options).take(amount)
# Fav (Like) a tweet
@client.favorite(tweet)
# Basic retweet
@client.retweet(tweet)
Métodos básicos
# Classic quote retweet
@client.update( "RT
@#{tweet.user.screen_name}: #{tweet.text}" )
# New quote retweet
@client.update( "¡Hey! #{tweet.url.to_s}" )
# Reply a tweet
@client.update(
"@#{tweet.user.screen_name} ¡Hey!" ,
in_reply_to_status_id: tweet.id
)
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
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
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
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
Julián R. Figueroa | @unmultimedio | julian@liztum.com
Revisión código propio
Revisión
#UnBuenLibroEnRubyBogota
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
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
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
● …
Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota
TwitterBot: Posibilidades
visibletweets.com
walls.io
tweetbeam.com
tweetfavy.com
hashtracking.com
Q&A

Más contenido relacionado

Más de Julián R. Figueroa

Más de Julián R. Figueroa (8)

Conversatic - Fusagasugá
Conversatic - FusagasugáConversatic - Fusagasugá
Conversatic - Fusagasugá
 
Presentacion Digital Bank Aval
Presentacion Digital Bank AvalPresentacion Digital Bank Aval
Presentacion Digital Bank Aval
 
BarCamp Scrum Col30-2015
BarCamp Scrum Col30-2015BarCamp Scrum Col30-2015
BarCamp Scrum Col30-2015
 
La Incursión de las Pymes en la Era Digital
La Incursión de las Pymes en la Era DigitalLa Incursión de las Pymes en la Era Digital
La Incursión de las Pymes en la Era Digital
 
#Cappacitate2015 Bogota
#Cappacitate2015 Bogota#Cappacitate2015 Bogota
#Cappacitate2015 Bogota
 
Scrum UMNG - Herramientas de Emprendimiento
Scrum UMNG - Herramientas de EmprendimientoScrum UMNG - Herramientas de Emprendimiento
Scrum UMNG - Herramientas de Emprendimiento
 
Cappacitate Pereira
Cappacitate PereiraCappacitate Pereira
Cappacitate Pereira
 
Cappacitate Android Medellín
Cappacitate Android MedellínCappacitate Android Medellín
Cappacitate Android Medellín
 

Último

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Último (13)

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

Ruby twitter bot

  • 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' )
  • 9. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota # Send a tweet @client.update( 'Hello World, from Terminal') # Search (within 1 week) @client.search(query, options).take(amount) # Fav (Like) a tweet @client.favorite(tweet) # Basic retweet @client.retweet(tweet) Métodos básicos # Classic quote retweet @client.update( "RT @#{tweet.user.screen_name}: #{tweet.text}" ) # New quote retweet @client.update( "¡Hey! #{tweet.url.to_s}" ) # Reply a tweet @client.update( "@#{tweet.user.screen_name} ¡Hey!" , in_reply_to_status_id: tweet.id )
  • 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 ● …
  • 18. Julián R. Figueroa | @unmultimedio | #UnBuenLibroEnRubyBogota TwitterBot: Posibilidades visibletweets.com walls.io tweetbeam.com tweetfavy.com hashtracking.com
  • 19. Q&A