Rubyの勉強、はじめました。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


MechanizeでZipPluggableParser

ちょっと調べたけど検索にひっかかってこなかったので、
Mechanize用ZIPファイルパーサ置いておきます。
解凍にはzipruby使う想定。
zip_parser.rb
require 'rubygems'
require 'mechanize'
require 'zipruby'

class ZipParser < Mechanize::File
  def initialize(uri = nil, response = nil, body = nil, code = nil)
    super(uri, response, body, code)
  end

  def open
    streaming = lambda { return @body.slice!(0, 256) }

    Zip::Archive.open_buffer(streaming) {|zip_ar| yield(zip_ar)}
  end
end
Mechanize::PluggerableParserってのでMIMEタイプに応じたパーサを設定できるそうな。
#openでZip::Archiveを渡せば使いやすいかなと。

使い方はこんな感じ。
require 'rubygems'
require 'mechanize'
require 'zip_parser'

agent = Mechanize.new

agent.pluggable_parser["application/zip"] = ZipParser
agent.pluggable_parser["application/octet-stream"] = ZipParser

url = 'http://github.com/zeero/zeero_work/raw/master/zip_parser.zip'
agent.get(url) {|file|
  file.open {|zip_ar|
    zip_ar.each do |zf|
      puts zf.name
    end
  }
}

7行目でMIMEタイプ別でパーサを登録。
'application/zip'だけでいいと思いきや、
githubからだと'application/octet-stream'でくるのでそちらも登録。
これでagent.getでZipParserが生成される。
あとはopenでZip::Archiveつくって、ファイル名の一覧表示させる、と
スポンサーサイト


コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://zeero.blog60.fc2.com/tb.php/24-f6ef1710
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。