#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 を無視するのはダメよ。