RubyでHTTPのgzipデータを読み込む

ニコ串」の作成で,Ruby/zlibを使用した。その時のメモ。
Zlib::GzipReader.wrapはIOを渡してあげるとgzipを解凍してくれるみたい。

open-uriを使う場合

open-uriでHTTPを読み込むと,StringIOが返ってくるので,それを単にZlib::GzipReader.wrapに渡してあげる。

require 'open-uri'
require 'zlib'

uri = 'http://www.rcsb.org/pdb/files/1ab6.pdb.gz'
content = open(uri, 'rb'){|sio| Zlib::GzipReader.wrap(sio).read }
puts content

net/httpを使う場合

net/httpでHTTPを読み込むと,Stringが返ってくるので,StringIOでIOを装う。

require 'net/http'
require 'stringio'
require 'zlib'

content = ''
Net::HTTP.version_1_2
Net::HTTP.start('www.rcsb.org', 80) {|http|
  body = http.get('/pdb/files/1ab6.pdb.gz').body
  StringIO.open(body, 'rb'){|sio|
    content =  Zlib::GzipReader.wrap(sio).read
  }
}
puts content

ほげほげ.openをするときに注意するところ

テキストファイル以外のファイルをオープンするときは,次に示すように,必ずファイルモードにバイナリモード'b'を加えること!
そうしないと,windows環境で意図した通りに動かないかもしれない:

ほげほげ.open(file, 'rb')