#author("2017-06-21T11:16:01+09:00","default:yakumo_murakami","yakumo_murakami")
[[Ruby]]

Webデータをスクリプトでとりよせる時、静的コンテンツならローカルにキャッシュして何度も問い合わせないようにしたいわよね。自分もコンテンツやってる側としては、同じことされたくないっていうのもあるし、やっぱり礼儀だと思う。

でも古いものだったら更新もしたいし……。

そんなわけで、某所でやってる簡単なしかけ(試作品)を。

  def _ゲット(cdir)
    ee = 59 # Expire 日数
    Dir.mkdir(cdir) if File.exist?(cdir) == false
    r = []
    fn = "#{cdir}/#{self}"
    f_get = false
    if File.exist?(fn) == true
      if File.stat(fn).size > 0
        if ((Time.now - File.stat(fn).mtime)/60/60/24) > ee
          f_get = true
        end
      else
        f_get = true
      end
    else
      f_get = true
    end
    if f_get == false
      r = NKF.nkf("-w",File.read(fn)).split("\n")
    else
      url = URI.encode(self)
      useragent = getAgent
      open(url,
                                "User-Agent" => "#{useragent}").each{|d|
        r.push(d)
      }
      File.write(fn,r.join(""))
      sleep rand(05..30)
    end
    r
  end


重要なことは、利用側にはキャッシュがどうのって気にしなくていいように書くことよね。つまりローカルを使うか新たにもらってくるかに始まって、エージェント擬装、言語面の設定、果てはアクセス後のクールタイムまで、そういうのはライブラリやルーチン任せにするべきだってこと。

ああもちろん、相手側の robots.txt を無視するのはダメよ。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS