2008年 12月 02日

汎用ダウンローダっぽいのが欲しい

http://github.com/cho45/middown/tree/master

git clone git://github.com/cho45/middown.git
git submodule init
git submodule update
./middown-daemon.rb &
./middown-http.rb &
./middown.rb add http://....
./middown.rb add http://www.nicovideo.../sm1 nicovideo
(ダウンロード先はいまのところハードコードで /tmp になってます)


ブラウザから進捗がみれたりタスクが追加できるダウンローダが欲しいなぁと思いました。ブラウザの拡張として実装されているいろいろとか、普通のダウンローダとかはいっぱいあるのですが、アプリケーション間連携がしにくいのです。

あと、ダウンロードしたあとに特定のスクリプトを実行させたいとか、具体的にはエロ動画サイトとかなんで zip 圧縮されてんだよファイル名を動画間で一緒にすんなよとか、ニコ動の動画落としたら ffmpeg で mp3 抽出して ID3 のアルバム名に動画IDつっこみたいとか、いろいろ思うところがあるのですがうまいことできるのが見つけられなかったり……

remedie のダウンローダはどうなるかなぁと思いつつ、よくわからなかったのですぐできそうな範囲で Ruby で軽く書いてみました。


全然いろいろ足りてないのですが若干やる気なくなってきたという…… ダウンローダはやること少ないけど拡張性考えると考慮することが足りていない気して結構めんどうくさい感じ……

  • ダウンロードスクリプトを言語依存にしない

というところだけを考えて、標準入出力でステータスを管理する、みたいな感じにしてみました。

middown-daemon.rb がダウンロードプロセスの管理、middown-http.rb middown.rb は daemon に問いあわせてタスクを追加したり表示したりする。(http のほうはタスクの追加をまだ実装してない。)

ダウンロードスクリプトは plugins/ 以下にあり、タスクを追加するときにどのスクリプトを使うか指定するようになっています。これらはタスクが追加されると `script uri dir` という形で呼びだされ、指定したディレクトリに任意の名前で保存するようになっています。その際、進捗を標準出力にひたすら吐いていて、それが daemon 側で管理されています。


問題点

  • ファイル名を今はダウンロードスクリプト側に決めさせているけど、あんまりよくない気がする。
    • でもニコ動なんかはファイル名をよしなにしてほしい
  • theruck (ザラキ) がキモい
  • スロットルの実装が欲しい
    • URI ベースで daemon 側でプロセスを制御するしかない


とりあえず作ってみた感が激しいので、設計も含めてなんかもっといい方法ないかなぁと思う次第です。