Sto eseguendo un processo EventMachine utilizzando l'API di streaming di Twitter. Ho sempre un problema se il contenuto dello stream non è frequente.API di streaming EventMachine e Twitter
Ecco la versione minima dello script:
require 'rubygems'
require 'eventmachine'
require 'em-http'
require 'json'
usage = "#{$0} <user> <password> <track>"
abort usage unless user = ARGV.shift
abort usage unless password = ARGV.shift
abort usage unless keywords= ARGV.shift
def startIt(user,password,keywords)
EventMachine.run do
http = EventMachine::HttpRequest.new("https://stream.twitter.com/1/statuses/filter.json",{:port=>443}).post(
:head =>{ 'Authorization' => [ user, password ] } ,
:body =>{"track"=>keywords},
:keepalive=>true,
:timeout=>-1)
buffer = ""
http.stream do |chunk|
buffer += chunk
while line = buffer.slice!(/.+\r?\n/)
if line.length>5
tweet=JSON.parse(line)
puts Time.new.to_s+"#{tweet['user']['screen_name']}: #{tweet['text']}"
end
end
end
http.errback {
puts Time.new.to_s+"Error: "
puts http.error
}
end
rescue => error
puts "error rescue "+error.to_s
end
while true
startIt user,password,keywords
end
Se cerco una parola chiave come "iPhone", tutto funziona bene Se cerco una parola chiave meno frequentemente usato, il mio flusso continua ad essere chiuso molto rapidamente, circa 20 secondi dopo l'ultimo messaggio. Nota: http.error è sempre vuoto, quindi è molto difficile capire mentre lo stream è chiuso ... All'altro estremo, la versione php nerly simile non è chiusa, quindi sembra probabilmente in discussione con eventmachine/http- ma non capisco quale ...
Qualsiasi idea di come si potrebbe in modo dinamico aggiungere/rimuovere le parole chiave in questo esempio? – tibbon
@tibbon per quanto ne so, l'unico modo per aggiungere/rimuovere parole chiave è quello di fermare il flusso. Per farlo senza perdere alcun tweet, il modo migliore è gestire diversi stream. Ad esempio, aprendo un secondo stream con i nuovi parametri (e un altro account Twitter) e una volta aperto, chiudendo il primo. Ma attenzione alla possibile duplicazione durante il breve periodo in cui entrambi i flussi sono aperti, specialmente in caso di volume elevato – tomsoft
hey @tomsoft Sto usando un codice simile come te ma per me 'http.stream do | chunk | mette fine pezzo 'non stampa nulla ... si blocca lì ... qualsiasi idea? –