ワンライナーで画像収集 に非常に感銘を受けたのでw
ruby で同じ感じでできないかなーとやってみました.

まず [http://search.cpan.org/dist/libwww-perl/lib/LWP/Simple.pm:title=LWP::Simple] がすごすぎるので get 関数と mirror 関数をざっくりと作ります.

require "open-uri"

def mirror url, path
  open url do |resource|
    File.open path, "wb" do |f|
      f.write resource.read
    end
  end
end

def get url
  open(url) {|resource| resource.read }
end

なんというか open-uri 使ってて明らかに手抜きですいません…

次にこんなかんじのワンライナーを実行すると… ((windows のコマンドプロンプトだと -e の中が解釈されてしまってうまく動かないので, windows な人は cygwin でやるといいと思います!))

$ ruby -ropen-uri -rlwp_simple -e 'get(ARGV[0]).scan(/<a.*?href="(http:\/\/[^"]+\.jpg)"/) {|refs| mirror(refs[0], File.basename(refs[0])) }' http://metiss.blog92.fc2.com/blog-entry-142.html

やったね!!!

普段使いにはこんな感じのスクリプトとして保存しておいて…

#!/usr/bin/env ruby
require "lwp_simple"

get(ARGV[0]).scan /<a.*?href="(http:\/\/[^"]+\.jpg)"/ do |refs|
  mirror refs[0], File.basename(refs[0])
end

こんな感じで実行する.

$ dl.rb http://metiss.blog92.fc2.com/blog-entry-142.html

ウハウハできましたかー?w

追記(2009/1/10)

この記事で取り上げた LWP::Simple の ruby 版ライブラリを作りました 。よかったら使ってみてください。