: O. Yuanying

Pragger でファイルのダウンロード

とくにやりたいことがあるわけじゃないんだけど、 Praggerのオレオレプラグイン がどんどん増えてく。

とりあえず WWW::Mechanizeを使って ファイルをダウンロードするプラグインを書いた。

使い方はこんな感じ。


- module: Mechanize::Download::file
  config:
    regexp: http://www\.yahoo\.co\.jp/*
    dir: '/Users/yuanying/Downloads/'
    auto_suffix: true
    url:
      attribute: link
      replace: index(\d*?)\.html
      to: file\1.zip
    filename:
      attribute: title
      replace: 'Yahoo'
      to: ''
  • regexp: ダウンロード対象のURLをフィルタする正規表現。
  • dir: ダウンロード先のディレクトリパス。
  • auto_suffix: ダウンロードするファイルのMimeTypeに合わせた拡張子を自動で追加する。デフォルトはfalse。(未実装)
  • url.attribute: URLとして利用するデータの属性。デフォルトは link もしくは、to_s。
  • url.replace + url.to: ダウンロードとして利用するURLをreplaceとtoを利用して修正する。
  • filename.attribute: 保存する際のファイル名。デフォルトはダウンロード対象に依存。
  • filename.replace + filename.to: ファイル名をreplaceとtoを利用して修正する。

ニコニコ動画をダウンロードするプラグインをこれ使って書き換えることを目標にしたんだけど、無理ぽい。

そして標準モジュール Filter::subs のオレオレ拡張

gsubする対象をデータそのものじゃなくて、 そのデータの属性にたいして行いたかったので拡張してみた


def subs(config,data)
  reg = Regexp.new(config["regex"])
  to = config["to"]
  attribute = config['attribute']
  return data.map do |i|
    if attribute
      if i.respond_to?(attribute) && i.respond_to?("#{attribute}=")
        i.__send__("#{attribute}=", i.__send__("#{attribute}").gsub(reg, to))
      end
    else
      i = i.gsub(reg,to)
    end
    i
  end
end

もう、この勢いでオレオレ標準プラグインを全部拡張しちゃうか??