Bonjour,
Je voudrais récupérer des flux RSS à partir d’un URL. Après quelques
recherches sur Internet, je suis tombé sur une librairie très simple que
voici :
lib/rss_parser.rb
class RssParser
require ‘rexml/document’
require ‘open-uri’
def self.run(url)
xml = REXML::Document.new(open(url))
data = {
:title => xml.root.elements[‘channel/title’].text,
:home_url => xml.root.elements[‘channel/link’].text,
:rss_url => url,
:items => []
}
xml.elements.each ‘//item’ do |item|
new_items = {} and item.elements.each do |e|
new_items[e.name.gsub(/^dc:(\w)/,"\1").to_sym] = e.text
end
data[:items] << new_items
end
data
end
end
En console, tout fonctionne, mais lorsque je l’utilise dans mon
application, j’ai une erreur Timeout::Error :
Timeout::Error (execution expired):
/usr/lib/ruby/1.8/timeout.rb:54:in rbuf_fill' /usr/lib/ruby/1.8/timeout.rb:56:in
timeout’
/usr/lib/ruby/1.8/timeout.rb:76:in timeout' /usr/lib/ruby/1.8/net/protocol.rb:132:in
rbuf_fill’
/usr/lib/ruby/1.8/net/protocol.rb:116:in readuntil' /usr/lib/ruby/1.8/net/protocol.rb:126:in
readline’
/usr/lib/ruby/1.8/net/http.rb:2020:in read_status_line' /usr/lib/ruby/1.8/net/http.rb:2009:in
read_new’
/usr/lib/ruby/1.8/net/http.rb:1050:in request' /usr/lib/ruby/1.8/open-uri.rb:248:in
open_http’
/usr/lib/ruby/1.8/net/http.rb:543:in start' /usr/lib/ruby/1.8/open-uri.rb:242:in
open_http’
/usr/lib/ruby/1.8/open-uri.rb:616:in buffer_open' /usr/lib/ruby/1.8/open-uri.rb:164:in
open_loop’
/usr/lib/ruby/1.8/open-uri.rb:162:in catch' /usr/lib/ruby/1.8/open-uri.rb:162:in
open_loop’
/usr/lib/ruby/1.8/open-uri.rb:132:in open_uri' /usr/lib/ruby/1.8/open-uri.rb:518:in
open’
/usr/lib/ruby/1.8/open-uri.rb:30:in open' /lib/rss_parser.rb:7:in
run’
/app/controllers/pages_controller.rb:155:in `rss’
(…)
Quelqu’un aurait-il une idée d’où cela pourrait-il venir?
J’utilise Rails 2.1.0, et j’ai effectué des tests en environement de
développement et de production.
Merci