Hatena::Grouprubyist

yuisekiのいまさらruby厨日記

 | 

2009-01-28

open-uriでRSSとかとってくる処理でローカルのファイルにキャッシュする

19:16 | はてなブックマーク - open-uriでRSSとかとってくる処理でローカルのファイルにキャッシュする - yuisekiのいまさらruby厨日記

RSSをガンガン掘っているんだけどめちゃくちゃ遅くて、とりあえずopen-uriで取って来るところが重いに違いないと思ってローカルキャッシュのしくみを作った

require 'open-uri'
require 'feed-normalizer'
require 'digest/md5'

 CACHE_LIFE = 1800 # clear feeds cache par 30 min

  def open_with_cache(uri)
    hash = Digest::MD5.new.update(uri).to_s
    filename = "tmp/cache/feed_" + hash # rails向け
    if File.exist?(filename)
      content = open(filename)
      cache_elapse = Time.now - File::mtime(filename)
      File.delete(filename) if cache_elapse > CACHE_LIFE
    else
      content = open(uri)
      open(uri) do |i|
        open(filename, "w") do |o|
          o.write(i.read)
        end
      end
    end
    return content
  end

↓のように使える

    begin
      feed = FeedNormalizer::FeedNormalizer.parse open_with_cache(uri)
    rescue
    end

しかし実は重いのはopen-uriではなくて、FeedNormalizerのXML解析する部分っぽい。

FeedNormalizerは初回だけつかって全部DBに放り込むとか、表示する部分のテンプレートをキャッシュするしかなさげ。

open_with_cacheもこれはこれで、ページをリロードするたびにRSS取得しに行くみたいなことは防げるのまあいいか。

KalyanamuruganKalyanamurugan2013/09/21 07:22That takes us up to the next level. Great pogntis.

HansHans2013/09/22 04:29More posts of this <a href="http://hztfqfowh.com">quaiytl.</a> Not the usual c***, please

DawoodDawood2013/09/22 09:35Gee whiz, and I thhugot this would be hard to find out. http://trhlxvgw.com [url=http://zdnfjvpwfsb.com]zdnfjvpwfsb[/url] [link=http://rfhechspjbk.com]rfhechspjbk[/link]

SaraSara2013/09/25 06:09When you think about it, that's got to be the right aneswr. http://vdrdlvf.com [url=http://xoidtx.com]xoidtx[/url] [link=http://xniytrfh.com]xniytrfh[/link]

トラックバック - http://rubyist.g.hatena.ne.jp/yuiseki/20090128
 |