RubyでWeb上からファイルをダウンロードする:open-uri

Ruby で、Webサイトから画像などのデータをダウンロードするのに使う open メソッドについて説明します。

openメソッドの使い方

Ruby には標準添付ライブラリとして、Webサイトなどに簡単にアクセスするための open-uri が用意されています。

openメソッドのサンプル

以下は、http://example.com/ からHTMLを取得し、取得したファイルの内容をreadメソッドで読み込み表示するサンプルです。

また、ブロック構文を使わずに以下のように記述することもできます。

メタデータを取得する

また、取得したファイルではメタデータを取得するメソッドが使えます。

以下のように変数 file に取得したデータを入れます。

取得できるメタデータの例は、以下のようになります。

base_uri

charset

content_type

last_modified

meta

status

ファイルをダウンロードして保存する

次に取得したファイルをローカルに保存する方法について説明します。

コマンドラインから実行するので、以下のサンプルコードを download.rb というファイル名で保存してください。

変数 ARGV[0], ARGV[1] は、実行するコマンドで指定する第1引数と第2引数を示します。

4行目でURLに接続し、5行目では書き出すファイル filename をオープンしブロック構文の中で、取得したファイルを読み込み・書き出しをしています。

コマンドラインから実行

以下のように、引数に http://example.com/logo.png と logo.png を指定し実行します。すると、コマンドを実行したディレクトリに、logo.png というファイル名で画像が保存されています。

ここで試したものは単純な構造のデータでしたが、もっと複雑な構造を持つデータの場合には’net/http’を使うと、ヘッダ部分やボディー部分などを分離して読み出すことができます。