ruby版ワンライナーで画像収集
ワンライナーで画像収集 に非常に感銘を受けたので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 版ライブラリを作りました 。よかったら使ってみてください。