2008年04月17日(木) [過去の今日]
#1 VMware Server の取得とMD5チェックが面倒なのでrubyで自動化してみた
vmwareのページにあるmd5値が見にくくてしょうがないので、めんどうだから自動化してしまった。perlでやったほうが早く作れそうだったけど、ruby脳作成中なのでrubyで。
ダウンロードページのHTMLを標準入力から読んでもげってる。fetchメソッドはrubyのリファレンスマニュアルにあったやつのコピペ。
#/usr/bin/ruby require 'hpricot' require 'kconv' require 'digest/md5' require 'uri' require 'net/http' Net::HTTP.version_1_2 def fetch( uri_str, limit = 10 ) raise ArgumentError, 'http redirect too deep' if limit == 0 response = Net::HTTP.get_response(URI.parse(uri_str)) case response when Net::HTTPSuccess then response when Net::HTTPRedirection then fetch(response['location'], limit - 1) else response.error! end end doc = Hpricot(STDIN.read.toutf8) list = (doc/"td span a") list.each do |l| url = l[:href] filename = File.basename l[:href] md5 = l.next_node.next_node.next_node.to_s.sub(/^.md5sum: (.*).$/, '\1'); res = fetch(url) open(filename, "wb") do |f| f.write res.body end real_md5 = Digest::MD5.hexdigest(File.open(filename).read) puts filename printf("md5 : %s\n", md5) printf("real: %s\n", real_md5) if (md5 == real_md5) puts 'valid!' else puts 'invalid!' end end
つぎのバージョンアップ時も使えるといいな……。
(@465)