2009-07-02 16 views

Odpowiedz

50

require "open-uri" 

open("your-url") {|f| 
    File.open("whatever_file.jpg","wb") do |file| 
    file.puts f.read 
    end 
} 


+1

Musisz dodać "wymagaj" open-uri ", aby to zadziałało. – Keltia

+0

tak, zapomniałem dodać go w pierwszej wersji. – Geo

+4

stycznie, jeśli jesteś w systemie Windows (w przeciwieństwie do OP), musisz otworzyć plik w trybie binarnym: File.open (nazwa pliku, "w"). Binmode do | file | ... –

0
%x(wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg) 

lub

`wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg` 
+2

to nie jest przenośne. – Geo

+1

może. Ale zapytał o coś, co zadziała na Macu. –

+0

To nie działa w systemie MacOS. Nie, chyba że zainstalujesz 'wget'. Gdybyś zasugerował 'curl' (domyślnie), byłoby to bardziej akceptowalne. – user137369

0

Najprostszym sposobem byłoby wymagać open-uri i użyć jej z poprzednią odpowiedź lub też użyć dostarczonego modułu Net :: HTTP z metody GET.

2

Jeśli chcesz ściągnąć wszystkie obrazy na jednej stronie, można użyć gem image_downloader:

require 'rubygems' 
require 'image_downloader' 

downloader = ImageDownloader::Process.new('www.test.com','img_dir/') 

downloader.parse(:any_looks_like_image => true) 

downloader.download() 
15

Spróbuj użyć gem Mechanize:

Start z: sudo gem install mechanize aby zainstalować Mechanize.

Następnie:

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
link = 'http://www.asite.com/pic.jpg' 
agent.get(link).save "images/pic.jpg" 

EDIT: Żeby było czystsze Proponuję użyć samej nazwy pliku podczas zapisywania obrazu. Wystąpił problem z zapisywaniem obrazów zbiorczych, ponieważ nie zostały poprawnie sformatowane. Zdjęcia zostały zapisane tak:

#pic.jpg(1) 
#pic.jpg(2) 
#etc. 

to dlaczego powinieneś używać nazwy obrazu jak nazwa pliku jak poniżej:

agent.get(src).save "images/#{File.basename(url)}" 

File.basename bierze url obrazu i po prostu zwraca rzeczywisty nazwa obrazu:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg 
0

Aby wszystko było czystsze, sugerowałbym użycie nazwy pliku podczas zapisywania obrazu. Wystąpił problem z zapisywaniem obrazów zbiorczych, ponieważ nie zostały poprawnie sformatowane. Zdjęcia zostały zapisane tak:

#pic.jpg(1) 
#pic.jpg(2) 
#etc. 

to dlaczego powinieneś używać nazwy obrazu jak nazwa pliku jak poniżej:

src = 'http://www.asite.com/pic.jpg'  
agent.get(src).save "#{folder}/#{File.basename(src)}" 

File.basename bierze url obrazu i po prostu zwraca rzeczywisty nazwa obrazu:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg 
Powiązane problemy