Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library open-uri

library open-uri

要約

http/ftp に簡単にアクセスするためのクラスです。 Kernel のモジュール関数(組み込み関数) open を再定義します。

使用例

http/ftp の URL を、普通のファイルのように開けます。

require 'open-uri'
open("http://www.ruby-lang.org/") {|f|
  f.each_line {|line| p line}
}

開いたファイルオブジェクトは StringIO もしくは Tempfile ですが OpenURI::Meta モジュールで拡張されていて、 メタ情報を獲得するメソッドが使えます。

open("http://www.ruby-lang.org/en") {|f|
  f.each_line {|line| p line}
  p f.base_uri         # <URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/>
  p f.content_type     # "text/html"
  p f.charset          # "iso-8859-1"
  p f.content_encoding # []
  p f.last_modified    # Thu Dec 05 02:45:02 UTC 2002
}

ハッシュ引数で、追加のヘッダフィールドを指定できます。

open("http://www.ruby-lang.org/en/",
  "User-Agent" => "Ruby/#{RUBY_VERSION}",
  "From" => "foo@bar.invalid",
  "Referer" => "http://www.ruby-lang.org/") {|f|
  ...
}

http_proxy や ftp_proxy などの環境変数は、デフォルトで有効になっています。 プロキシを無効にするには :proxy => nil とします。

open("http://www.ruby-lang.org/en/raa.html",
  :proxy => nil) {|f|
  ...
}

また、open-uri を読み込むと URI::HTTPURI::FTPOpenURI::OpenRead モジュールをインクルードします。ですので、 URI オブジェクトも似たような方法で開けます。

uri = URI.parse("http://www.ruby-lang.org/en/")
uri.open {|f|
  ...
}

URI オブジェクトは直接読み込むことができます。 戻り値の文字列は、OpenURI::Meta で拡張されています。

str = uri.read
p str.base_uri

クラスとモジュール

module OpenURI

http/ftp に簡単にアクセスするためのモジュールです。

module OpenURI::Meta

サーバから取得したデータの属性を扱うために使われるモジュールです。 データを表す文字列や StringIO が extend します。

module OpenURI::OpenRead

URI::HTTPURI::FTP を拡張するために用意されたモジュールです。

例外クラス

class OpenURI::HTTPError

リソースの取得に失敗した時に投げられます。

追加・再定義されるメソッド

Kernel.#open(name, mode = 'r', perm = nil, options = {}) -> StringIO | File [redefined by open-uri]
Kernel.#open(name, mode = 'r', perm = nil, options = {}) {|ouri| ...} -> nil [redefined by open-uri]

name が http:// や ftp:// で始まっている文字列なら URI のリソースを 取得した上で StringIO オブジェクトとして返します。 StringIO オブジェクトは OpenURI::Meta モジュールで extend されています。

name に open メソッドが定義されている場合は、*rest を引数として渡し name.open(*rest, &block) のように name の open メソッドが呼ばれます。

これ以外の場合は、name はファイル名として扱われ、従来の Kernel.#open(name, *rest) が呼ばれます。

ブロックを与えた場合は上の場合と同様、name が http:// や ftp:// で 始まっている文字列なら URI のリソースを取得した上で StringIO オブジェクトを 引数としてブロックを評価します。後は同様です。 StringIO オブジェクトは OpenURI::Meta モジュールで extend されています。

[PARAM] name:
オープンしたいリソースを文字列で与えます。
[PARAM] mode:
モードを文字列で与えます。Kernel.#open と同じです。
[PARAM] perm:
open(2) の第 3 引数のように、ファイルを生成する場合のファイルのパーミッションを 整数で指定します。Kernel.#open と同じです
[PARAM] options:
ハッシュを与えます。詳しくは OpenURI.open_uri を参照してください。
[EXCEPTION] OpenURI::HTTPError:
対象となる URI のスキームが http であり、 かつリソースの取得に失敗した時に発生します。
[EXCEPTION] Net::FTPError:
対象となる URI のスキームが ftp であり、かつリソースの取得に失敗した時に Net::FTPError のサブクラスが発生します。詳しくは net/ftp を参照して下さい。

例:

require 'open-uri'
sio = open('http://www.example.com')
p sio.is_a?(OpenURI::Meta) # => true
p sio.content_type
puts sio.read

[SEE_ALSO] OpenURI.open_uri

Classes

Sublibraries