青空文庫は著作権が消滅した作家と、著作権が残っているけど了承を得て掲載している作家の2種類を扱っている。著作権が消滅している作家については再配布や改変も可能らしいので、こういう処理をしても問題ないはず。
青空文庫にいるのはXHTML版とテキスト版(ZIP圧縮)の2つなんだけど、XHTMLは扱うのが面倒なので、ZIPファイルのURLを指定して、解凍、テキストファイルの保存、形態素解析、DB登録という一連の流れを行うプログラムを作ることにする。
で、ZIPファイルをRubyで扱う方法を知らなかったので、調べる。
RubyでのZIPファイルの取り扱いは、ziprubyというライブラリを使うと楽らしい。
gem install zipruby
gemsディレクトリに展開されたファイルの中にREADME.txtがいたので中を見たら、サンプルコードがたくさん載っていた。お陰で何も困ることなく使えた。
実際のコードはこんな感じ。長くなるので取得・解凍部分のみ。
require 'rubygems'
require 'zipruby'
require 'open-uri'
# 取得するURL
url = ARGV[0]
# ZIPファイルを取得・解凍し、ファイル名とコンテンツを取得
content = nil
fileName = nil
open(url) do | zipFile |
Zip::Archive.open_buffer(zipFile.read) do | ar |
ar.fopen(ar.get_name(0)) do | file |
fileName = file.name
content = file.read
end
end
end
という感じで取れた。RubyにしてもPythonにしてもPerlにしても、こういう処理があっさり数行で書けてしまう。便利なものだなぁ。