class FeedNinja
Constants
- VERSION
Attributes
limit[RW]
picture_xpath[RW]
text_xpath[RW]
title_regex[RW]
uri[RW]
Public Class Methods
new()
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 13 def initialize @limit = 4 @writer = AtomIshWriter.new @ninja_prefix = "N! " end
Public Instance Methods
fetch(url)
click to toggle source
get the feed and iterate over the entries
# File lib/feed_ninja/feed_ninja.rb, line 35 def fetch url open(url) do |feed| if feed.content_encoding == ['gzip'] then feed = Zlib::GzipReader.new(StringIO.new(feed.read)).read end doc = RSS::Parser.parse(feed) initialize_writer(doc) process_items(doc) end end
initialize_writer(doc)
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 19 def initialize_writer doc @writer.updated = DateTime.now.to_s case doc.feed_type when "atom" @writer.title = @ninja_prefix + doc.title.content @writer.link = doc.link.href when "rss" @writer.title = @ninja_prefix + doc.channel.title @writer.link = doc.channel.link else raise "Invalid feed format" end end
picture_at(*xpath)
click to toggle source
DSL convenience setters
# File lib/feed_ninja/feed_ninja.rb, line 94 def picture_at *xpath @picture_xpath = xpath end
process_item(original, feed_type, index)
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 58 def process_item(original, feed_type, index) @writer.new_entry(index) do |entry| LOGGER.debug{ "making new entry #{index}" } extractor = Extractor.new case feed_type when "atom" entry.title = original.title.content entry.link = original.link.href entry.updated = original.updated.content entry.id = original.id.content extractor.fetch original.link.href when "rss" entry.title = original.title entry.link = original.link entry.updated = original.pubDate ? original.pubDate.xmlschema : DateTime.now.to_s entry.id = entry.link extractor.fetch original.link end LOGGER.debug{ "extracting for entry #{index} #{entry}" } entry.images = extractor.extract_images(@picture_xpath) LOGGER.debug{ "RATATAT" } entry.summary = extractor.extract_xml @text_xpath LOGGER.debug{ "adding entry #{index} #{entry}" } entry #it's kind of fishy to explicitly have to return the entry here... end end
process_items(doc)
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 46 def process_items doc items = doc.items if title_regex items = items.select { |item| title_regex =~ item.title } end threads = [] items.first(@limit).each_with_index do |item, index| threads << Thread.new { process_item(item, doc.feed_type, index) } end ThreadsWait.all_waits(*threads) end
text_at(*xpath)
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 98 def text_at *xpath @text_xpath = xpath end
title_matches(regex)
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 102 def title_matches regex @title_regex = regex end
to_s()
click to toggle source
# File lib/feed_ninja/feed_ninja.rb, line 88 def to_s @writer.to_s end