Commit b8bcd24b00c2a03c95b4f8b8f22cf617d68580de
1 parent
be6c3d11
Exists in
master
and in
29 other branches
Remove merge artifact added by mistake
Showing
1 changed file
with
0 additions
and
110 deletions
Show diff stats
lib/feed_handler.rb.orig
@@ -1,110 +0,0 @@ | @@ -1,110 +0,0 @@ | ||
1 | -require 'feedparser' | ||
2 | -require 'open-uri' | ||
3 | - | ||
4 | -# This class is responsible for processing feeds and pass the items to the | ||
5 | -# respective container. | ||
6 | -# | ||
7 | -# The <tt>max_errors</tt> attribute controls how many times it will retry in | ||
8 | -# case of failure. If a feed fails for <tt>max_errors+1</tt> times, it will be | ||
9 | -# disabled and the last error message will be recorder in the container. | ||
10 | -# The default value is *6*, if you need to change it you can do that in your | ||
11 | -# config/local.rb file like this: | ||
12 | -# | ||
13 | -# FeedHandler.max_errors = 10 | ||
14 | -# | ||
15 | -# For the update interval, see FeedUpdater. | ||
16 | -class FeedHandler | ||
17 | - | ||
18 | - # The maximum number | ||
19 | - cattr_accessor :max_errors | ||
20 | - cattr_accessor :disabled_period | ||
21 | - | ||
22 | - self.max_errors = 6 | ||
23 | - self.disabled_period = 1.week | ||
24 | - | ||
25 | - def parse(content) | ||
26 | - raise FeedHandler::ParseError, "Content is nil" if content.nil? | ||
27 | - begin | ||
28 | - return FeedParser::Feed::new(content) | ||
29 | - rescue Exception => ex | ||
30 | - raise FeedHandler::ParseError, "Invalid feed format." | ||
31 | - end | ||
32 | - end | ||
33 | - | ||
34 | - def fetch(address) | ||
35 | - begin | ||
36 | - content = "" | ||
37 | - block = lambda { |s| content = s.read } | ||
38 | - content = | ||
39 | - if Rails.env == 'test' && File.exists?(address) | ||
40 | - File.read(address) | ||
41 | - else | ||
42 | - if !valid_url?(address) | ||
43 | - raise InvalidUrl.new("\"%s\" is not a valid URL" % address) | ||
44 | - end | ||
45 | - open(address, "User-Agent" => "Noosfero/#{Noosfero::VERSION}", &block) | ||
46 | - end | ||
47 | - return content | ||
48 | - rescue Exception => ex | ||
49 | - raise FeedHandler::FetchError, ex.message | ||
50 | - end | ||
51 | - end | ||
52 | - | ||
53 | - def process(container) | ||
54 | -<<<<<<< HEAD | ||
55 | - Rails.logger.info("Processing %s with id = %d" % [container.class.name, container.id]) | ||
56 | -======= | ||
57 | ->>>>>>> rails235 | ||
58 | - begin | ||
59 | - container.class.transaction do | ||
60 | - if container.update_errors > FeedHandler.max_errors && container.fetched_at < (Time.now - FeedHandler.disabled_period) | ||
61 | - container.enabled = true | ||
62 | - container.update_errors = 0 | ||
63 | - container.save | ||
64 | - end | ||
65 | - next unless container.enabled | ||
66 | - actually_process_container(container) | ||
67 | - container.update_errors = 0 | ||
68 | - container.finish_fetch | ||
69 | - end | ||
70 | - rescue Exception => exception | ||
71 | - Rails.logger.warn("Unknown error from %s ID %d\n%s" % [container.class.name, container.id, exception.to_s]) | ||
72 | - Rails.logger.warn("Backtrace:\n%s" % exception.backtrace.join("\n")) | ||
73 | - container.reload | ||
74 | - container.update_errors += 1 | ||
75 | - container.error_message = exception.to_s | ||
76 | - if container.update_errors > FeedHandler.max_errors | ||
77 | - container.fetched_at = Time.now | ||
78 | - container.enabled = false | ||
79 | - end | ||
80 | - begin | ||
81 | - container.finish_fetch | ||
82 | - rescue Exception => finish_fetch_exception | ||
83 | - Rails.logger.warn("Unable to finish fetch from %s ID %d\n%s" % [container.class.name, container.id, finish_fetch_exception.to_s]) | ||
84 | - Rails.logger.warn("Backtrace:\n%s" % finish_fetch_exception.backtrace.join("\n")) | ||
85 | - end | ||
86 | - end | ||
87 | - end | ||
88 | - | ||
89 | - class InvalidUrl < Exception; end | ||
90 | - class ParseError < Exception; end | ||
91 | - class FetchError < Exception; end | ||
92 | - | ||
93 | - protected | ||
94 | - | ||
95 | - def actually_process_container(container) | ||
96 | - container.clear | ||
97 | - content = fetch(container.address) | ||
98 | - container.fetched_at = Time.now | ||
99 | - parsed_feed = parse(content) | ||
100 | - container.feed_title = parsed_feed.title | ||
101 | - parsed_feed.items[0..container.limit-1].reverse.each do |item| | ||
102 | - container.add_item(item.title, item.link, item.date, item.content) | ||
103 | - end | ||
104 | - end | ||
105 | - | ||
106 | - def valid_url?(url) | ||
107 | - url =~ URI.regexp('http') || url =~ URI.regexp('https') | ||
108 | - end | ||
109 | - | ||
110 | -end |