require 'open-uri'
module Flannel
class FeedParser
def initialize cache=nil
@cache = cache
end
def sub_feeds(url)
url = format_url(url)
get_news(url)
end
def format_url url
url.strip!
url = "http://#{url}" if url[0..6] != "http://"
url
end
def get_document url
URI.parse(url).read
end
def format_item(link, title)
"
\n #{title}\n \n"
end
def get_news url
item_string = nil
item_string = @cache.retrieve(url) if @cache
unless item_string
item_string = ""
doc = get_document(url)
items = get_items(doc)
items.each do |item|
link = inner_html(item, "link")
title = inner_html(item, "title")
item_string << format_item(link, title)
end
@cache.save url, item_string if @cache
end
item_string
end
def get_items text
items = text[/- .*<\/item>/mi]
return [] unless items
items.split(/<\/?item>/).reject { |item| /\A\s*\z/ =~ item }
end
def inner_html text, tag
regex = Regexp.compile "<#{tag}>(.*)<\/#{tag}>?"
matches = regex.match text
return "" unless matches
matches.captures[0]
end
end
end