1234567891011121314151617181920212223242526272829303132333435363738 |
- require 'simple-rss'
- module Rss
- def self.fetch(url, limit = 10)
- cache_key = 'rss::' + url
- items = Cache.get( cache_key )
- return items if items
- begin
- Rails.logger.info "fetch rss... #{url}"
- response = UserAgent.request(url)
- if !response.success?
- raise "Can't fetch '#{url}', http code: #{response.code}"
- end
- rss = SimpleRSS.parse response.body
- items = []
- fetched = 0
- rss.items.each { |item|
- record = {
- id: item.id,
- title: Encode.conv( 'utf8', item.title ),
- summary: Encode.conv( 'utf8', item.summary ),
- link: item.link,
- published: item.published
- }
- items.push record
- fetched += 1
- break item if fetched == limit.to_i
- }
- Cache.write( cache_key, items, expires_in: 4.hours )
- rescue => e
- Rails.logger.error "can't fetch #{url}"
- Rails.logger.error e.inspect
- return
- end
- items
- end
- end
|