| @@ -2,36 +2,30 @@ class Feed < ActiveRecord::Base | |||||
| has_many :posts, :dependent => :destroy | has_many :posts, :dependent => :destroy | ||||
| attr_accessible :title, :url, :description, :generator, :last_fetched, :feed_url | attr_accessible :title, :url, :description, :generator, :last_fetched, :feed_url | ||||
| validates :title, :presence => true | |||||
| validates_format_of :feed_url, :with => URI::regexp(%w(http https)), :message => "must be a valid URL" | validates_format_of :feed_url, :with => URI::regexp(%w(http https)), :message => "must be a valid URL" | ||||
| after_create :get | |||||
| after_create :fetch | after_create :fetch | ||||
| # Fetch and parse feed contents from web | |||||
| def self.get_all | |||||
| Feed.all.each { |f| f.get } | |||||
| def self.fetch_all | def self.fetch_all | ||||
| Feed.all.each { |f| f.fetch } | Feed.all.each { |f| f.fetch } | ||||
| end | end | ||||
| def get | |||||
| puts "Fetching feed: #{@url}" | |||||
| # Fetch and parse feed contents from web | |||||
| def fetch | def fetch | ||||
| puts "Fetching feed: #{self.feed_url}" | |||||
| Feedzirra::Feed.add_common_feed_entry_element('georss:point', :as => :point) | Feedzirra::Feed.add_common_feed_entry_element('georss:point', :as => :point) | ||||
| Feedzirra::Feed.add_common_feed_entry_element('geo:lat', :as => :geo_lat) | Feedzirra::Feed.add_common_feed_entry_element('geo:lat', :as => :geo_lat) | ||||
| Feedzirra::Feed.add_common_feed_entry_element('geo:long', :as => :geo_long) | Feedzirra::Feed.add_common_feed_entry_element('geo:long', :as => :geo_long) | ||||
| Feedzirra::Feed.add_common_feed_element('generator', :as => :generator) | Feedzirra::Feed.add_common_feed_element('generator', :as => :generator) | ||||
| feed = Feedzirra::Feed.fetch_and_parse(@feed_url) | |||||
| feed = Feedzirra::Feed.fetch_and_parse(self.feed_url) | |||||
| self.set( | |||||
| self.update_attributes( | |||||
| :title => feed.title, | :title => feed.title, | ||||
| :url => feed.url, | :url => feed.url, | ||||
| :description => feed.description, | :description => feed.description, | ||||
| :generator => feed.generator, | :generator => feed.generator, | ||||
| :last_fetched => Time.now | |||||
| :last_fetched => DateTime.now | |||||
| ) | ) | ||||
| feed.entries.each do |e| | feed.entries.each do |e| | ||||
| @@ -42,8 +36,8 @@ class Feed < ActiveRecord::Base | |||||
| latlon = e.point.split(' ') | latlon = e.point.split(' ') | ||||
| else | else | ||||
| next | next | ||||
| end | |||||
| end | |||||
| attrs = { | attrs = { | ||||
| :title => e.title, | :title => e.title, | ||||
| :url => e.url, | :url => e.url, | ||||