rss.rb 991 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. require 'simple-rss'
  2. module Rss
  3. def self.fetch(url, limit = 10)
  4. cache_key = 'rss::' + url
  5. items = Cache.get( cache_key )
  6. return items if items
  7. begin
  8. Rails.logger.info "fetch rss... #{url}"
  9. response = UserAgent.request(url)
  10. if !response.success?
  11. raise "Can't fetch '#{url}', http code: #{response.code}"
  12. end
  13. rss = SimpleRSS.parse response.body
  14. items = []
  15. fetched = 0
  16. rss.items.each { |item|
  17. record = {
  18. id: item.id,
  19. title: Encode.conv( 'utf8', item.title ),
  20. summary: Encode.conv( 'utf8', item.summary ),
  21. link: item.link,
  22. published: item.published
  23. }
  24. items.push record
  25. fetched += 1
  26. break item if fetched == limit.to_i
  27. }
  28. Cache.write( cache_key, items, expires_in: 4.hours )
  29. rescue => e
  30. Rails.logger.error "can't fetch #{url}"
  31. Rails.logger.error e.inspect
  32. return
  33. end
  34. items
  35. end
  36. end