Chcę pobrać to zdjęcie za pomocą Ruby. Jak mogę to zrobić?Jak mogę pobrać obraz przy użyciu Ruby?
http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
Używam Mac OS.
Chcę pobrać to zdjęcie za pomocą Ruby. Jak mogę to zrobić?Jak mogę pobrać obraz przy użyciu Ruby?
http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
Używam Mac OS.
require "open-uri"
open("your-url") {|f|
File.open("whatever_file.jpg","wb") do |file|
file.puts f.read
end
}
W taki sam sposób pobierasz cokolwiek innego. Net::HTTP
%x(wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg)
lub
`wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg`
to nie jest przenośne. – Geo
może. Ale zapytał o coś, co zadziała na Macu. –
To nie działa w systemie MacOS. Nie, chyba że zainstalujesz 'wget'. Gdybyś zasugerował 'curl' (domyślnie), byłoby to bardziej akceptowalne. – user137369
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.
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()
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
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
System operacyjny nie ma znaczenia. – waqas