http/ftp に簡単にアクセスするためのクラスです。 Kernel のモジュール関数(組み込み関数) open を再定義します。
(中略)
開いたファイルオブジェクトは StringIO もしくは Tempfile ですが OpenURI::Meta モジュールで拡張されていて、メタ情報を獲得するメソッドが使えます。

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

サンプルコード。
画像ファイルを open したら StringIO オブジェクトになった。


$ uname -mrsv
Darwin 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386
 
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
 
$ cat ./openuri.rb 
require 'open-uri'
 
def opentest(url)
  puts '------------------------------------------------'
  puts url
  data = open(url)
  puts data.inspect
  puts 'base_uri: ' + data.base_uri.inspect
  puts 'content_type: ' + data.content_type.inspect
  puts 'charset: ' + data.charset.inspect
  puts 'content_encoding: ' + data.content_encoding.inspect
  puts 'last_modified: ' + data.last_modified.inspect
  puts 'meta: ' + data.meta.inspect
  puts 'status: ' + data.status.inspect
end
 
opentest('http://www.nilab.info/')
opentest('http://www.nilab.info/z3/z3_profile.jpg')
opentest('http://www.nilab.info/hoge')
 
$ ruby ./openuri.rb 
------------------------------------------------
http://www.nilab.info/
#<File:/var/folders/Fi/FiA0o8lsF50kDXOrBWIiRE+++TM/-Tmp-/open-uri20110415-522-1b7tgi3-0>
base_uri: #<URI::HTTP:0x1003198d0 URL:http://www.nilab.info/>
content_type: "text/html"
charset: "iso-8859-1"
content_encoding: []
last_modified: Wed Apr 13 22:36:13 +0900 2011
meta: {"etag"=>"\"324016-959e-4da5a6cd\"", "last-modified"=>"Wed, 13 Apr 2011 13:36:13 GMT", "content-type"=>"text/html", "date"=>"Fri, 15 Apr 2011 09:10:53 GMT", "server"=>"Apache", "content-length"=>"38302", "accept-ranges"=>"bytes"}
status: ["200", "OK"]
------------------------------------------------
http://www.nilab.info/z3/z3_profile.jpg
#<StringIO:0x1003fe5e8>
base_uri: #<URI::HTTP:0x1003fe890 URL:http://www.nilab.info/z3/z3_profile.jpg>
content_type: "image/jpeg"
charset: nil
content_encoding: []
last_modified: Mon Mar 21 20:13:04 +0900 2011
meta: {"etag"=>"\"354048-2267-4d8732c0\"", "last-modified"=>"Mon, 21 Mar 2011 11:13:04 GMT", "content-type"=>"image/jpeg", "date"=>"Fri, 15 Apr 2011 09:10:54 GMT", "server"=>"Apache", "content-length"=>"8807", "accept-ranges"=>"bytes"}
status: ["200", "OK"]
------------------------------------------------
http://www.nilab.info/hoge
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:277:in `open_http': 404 Not Found (OpenURI::HTTPError)
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:616:in `buffer_open'
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:162:in `catch'
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:518:in `open'
	from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:30:in `open'
	from ./openuri.rb:6:in `opentest'
	from ./openuri.rb:19

tags: ruby

Posted by NI-Lab. (@nilab)