整理済みのZIPアーカイブにZippedImages Etcetera対応タグを設定する

僕は電子化したZIPアーカイブを、iTunes風のフォルダ階層に整理しています。
著者名のフォルダの中に書名のZIPアーカイブを、以下のようなイメージで配置しています。

著者A
  書名a.zip
  書名b.zip
著者B
  書名c.zip
  書名d.zip

先日リリースしたZippedImages Etceteraに必要なタグの設定を省力化するために、上記の状態に整理された書庫ファイルをバッチ処理するスクリプトを書きました。
以下のタグを自動設定します。

  • ZIPアーカイブを含むディレクトリ名を著者名として設定
  • ZIPアーカイブのファイル名から拡張子を除去した文字列を書籍名として設定
  • ZIPアーカイブに含まれる最初のJPEGファイルをサムネイルとして設定

つまり、発売日以外のタグを全部自動設定できます。
ZIPアーカイブの整理方法は人それぞれだと思いますが、スクリプトを修正してやれば色々なケースにも対応できると思います。
例えばファイル名に著者名と書籍名を両方含めてフラットに管理している場合でも、今回のスクリプトを修正すれば対応できると思います。

使い方
このスクリプトはZip/Rubyを利用しています。ターミナルからRubyGemsを使って、インストールしてください。

gem install zipruby

あとは、タグを付けたいZIPアーカイブを含むディレクトリをスクリプトに渡してやってください。
再帰処理で、含まれるZIPアーカイブを全部処理します。

ruby ziupdate.rb <ZIPアーカイブを含むディレクトリ>

以下がスクリプトになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/ruby
 
require "find"
require "rubygems"
require "zipruby"
 
Find.find(ARGV[0]) do |file_path|
  file_path = File.expand_path(file_path)
  if /\A[^.].*\.zip\z/ =~ File.basename(file_path)
    author = File.basename(File.dirname(file_path))
    title = File.basename(file_path, ".zip")
    Zip::Archive.open(file_path) do |zip_file|
      thumbnail = zip_file.map {|entry| entry.name}.sort.find {|name| /\A[^.].*\.(jpg|jpeg)\z/ =~ File.basename(name)}
      meta = "Title: \"#{title}\"\nAuthors:\n  - \"#{author}\"\nThumbnail: \"#{thumbnail}\"\n"
      zip_file.add_or_replace_buffer("ZippedImages.yaml", meta)
      print meta
    end
  end
end
カテゴリー: Develop   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">