Added rss caching.

This commit is contained in:
Martin Edenhofer 2012-05-06 23:36:24 +02:00
parent 06b5b1e166
commit 1adfda5b4f

View file

@ -5,19 +5,32 @@ class RssController < ApplicationController
def fetch
url = params[:url]
limit = params[:limit] || 10
response = Net::HTTP.get_response( URI.parse(url) )
if response.code.to_s != '200'
render :json => { :message => "failed to fetch #{url}, code: #{response.code}"}, :status => :unprocessable_entity
return
cache_key = 'rss::' + url
items = Rails.cache.read( cache_key )
if !items
response = Net::HTTP.get_response( URI.parse(url) )
if response.code.to_s != '200'
render :json => { :message => "failed to fetch #{url}, code: #{response.code}"}, :status => :unprocessable_entity
return
end
rss = SimpleRSS.parse response.body
items = []
fetched = 0
rss.items.each { |item|
record = {
:id => item.id,
:title => item.title,
:summary => item.summary,
:link => item.link,
:published => item.published
}
items.push record
fetched += 1
break item if fetched == limit.to_i
}
Rails.cache.write( cache_key, items, :expires_in => 4.hours )
end
rss = SimpleRSS.parse response.body
items = []
fetched = 0
rss.items.each { |item|
items.push item
fetched += 1
break item if fetched == limit.to_i
}
render :json => { :items => items }
end