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')