[firefox] JDownloader + FlashGot
FlashGot 経由で JDownloader を使用していると、時々保存ファイル名が正しく伝わらないとがある。
厳密な理由は調べきれなかったが、何となく理由がわかってきたのでその対策を覚え書き。
原因との一つとして、「URLに "["等の一部の記号が含まれるとURLが正しくパースされない」が上げられる。
試しに JDownloader に対してコマンドラインで URL を送ってやると、アンカー("#")以下のアドレスのパースを打ち切っているような挙動を示した。
となると対策は簡単で、これらの文字を全てエンコードして JDownloader に渡してやるだけで事足りる。
と、ここででヤクの毛刈りが始まった……
既存のJDownloader インスタンスに対して、コマンドラインでのURL受け渡すことが何故か出来ないのだ。
新規インスタンスを立ち上げる時には、普通にURLが受け渡されているので、引数は間違っていないはず。
色々調べたけれど、結局原因が分からなかったので、JDownloader のリモートコントロール・エクステンションを利用することにした。
エンステンション設定
- Setting → Extensions で、"JDRemoteControl" を有効にする
- Setting → Extension → JDRemoteControl のポートを任意のものに変更(もしくはそのまま)
JDRemoteControlの使い方を調べるのもこれまた一苦労で、結局ドキュメントの類が見つからず、ソースコードを読んで何となく使い方を把握したという。。
JDremoteControlの使い方
WEBブラウザで、"http://localhost:10025/action/add/links/grabber1/start1/ダウンロードしたいアドレス" と入力すると、既存のJDownloaderインスタンスに対し、ダウンロードファイルを指示することが出来る。
さて、ここまで準備出来たら後は簡単。
適当なスクリプト言語等でURLのエンコード + JDRemoteControlへの指示を記述し、FlashGotでそのスクリプトを指定してやるだけだ。
Rubyだとこんな感じ
require 'open-uri' require 'uri' encoded_url = URI.encode(ARGV[0], /[^-_.!~*'()a-zA-Z\d;\/:@+$,]/n) open("http://localhost:10025/action/add/links/grabber1/start1/#{encoded_url}")
実際は、上記のスケルトンにファイル名の置換などの便利機能を追加して使用している。