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
もう、この勢いでオレオレ標準プラグインを全部拡張しちゃうか??