私は、TwitterストリーミングAPIを使用してEventMachineプロセスを実行しています。ストリームのコンテンツが頻繁ではない場合は、常に問題があります。ここでEventMachineとTwitterストリーミングAPI
は、スクリプトの最小バージョンです:
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
私は「iphone」などのキーワードで検索した場合、すべてが私は使用頻度の低いキーワードを検索すると、私の流れがあることを保つだけでなく 作品最後のメッセージの約20秒後に非常に迅速に閉じられました。 注:http.errorは常に空ですので、ストリームが閉じている間はわかりにくいです... もう一方の類似したPHPバージョンは閉じていないので、おそらくeventmachine/http-私は理解していません。どれがどちらかを理解していません。
あなたが動的にこの例では、キーワードを追加/削除することができる方法の任意のアイデア: これを試してみてください? – tibbon
@tibbon私が知る限り、キーワードを追加/削除する唯一の方法は、ストリームを停止することです。つぶやきを失うことなくそれを行うには、いくつかのストリームを処理するのが最善の方法です。たとえば、新しいパラメータ(および別のツイッターアカウント)を使用して2番目のストリームを開き、1番目のストリームを開いて最初のストリームを閉じます。しかし、両方のストリームが開かれている小さな期間、特に大量の場合に重複が起こることに注意してください。 – tomsoft
ちょっと@tomsoft私と同じようなコードを使っていますが、私にとっては 'http.stream do | chunk |チャンクの終わりは何も印刷されません...それはちょうどそこにぶら下がっています..何考えですか? –