मैं ट्विटर स्ट्रीमिंग एपीआई का उपयोग कर इवेंटमैचिन प्रक्रिया चला रहा हूं। यदि स्ट्रीम की सामग्री अक्सर नहीं होती है तो मुझे हमेशा एक समस्या है।इवेंटमैचिन और ट्विटर स्ट्रीमिंग एपीआई
यहाँ स्क्रिप्ट के न्यूनतम संस्करण है:
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 संस्करण बंद नहीं है, इसलिए संभवतः इवेंटमाचिन/http- एम लेकिन मैं नहीं समझता कि कौन सा ...
कैसे आप गतिशील रूप से हटाने के इस उदाहरण में कीवर्ड जोड़ सकते हैं/के किसी भी विचार: इस प्रयास करें? – tibbon
@tibbon जहां तक मुझे पता है, कीवर्ड जोड़ने/निकालने का एकमात्र तरीका स्ट्रीम को रोकना है। किसी भी ट्वीट को खोए बिना इसे करने के लिए, सबसे अच्छा तरीका कई धाराओं को संभालना है। उदाहरण के लिए, नए पैरामीटर (और एक अलग ट्विटर खाता) के साथ दूसरी स्ट्रीम खोलना और एक बार खोला गया, पहले को बंद करना। लेकिन छोटी अवधि के दौरान संभावित डुप्लिकेशन के बारे में सावधान रहें, जहां दोनों धाराएं खोली गई हैं, खासकर उच्च मात्रा – tomsoft
हे @ टॉमसोफ्ट के मामले में मैं आपके जैसे समान कोड का उपयोग कर रहा हूं लेकिन मेरे लिए 'http.stream do | chunk | चंक एंड रखता है 'कुछ भी प्रिंट नहीं करता है ... यह सिर्फ वहां लटकता है .. कोई विचार? –