更新取得保存つづき
uri-info.rb (2007/8/26修正)
(2007/08/28 だめだな 保存しなくても読み込んでしまっているようだ)
# 指定秒数置きにlast_modifiedをチェック、更新されていたらデータを取得保存 # 秒数は目安 # 保存ファイル名は日時をうしろにつける、とりあえず拡張子はチェックなし、"/"は置き換え require 'open-uri' # 10分。これ以下の指定は無視される min =600 if ARGV[0]==nil puts "usage: uri-info %0 [%1] =>type last-modified of %0 [timer:%1sec.]" puts " default interval= #{min}sec." exit end def getext(a) ext =a.scan(/[^\.]+/)[-1] if ext =~ /\// then ext="" end ext end url =ARGV[0] $out ="uri-info-log.txt" $savf ="ss" $ans ="" $savf = url.scan(/([^\/]+\.){1,}/)[-1][0] +url.scan(/[^\.]+/)[-1] $savf.gsub!(/\//,'_') $ext =getext(url) print "保存ファイル名: #{$savf} [enter]" $stdin.gets def mainfn(url,flag) exist =false open(url) {|f| newdata ="last_modified: "+f.last_modified.to_s puts "ok: "+newdata open($out,"a+"){|log| log.each_line{|line| data =line.chomp if flag print " > #{data}\n" end if data =~ /^last_modified:/ exist =true if data == newdata $ans ="not modified" else $ans ="new" end end } } if $ans != "" puts $ans else puts "?" end if ($ans =="new" || $ans =="") save(f,f.last_modified) end ou =open($out,"w") ou.puts url ou.puts newdata ou.close } end def save(f,tm) print "getting: " name =getname($savf,$ext,tm) open(name,"wb"){|writ| writ.puts f.read } puts name,"ok" end def tprint(tm) sprintf("-%d%02d%02d%02d%02d",tm.year,tm.month,tm.day,tm.hour,tm.min) end def getname(name,ext,tm) #tm =Time.now tim=tprint(tm) name +tim +'.' +ext end timer=min if ( ARGV[1]!=nil and ARGV[1].to_i>min ) then timer=ARGV[1].to_i end loop{ mainfn(url,false) puts # count down timer.times{|co| sleep 1 print "\r#{Time.now} (#{timer-co-1}) \r" } puts }
実行例,Ctrl+Cで中断 (テスト用にmin=15に変えてあります)
d:\ruby>uri-info usage: uri-info %0 [%1] =>type last-modified of %0 [timer:%1sec.] default interval= 600sec. d:\ruby>uri-info http://d.hatena.ne.jp/hatecha/ 20 保存ファイル名: d.hatena.ne.jp_hatecha_ [enter] ok: last_modified: Sat Aug 25 12:29:37 +0900 2007 getting... d.hatena.ne.jp_hatecha_-200708260118 new Sun Aug 26 01:18:55 +0900 2007 (0) ok: last_modified: Sat Aug 25 12:29:37 +0900 2007 not modified Sun Aug 26 01:19:15 +0900 2007 (0) ok: last_modified: Sat Aug 25 12:29:37 +0900 2007 not modified d:/ruby/uri-info.rb:81:in `sleep': Interrupt from d:/ruby/uri-info.rb:81 from d:/ruby/uri-info.rb:80:in `times' from d:/ruby/uri-info.rb:80 from d:/ruby/uri-info.rb:76:in `loop' from d:/ruby/uri-info.rb:76 d:\ruby>
#hoge
=>コメント開始
/([^\/]+\.){1,}/
=>('/'以外の文字1文字以上のあとに'.')の1回以上の繰り返し
配列[-1]
=>マイナスは後ろから数える
$foo
=>大域変数
print "... #{hensuuなど}..."
=>#{}置き換え, #$foo
url.scan(/[^\.]+/)[-1]
=>'.'以外の文字1文字以上でマッチするもののリストのうち最後
( aa.bb.cc => cc )
ARGV
=>実行時のコマンドライン引数の配列
\\\\あれ\\\?バックスラッシュだ\/\/\/\/