forked from stringer-rss/stringer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfetch_feed.rb
More file actions
40 lines (32 loc) · 1.02 KB
/
fetch_feed.rb
File metadata and controls
40 lines (32 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
require "feedzirra"
require_relative "../repositories/story_repository"
require_relative "../repositories/feed_repository"
require_relative "../commands/feeds/find_new_stories"
class FetchFeed
def initialize(feed, feed_parser = Feedzirra::Feed, logger = nil)
@feed = feed
@parser = feed_parser
@logger = logger
end
def fetch
begin
raw_feed = @parser.fetch_and_parse(@feed.url)
new_entries_from(raw_feed).each do |entry|
StoryRepository.add(entry, @feed)
end
FeedRepository.update_last_fetched(@feed, raw_feed.last_modified)
FeedRepository.set_status(:green, @feed)
rescue Exception => ex
FeedRepository.set_status(:red, @feed)
@logger.error "Something went wrong when parsing #{@feed.url}: #{ex}" if @logger
end
end
private
def new_entries_from(raw_feed)
finder = FindNewStories.new(raw_feed, @feed.last_fetched, latest_url)
finder.new_stories
end
def latest_url
return @feed.stories.first.permalink unless @feed.stories.empty?
end
end