# URLを指定して、CSSをダウンロード保存します # その際に、CSS内でURL() と指定された画像などのファイルのパスを # 引数で指定した値に置換する # 2006/10/12 Jun Kaneko require 'net/http' require 'uri' Net::HTTP.version_1_2 # HTTPリクエスト 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 return response end # ここからプログラム本体 # 第一引数 ARGV[0] はCSS のURL # 第二引数 ARGV[1] は、CSS内のURL()で指定するファイルのパスの変更先 css_name = ARGV[0].split(/\//).last ARGV[1] != nil ? file_path = ARGV[1] + "/" : file_path = "" # CSSのURLから、CSSを読み込んで url() の中身を置換しながら保存 result = ""; response = fetch(ARGV[0],2) response.body.each do |line| url = line.scan(/(url\()([\w._:\/\-]+)/).last if url != nil filename = url[1].split(/\//).last result += line.sub(/url\([\w._:\/\-]+/, "url(" + file_path + filename) else result += line end end open(css_name, "w") do |file| file.puts result end