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
Last-modified: 2017-06-21 (水) 11:16:01