記事一覧はこちら

GoogleChromはスタンドアロンのダウンローダーを作る事が出来るのか?

Pixivとかニコニコ動画の動画をブラウザ、この場合はGoogleChrome13だけで保存したい。
探せば上記のサイト対応のダウンローダーの拡張機能はいくつか見つかりますが、どれもこれも作者のサーバーと通信をして、そこからダウンロードしています。つまり作者のサーバーがダウンしたら使えなくなってしまう。
なんで作者の対応サイト(Pixiv、ニコニコ動画)のサーバーのデータを拡張機能の作者のサーバーからダウンロードする必要があるかと言うと、対応サイトからブラウザに送信されるデータは「ブラウザ内で表示してね」と指示されているから。
その指示内容を「これはファイルとして保存してね」と書き換える作業が必要なんだけど、そこはchrome拡張機能からはいじくれない場所だから、サーバーでchromeの拡張でない、指示内容を書き換え出来る環境で書き換えている。

まあその指示内容ってのは、つまりレスポンスヘッダな訳で、どうにかしてサーバーから受信したデータに
Content-Disposition: attachment; filename="画像ファイル.jpg"
を差し込みたい。が、chromeの拡張では出来ない。出来なかった。今までは。

chrome.experimental.webRequest という機能がChromeのベータ版で導入されたらしい。
これはhttpリクエストヘッダ、レスポンスヘッダの取得、書き換えが可能という今までの拡張では不可能だった所に手が届く待ちに待った機能!だと思ってた。
WebRequest API - Google Chrome Extensions - Google Code
リファレンスによると、取得できるイベントは

  • onAuthRequired
  • onBeforeRedirect
  • onBeforeRequest
  • onBeforeSendHeaders
  • onCompleted
  • onErrorOccurred
  • onResponseStarted
  • onSendHeaders

ほうほう、なんか送信前のイベントが多いけど、狙っていたレスポンス開始時のコードもあるじゃないか
と、ここまで喜んでいたんだけど、よくみたらレスポンス開始時は取得だけで書き換え出来ないんですってね奥さん
MAJI超がっかりですよ。これが書き換えできれば、自由にヘッダを追加して、任意のファイル名でダウンロード可能になるのに。

気になるのはやっぱり文字コードかな。詳しく調べてないけど、このヘッダーの文字コードは何かに合わせなくていいのか とか。

ファイル保存時は決まったフォルダに任意のファイル名しか指定出来ないけど、これはちょっときつい。
自由自在どこのフォルダにもアクセスできたら超危険なのは流石に理解してるから、せめて指定したフォルダの中ならサブフォルダも作れるようにして欲しい。
そうすりゃダウンロードフォルダ/pixiv/ユーザーA/作品名/漫画のページ1,2,3・・・と整理出来るのに。

とりあえずレスポンスヘッダの書き換えが出来たら俺が一番最初にニコニコのダウンローダーをつくろっと