2009-02-14 17 views

उत्तर

10

मैं इसे करने की कोशिश नहीं की है, लेकिन मैं हाल ही में Feedzirra के बारे में पढ़ा है (यह प्रदर्शन के लिए बनाया जा करने का दावा): -

Feedzirra एक फ़ीड पुस्तकालय है कि है लिए बनाया गया है जितनी जल्दी हो सके कई फीड प्राप्त करने और अपडेट करने के लिए। के माध्यम से libcurl-multi का उपयोग करके तेज़ http, और तेजी से पार्सिंग के लिए sax-machine के माध्यम से nxogiri और के लिए libxml।

0

प्रदर्शन के बारे में सुनिश्चित नहीं हैं, लेकिन एक समान प्रश्न Parsing Atom & RSS in Ruby/Rails?

में उत्तर दिया गया तुम भी Hpricot, जो XML पार्स करता है लेकिन मान लिया गया है उसकी रचना है और किसी भी सत्यापन नहीं करता है कि इस पर गौर कर सकते हैं।

http://wiki.github.com/why/hpricot http://wiki.github.com/why/hpricot/hpricot-xml

+0

Hpricot एक HTML पार्सर है अधिक उन्हें पार्स करने उदाहरण के लिए, फ़ीड के साथ क्या करना चाहते हैं :( – collimarco

+0

एचटीएमएल एक्सएमएल का एक सबसेट है , और Hpricot इसे पार्स कर सकते हैं। बहुत से लोग सामान्य एक्सएमएल पार्स करने के लिए Hpricot का उपयोग करें। –

+0

http://wiki.github.com/why/hpricot/hpricot-xml –

3

आप (प्रसिद्ध) पायथन यूनिवर्सल फीडपार्सर के रूबी-पोर्ट, आरएफआईडीपार्सर का उपयोग कर सकते हैं। यह हैप्रिकॉट पर आधारित है, और यह वास्तव में तेज़ और उपयोग करने में आसान है।

http://rfeedparser.rubyforge.org/

एक उदाहरण:

require 'rubygems' 
require 'rfeedparser' 
require 'open-uri' 

feed = FeedParser::parse(open('http://feeds.feedburner.com/engadget')) 

feed.entries.each do |entry| 
    puts entry.title 
end 
1

जब आपके पास एक हथौड़ा है, सब कुछ एक कील की तरह लग रहा है। इसके लिए रुबी के अलावा किसी अन्य समाधान पर विचार करें। हालांकि मुझे रूबी और रेल से प्यार है और वेब विकास के लिए या शायद डोमेन विशिष्ट भाषा के लिए उनके साथ हिस्सा नहीं लेना चाहिए, मैं जावा में किए गए प्रकार या शायद पायथन या यहां तक ​​कि सी ++ में भारी डेटा उठाना पसंद करता हूं।

यह देखते हुए कि इस पार्स किए गए डेटा का गंतव्य डेटाबेस है, यह आपके समाधान के रेल भाग और अन्य भाषा भाग के बीच सामान्य बिंदु के रूप में कार्य कर सकता है। फिर आप अपनी प्रत्येक समस्या को हल करने के लिए सबसे अच्छा टूल का उपयोग कर रहे हैं और परिणाम संभवतः काम करने के लिए आसान है और वास्तव में आपकी आवश्यकताओं को पूरा करता है।

यदि गति वास्तव में सार का है, तो वहां एक अतिरिक्त बाधा क्यों जोड़ें और कहें, "ओह, जब तक मैं रुबी का उपयोग करता हूं तब तक यह केवल सार का सार है।"

0

शुरुआत में मैंने कुछ मूल एक्सएमएल पार्सिंग करने के लिए नोकोगिरी का उपयोग किया, लेकिन यह धीमा और अनियमित था (कभी-कभी) मैं feedzirra पर स्विच करता था और न केवल एक शानदार प्रदर्शन बढ़ावा था, इसमें कोई त्रुटि नहीं थी और यह पाई जितनी आसान थी। उदाहरण दिखाया नीचे

# fetching a single feed 
feed = Feedzirra::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing") 

# feed and entries accessors 
feed.title   # => "Paul Dix Explains Nothing" 
feed.url   # => "http://www.pauldix.net" 
feed.feed_url  # => "http://feeds.feedburner.com/PaulDixExplainsNothing" 
feed.etag   # => "GunxqnEP4NeYhrqq9TyVKTuDnh0" 
feed.last_modified # => Sat Jan 31 17:58:16 -0500 2009 # it's a Time object 

entry = feed.entries.first 
entry.title  # => "Ruby Http Client Library Performance" 
entry.url  # => "http://www.pauldix.net/2009/01/ruby-http-client-library-performance.html" 
entry.author  # => "Paul Dix" 
entry.summary # => "..." 
entry.content # => "..." 
entry.published # => Thu Jan 29 17:00:19 UTC 2009 # it's a Time object 
entry.categories # => ["...", "..."] 

अगर आप निम्नलिखित पर्याप्त होगा

source = Feedzirra::Feed.fetch_and_parse(http://www.feed-url-you-want-to-play-with.com) 
    puts "Parsing Downloaded XML....\n\n\n" 

    source.entries.each do |entry| 

    begin 
     puts "#{entry.summary} \n\n" 
     cleanURL = (entry.url).gsub("+","%2B") #my own sanitization process, ignore 
     scrapArticleWithURL(cleanURL) 
    rescue 
    puts "(****)there has been an error fetching (#{entry.title}) \n\n" 
    end 
संबंधित मुद्दे