スキップしてメイン コンテンツに移動

[ruby] rubyzipを使ってダウンロードしたZIPを保存せずにデータを拾う

rubyでZIPファイルを扱う場合のgemといえば、現在のところrubyzip一択のようですが、一旦ディスクに落としてから展開するパターンが多くて、中のデータさえ拾ってしまえばダウンロードしたZIPは必要ない状況では、処理が美しくないと思ったので、メモ。




rubyzipのgithub

とりあえず使う場合は、githubに書いてある内容だけで、なんとなく圧縮・展開はできると思います。
https://github.com/rubyzip/rubyzip

詳細な情報が欲しい場合は、rdocを参照すると良いです。
両方英語ですが、コードを読めば言わんとしているところは分かると思います。


事前準備

まずはrubyzipをgem経由でインストールします。
gem install rubyzip

bundle経由でインストールする場合は、Gemfileファイルをいじってください。

ネットワーク越しにZIPファイルを取得するので、openメソッドを拡張するopen-uriも用意しておきます。

やってみる

手順は簡単。
  • まずはopenメソッドでZIPファイルを取得
  • 取得したZIPはファイルに落とさず、Zip::File.open_bufferメソッドでバッファから直接ZIPファイルを展開
  • eachで回して全件取得
以上の処理をブロックにしてしまうと見通しがよくて、ディ・モールトよいッ!ですね。
require "open-uri"
require "zip"

file_url = "http://example.com/じっぷふぁいる.zip"

open(URI.escape(file_url)) do |file|
  Zip::File.open_buffer(file.read) do |zf|
    zf.each do |entry|
      p entry.name # ファイル名
      p entry.get_input_stream.read # ファイルの中身
    end
  end
end

なんかディレクトリを潜っていく処理をかましていない気がするので、過信は禁物です。


コメント

  1. 初めまして!
    RiKiと申します。

    フォルダの中にさらにフォルダがある場合の展開が出来なくて
    行き詰っております。

    何かアドバイスをいただけないでしょうか?

    返信削除

コメントを投稿

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。