Que faire si je souhaite utiliser Ruby pour télécharger un fichier sur Internet et l'enregistrer localement?
Le premier est un exemple de fichier texte. Si vous souhaitez télécharger Wikipedia --HyperText Markup Language sous forme de fichier HTML, écrivez comme suit.
require 'open-uri'
uri_str = 'https://ja.wikipedia.org/wiki/HyperText_Markup_Language'
URI.open(uri_str) do |res|
IO.copy_stream(res, 'HyperText_Markup_Language.html')
end
La même chose est vraie pour les binaires comme les images. Téléchargez l'image donnée comme exemple d'un fichier PNG dans Wikipedia --Portable Network Graphics.
require 'open-uri'
uri_str = 'https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png'
URI.open(uri_str) do |res|
IO.copy_stream(res, 'PNG_transparency_demonstration_1.png')
end
La bibliothèque ʻopen-uri est un wrapper tel que
Net :: HTTP Net :: HTTPS
Net :: FTPqui vous permet de traiter les URL http et https comme des fichiers normaux. Cette bibliothèque redéfinit
Kernel # open`, vous pouvez donc également écrire:
require 'open-uri'
uri_str = 'https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png'
open(uri_str) do |res|
IO.copy_stream(res, 'PNG_transparency_demonstration_1.png')
end
Cependant, à partir de Ruby 2.7, l'ouverture des URI en utilisant Kernel # open
, qui est étendu par ʻopen-uri`, est obsolète. Lorsque j'exécute le code ci-dessus sur Ruby 2.7, j'obtiens l'avertissement suivant:
warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open
Cela ne veut pas dire que cela ne s'arrête pas juste à cause de l'avertissement, mais il est recommandé d'utiliser ʻURI # open ou ʻOpenURI # open_uri
.
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18