Ho bisogno di analizzare migliaia di feed e le prestazioni sono un requisito essenziale. Hai qualche suggerimento?Analisi RSS/Atom ad alte prestazioni con Ruby on Rails
Grazie in anticipo!
Ho bisogno di analizzare migliaia di feed e le prestazioni sono un requisito essenziale. Hai qualche suggerimento?Analisi RSS/Atom ad alte prestazioni con Ruby on Rails
Grazie in anticipo!
non l'ho provato, ma ho letto su Feedzirra di recente (che sostiene di essere costruito per le prestazioni): -
Feedzirra è una libreria di alimentazione che è progettata per ottenere e aggiornare molti feed il più rapidamente possibile. Questo include usando libcurl-multi attraverso la gemma taf2- per ottenere http più veloce, e libxml tramite nokogiri e sax-machine per un'analisi più rapida.
Non sono sicuro circa le prestazioni, ma una domanda simile è stato risposto a Parsing Atom & RSS in Ruby/Rails?
Si potrebbe anche prendere in considerazione Hpricot, che analizza XML, ma si presume che sia ben formato e non fa alcuna convalida.
http://wiki.github.com/why/hpricot http://wiki.github.com/why/hpricot/hpricot-xml
È possibile utilizzare RFeedParser, un Ruby-port di (famoso) Python Universal FeedParser. È basato su Hpricot ed è veramente veloce e facile da usare.
http://rfeedparser.rubyforge.org/
Un esempio:
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
Quando tutto quello che hai è un martello, tutto sembra un chiodo. Considerare una soluzione diversa da Ruby per questo. Anche se amo Ruby e Rails e non vorrei separarmene per lo sviluppo web o forse per un linguaggio specifico del dominio, preferisco il pesante sollevamento dei dati del tipo che descrivi essere eseguito in Java, o forse in Python o anche in C++.
Dato che la destinazione di questi dati analizzati è probabilmente un database, può fungere da punto comune tra la parte Rails della soluzione e l'altra lingua. Quindi stai utilizzando lo strumento migliore per risolvere ciascuno dei tuoi problemi e il risultato è probabilmente più facile da lavorare e soddisfa veramente le tue esigenze.
Se la velocità è veramente essenziale, perché aggiungere un ulteriore vincolo e dire "Oh, è solo l'essenza finché uso Ruby".
inizialmente ho usato nokogiri per fare un semplice parsing xml, ma era lento e irregolare (a volte) sono passato a feedzirra e non solo c'era un grande incremento di prestazioni, non c'erano errori ed è facile come torta. Esempio illustrato di seguito
# 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 # => ["...", "..."]
se si vuole fare di più con i feed, ad esempio le analisi, il seguente sarà sufficiente
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
Hpricot è un parser HTML :( – collimarco
HTML è un sottoinsieme di XML e Hpricot può analizzarlo.Un sacco di persone usa Hpricot per analizzare XML generale –
http://wiki.github.com/why/hpricot/hpricot-xml –