Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).

Aufgabe

Was ist, wenn ich Ruby verwenden möchte, um Dateien im Internet herunterzuladen und lokal zu speichern?

Lösung

Das erste ist ein Beispiel für eine Textdatei. Wenn Sie Wikipedia --HyperText Markup Language als HTML-Datei herunterladen möchten, schreiben Sie wie folgt.

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

Gleiches gilt für Binärdateien wie Bilder. Laden Sie das Bild als Beispiel für eine PNG-Datei in Wikipedia - Portable Network Graphics herunter.

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

Hinweis

Die open-uri-Bibliothek ist ein Wrapper wie Net :: HTTP`` Net :: HTTPS`` Net :: FTP, mit dem Sie http- und https-URLs wie normale Dateien behandeln können. Diese Bibliothek definiert "Kernel # open" neu, sodass Sie auch schreiben können:

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

Ab Ruby 2.7 ist das Öffnen von URIs mit "Kernel # open", das um "open-uri" erweitert wird, jedoch veraltet. Wenn ich den obigen Code unter Ruby 2.7 ausführe, wird folgende Warnung angezeigt:

warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open

Dies bedeutet nicht, dass es nicht nur aufgrund der Warnung funktioniert, es wird jedoch empfohlen, "URI # open" oder "OpenURI # open_uri" zu verwenden.

Umweltinformationen

$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18

Recommended Posts

Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich möchte eine Servlet-War-Datei mit OpenJDK unter CentOS7 erstellen. Ohne mvn. Ohne Internetverbindung.
Ich möchte eine bestimmte Datei mit WatchService überwachen
[Rubiy] Ich möchte mit der Split-Methode ein Array aus einer Zeichenfolge erstellen. Und umgekehrt.
Ich möchte die API mit Rails auf mehreren lokal eingerichteten Docker-Composes treffen
Ich möchte es zusätzlich implementieren, während ich Kotlin auf einer Site verwende, auf der Java ausgeführt wird
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
Erstellen Sie mit der Datei Ruby on Rails seeds.rb eine große Anzahl von Datensätzen mit einem einzigen Befehl
[Spring Boot] Ich möchte meine eigene Eigenschaftendatei hinzufügen und den Wert mit env.getProperty () abrufen.
Konvertieren Sie Excel mit Java in Blob, speichern Sie es, lesen Sie es aus der Datenbank und geben Sie es als Datei aus!
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Wenn Sie mit Ruby eine Zip-Datei erstellen möchten, ist dies Rubyzip.
UnsupportedClassVersionError wurde ausgegeben, als ich die mit Eclipse erstellte .war-Datei auf EC2 platzierte und ausführte.
Memorandum: Als ich TensorFlow mit Tribuo ausprobierte, funktionierte es nicht, also machte ich mich auf den Weg, um die Hauptfamilie zu finden, und verlor.
Wenn ich ein Gem mit C-Erweiterung in Ruby installiere, möchte ich es schnell mit mehreren CPU-Kernen wie make -j4 fertigstellen
Java: Laden Sie die Datei herunter und speichern Sie sie an dem im Dialogfeld [Use HttpClient] ausgewählten Speicherort.
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Ich möchte den Wert in Ruby erhalten
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen
Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.
Wenn ich die Datei mit der Klasse # getResource aus der JAR-Datei aufrufe, wird sie nicht gefunden und ist ein beschissenes Memorandum
Ich möchte eine Verbindung herstellen, wenn eine Datenbank mit Spring und MyBatis erstellt wird
Ich möchte das in der Datenbank gespeicherte Protokoll morphologisch analysieren und in der Datenbank speichern, um Nachrichten 1 zu klassifizieren
[AWS Lambda] Ändern Sie die Größe des in S3 gespeicherten Bildes und speichern Sie es in einem anderen S3 (mit Ruby).
Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste
[Docker] Wie man mit einem Container in Heroku aktualisiert und wie man mit Migrate Error umgeht
Die CSV-Datei, die ich herunterladen konnte, wurde plötzlich auf der Seite angezeigt.
Ich habe versucht, den Mechanismus von Emscripten mit einem deutschen Löser zu untersuchen
Ich möchte NetBeans auf einem Mac verwenden → Ich kann es verwenden!
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
21 Lesen Sie das Skript aus der Datei und führen Sie es aus
Ich möchte die Hauptmethode mit Reflektion aufrufen
Ich möchte die Protokollausgabe unter Android vereinfachen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Wenn in Ruby Hash [: a] [: b] [: c] = 0 ist, möchten wir, dass Sie rekursiv erweitern, auch wenn der Schlüssel nicht vorhanden ist
Nachdem ich einen Artikel mit Rails Simple Calendar veröffentlicht habe, möchte ich ihn im Kalender wiedergeben.
Ich möchte Java Applet einfach in der Befehlszeile verwenden, ohne IDE zu verwenden
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Ich möchte Tomcat auf den Server bringen und die Anwendung starten
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben