2011-01-26 2 views
0
Net::HTTP.start("static.flickr.com") { |http| 
    resp = http.get("/92/218926700_ecedc5fef7_o.jpg") 
    open("fun.jpg", "wb") { |file| 
    file.write(resp.body) 
    } 
} 

Theresいくつかのサンプルイメージダウンロードコード。さて、開いている代わりに、私はすでに選択されたディレクトリに保存したい。また、私は配列の各URLを実行するようにしたいと思います。 (私は画像リッパーを作ってるんだ。)例として、4chanのを使って配列が含まれているHERESに何を、ソースコードからそれらをリッピングした後:ルビプログラムをイメージダウンロードコードの配列の各部分で実行させる

http://static.4chan.org/image/title/1065156729813.jpg 
http://static.4chan.org/support/jlist_leader/728x90_gothic.jpg 
http:flag.jpg 
http://static.4chan.org/support/jlist_top/jlist_adult_01.jpg 
http://images.4chan.org/v/src/1296062231626.png 

(など)
のでHERESに私がやることを提案するもの: URIを何らかの理由で配列の各URLを解析する 解析された各URLの各部分を各スポットに順番に入力します 画像をダウンロード/解析できない場合(flag.jpgと一致する場合など)は、スキップします すべて保存しますあらかじめ定義されたディレクトリに開きます。 ご協力いただければ幸いです。

+0

あなたがしたいことが分かっているように聞こえるので、具体的にはコーディングに問題がありますか? – maerics

+0

配列から解析された各オブジェクトをダウンローダで実行させる。 – user451711

+0

また、ダウンロードしたオブジェクトをディレクトリに保存することもできます。 – user451711

答えて

1

まず、各URLをホスト別に整理し、各ホストとイメージを繰り返し、ダウンロードしていくことから始めます。このような何か:もちろん

require 'uri' 

# Organize URLs by host. 
by_host = {} 
urls.each do |x| # Assume 'urls' is an Array of String URLs. 
    begin 
    uri = URI.parse(x) 
    by_host[uri.host] = [] unless by_host[uri.host] 
    by_host[uri.host] << uri 
    rescue URI::InvalidURIError 
    STDERR.puts "Invalid URL: #{x}" 
    end 
end 

# Now download each image from each host. 
by_host.each do |host, uris| 
    Net::HTTP.start(host) do |http| 
    uris.each do |uri| 
     resp = http.get(uri.path) 
     File.open(uri.path, "wb") {|file| file.write(resp.body)} 
     end 
    end 
    end 
end 

、あなたはより多くのエラーチェックをする必要がありますし、あなたはおそらくだけではなく、ホスト名のホスト/ポートで整理したいと思うでしょうが、上記の例では、一般的には、アイデアを実証しなければなりません特にRubyでのURIクラスの使用。

ディレクトリに保存する場合は、出力ファイルを開こうとする前に、それぞれのuri.pathへの完全パスが存在することを確認するか、作成します。

+0

最後のディレクトリに最終行を保存するためにそれを保存します。もし私がFile.open( "C:\\"、 "wb"){| file | file.write(resp.body)}それはC:\に保存されますか? – user451711

+0

心配しないで、私は自分でそれを理解します。ヘルプマンに感謝します。 – user451711

関連する問題