Quiero descargar esta imagen usando Ruby. ¿Cómo puedo hacer eso?¿Cómo descargo una imagen usando Ruby?
http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
Estoy usando Mac OS.
Quiero descargar esta imagen usando Ruby. ¿Cómo puedo hacer eso?¿Cómo descargo una imagen usando Ruby?
http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
Estoy usando Mac OS.
require "open-uri"
open("your-url") {|f|
File.open("whatever_file.jpg","wb") do |file|
file.puts f.read
end
}
De la misma manera que descargas cualquier otra cosa. Net::HTTP
%x(wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg)
o
`wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg`
esto no es portátil. – Geo
tal vez. Pero él preguntó algo que funcionaría en Mac. –
Esto no funciona en macOS. No, a menos que instale específicamente 'wget'. Si hubieras sugerido 'curl' (que viene por defecto), hubiera sido más aceptable. – user137369
La forma más fácil sería exigir open-uri
y el uso que con la respuesta anterior o utilizar el módulo también suministrado Net :: HTTP con su método de obtención.
Si desea descargar todas las imágenes en una sola página, puede utilizar la gema 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()
Trate de usar la gema Mechanize:
Inicio con: sudo gem install mechanize
para instalar Mechanize.
continuación:
require 'rubygems'
require 'mechanize'
agent = Mechanize.new
link = 'http://www.asite.com/pic.jpg'
agent.get(link).save "images/pic.jpg"
EDIT: Para hacer las cosas más limpio que yo sugeriría que utilice el nombre del archivo en sí cuando se guarda la imagen. Tuve un problema al guardar imágenes a granel porque no estaban formateadas correctamente. Las imágenes se guardan como esto:
#pic.jpg(1)
#pic.jpg(2)
#etc.
Es por eso que es mejor usar el nombre de la imagen como el nombre del archivo de la siguiente manera:
agent.get(src).save "images/#{File.basename(url)}"
File.basename toma la URL de la imagen y simplemente devuelve el de la actual nombre de la imagen:
File.basename("http://www.asite.com/pic.jpg")
# returns the image name
pic.jpg
Para que todo esté más limpio, le sugiero que utilice el nombre del archivo cuando guarde la imagen. Tuve un problema al guardar imágenes a granel porque no estaban formateadas correctamente. Las imágenes se guardan como esto:
#pic.jpg(1)
#pic.jpg(2)
#etc.
Es por eso que es mejor usar el nombre de la imagen como el nombre del archivo de la siguiente manera:
src = 'http://www.asite.com/pic.jpg'
agent.get(src).save "#{folder}/#{File.basename(src)}"
File.basename toma la URL de la imagen y simplemente devuelve el de la actual nombre de imagen:
File.basename("http://www.asite.com/pic.jpg")
# returns the image name
pic.jpg
El sistema operativo no es importante. – waqas