URL指定による自動[SaveLargest]機能を使ってみる
  概要
このページは、[SaveLargest]機能の使い方は知っているけれど、毎回毎回青いボタンやCtrl+Alt+Lを押すのは面倒だなぁ……と思っている方に、自動[SaveLargest]機能を紹介するために書かれています。[SaveLargest]ってそもそも何?という方は、まず使い方でbazzacudaの基本的な機能を確認してください。また、ここでは実際のWebページを使用した設定例を示すことに重点を置いています。各設定項目そのものの説明は自動[SaveLargest]などを参照してください。
自動[SaveLargest]は条件による~URL指定による~の2種類がありますが、このページで紹介するのは後者のほうで、事前に指定したURLのタブで自動的に[SaveLargest]を使用します(あるいはしません)。あと、単に自動[SaveLargest]といった場合はこちら(URL指定による~)を意味します。
自動[SaveLargest]の設定は公開データベースで参照することもできます。登録はどなたでも可能ですので、ご協力いただければ幸いです。
  もっとも単純な自動[SaveLargest]
この設定は、対象のタブ上で青色のボタンやCtrl+Alt+Lを押して(手動の)[SaveLargest]を実行するのと同じ結果をもたらします。つまり、保存対象となる画像は当該HTMLタブで最も大きい画像です。
Enterprise Watchのとある記事スクリーンショット画像を保存できるようにしてみます。
  1. 設定画面の[自動[SaveLargest]]-[URLによる動作変更]-[追加...]を開きます(以下では省略します)。
  2. [対象URL]に、URLを正規表現で入力します(以下では省略します)。
    http://enterprise.watch.impress.co.jp/img/epw/docs/294/172/html/vhd2-01.jpg.html のうち、色文字の部分が正規表現に変更するべき箇所です(impressサイト内を色々見て回ってみましょう)。次の点に留意してください。
    • メタ文字として扱われる文字(ドット.やクエスチョンマーク?)はエスケープ(\. や \?)する
    • (サイト全体で使えるような)汎用的な表現にする
    表現例
    一応の表現例はこのようになります。
  3. 一番下の[[SaveLargest]機能]で、[[SaveLargest]機能を強制的に有効にする]を選択します。
以上で設定は完了です。上の記事を開いた状態で、bazzacudaを普通に実行してみてください……保存できましたか?
  URL置換方式
保存したい画像がHTMLタブ内に存在しない場合(pixiv中サムネイルページなど)は、単純な[SaveLargest]では対処できません。このような場合はURL置換方式か、次のXPath方式を使用します。
URL置換方式は、HTMLタブのURL(ロケーションバーに表示されているURL)を固定的に変換すれば、保存したい画像のURLになる場合に使用できます。たとえば以下の場合、
  • タブのURL:http://www.example.com/thumbs/2009081519375301s.jpg.htm
  • 画像のURL:http://img.example.com/src/2009081519375301.jpg
色文字で示した可変部分以外は全て固定されており、しかも可変部分もタブのURLから取得できるため、この方式が使えます。しかし次のような場合(色文字の部分は可変だと想定してください)
  • タブのURL:http://www.example.com/thumbs/2009081519375301s.jpg.htm
  • 画像のURL:http://img01.example.com/src/2009081519375301.jpg
タブのURLからは 01 なのか 02 なのか nn なのか……が分からないため、この方式は使えません。この場合は次のXPath方式を使用してください。
……前置きが長くなりましたがURL置換方式の設定方法を説明します。この方法を使えるWebサイトが見つからなかったため、上のexample.comを例に挙げます。
  1. [対象URL]を指定したら、その中で画像のURLの生成に必要な部分を半角括弧で囲います
  2. 下の[保存する画像のURLを直接指定する]に、画像のURLを入力します。タブのURLから取得する部分、つまり半角括弧で囲った部分は、$n;(半角でドル記号・数字・セミコロン)で置換します。nは左端から数えた括弧の順番で、1から始まります($1; $2; …… $n;)。
    マッチ文字列の参照
  3. 一番下の[[SaveLargest]機能]で、[[SaveLargest]機能を強制的に有効にする]を選択します。
以上で設定は完了です。
  XPath方式
URL置換方式が使えない場合、すなわちタブのURLから画像のURLへの固定的な変換ができない場合、このXPath方式を使用します。この方式は、タブのURLからは変換できなくても、対象タブ内で画像に関連したHTML要素(img, a)のどれかは画像のURL(の素)を持っているだろうという考えに基づいています。それは画像そのものへのリンクURLであったり、画像を表示する更なるHTMLページへのリンクURLであったり、画像のURLを固定的に生成できるサムネイル画像のURLであったりするでしょう。
一つ注意が必要なことがあります。(現在のところ)このXPath方式で走査可能なHTML要素と属性の組み合わせは、<img>要素のsrc属性<a>要素のhref属性だけという点です。たとえば<img>要素のtitle属性や<span>要素のテキストノードがURLを持っている……という場合、この方式は使えません(今のところこの制限で不都合が無いためで、将来的に対象が増える可能性はあります。もしこのようなケースを発見した場合は、ご連絡いただけると幸いです)
XPath式の作り方そのものは詳しく説明しませんが、自動で生成してくれるサービスではhtml2xpathあたりが使いやすくておすすめです。ログインが必要なページなどでhtml2xpathが使えない場合は、AutoPager拡張機能に付属のXPath生成機能が簡易だと思います。要素を1つだけ指し示す(一致数=1)XPath式である必要があるので、その点には注意してください。
AutoPagerを使用したXPath生成 - 1 AutoPagerを使用したXPath生成 - 2
先ほど出てきたpixiv中サムネイルページから、オリジナルの画像を保存できるようにしてみます(サムネイルをクリックした先のHTMLページであれば、まさに保存したい画像が含まれているため、単純な自動[SaveLargest]で対応できます)
  1. 事前に、画像のURLを取得するHTML要素を示すXPath式を作成しておきます。整理しておくと、
    • タブのURL:http://www.pixiv.net/member_illust.php?mode=medium&illust_id=4866425
    • 画像のURL:http://img13.pixiv.net/img/xxkxx/4866425.jpg
    となります。画像のURLを生成できる<img>要素か<a>要素は無いかな……と探してみると、サムネイル画像の<img>要素が良さそうなURL(_mを消すだけ)を持っています。
    今回のターゲット
    この要素のXPath式は //div[@id='content2']/div/a/img です。
  2. [対象URL]を指定したら、下の[保存する画像のURLを直接指定する]内の[XPathを使用して、保存すべき画像のURLを取得することもできます...]ボタンをクリックします。
    ボタンを押して編集画面へ
  3. ダイアログボックス内を適宜編集していきます。
    編集画面
    1. [参照要素]にXPath式を入力します。
    2. [参照要素]が<img>要素なので[参照属性]はsrcを選択します。
    3. [正規表現と置換文字列]で[行を追加]ボタンを押し、「_m」にマッチするように正規表現を入力します。
    4. [置換文字列]のボックスの右隣にあるチェックボックスをチェックし、[置換文字列]の入力欄自体は空白(=マッチ文字列を消去する)にします。
      上の画像ではやたらと複雑になっていますが、「_m」を消すだけなら _m(?=\.(?:jpe?g|png|gif)$)_m(?=\.\w+$) でも問題ありません(複雑な指定の意味は後のセクション(保存先のフォルダを変える)で説明します)
      単純な文字列消去
      ただし、_m という指定は不適切です。pixivはユーザー名にアンダーバーの使用を認めているため、たとえば a_m_o というユーザーの投稿があると、次のようになってしまいます。
      不適切な表現
    5. 設定値が正しいか[入力値をテスト]で確認し、問題なければOKボタンで戻ります。
  4. 一番下の[[SaveLargest]機能]で、[[SaveLargest]機能を強制的に有効にする]を選択します。
以上で設定は完了です。
  フォルダ名にマッチ文字列を使う
[フォルダ]では、[対象URL]やXPath方式の正規表現でマッチした文字列(半角括弧でキャプチャした文字列)を使用して保存先フォルダを変更することができます(もちろん、フォルダの変更は必須ではありませんし、マッチ文字列を使用しなくても全く問題ありません)
[対象URL]の正規表現でマッチした文字列の参照は$n;(半角でドル記号・数字・セミコロン)で行います。nは左端から数えた括弧の順番で、1から始まります($1; $2; … $n;)。括弧が入れ子になっている場合は、開き括弧が先にあるほうが若い番号になります。たとえば a(bc(defg)h)i という正規表現なら、赤括弧が1番($1;)となり、青括弧が2番($2;)となります。
XPath方式の正規表現でマッチした文字列の参照は$n_m;(半角でドル記号・数字・アンダーバー・数字・セミコロン)で行います。nは正規表現の行の順番で、1行目なら1になります。mはその正規表現において左端から数えた括弧の順番で、1から始まります。複雑なので画像で説明すると、以下のようになります。
マッチ文字列をフォルダ名に使う
ユーザー名(xxkxx)は1行目の正規表現2番目のキャプチャ括弧なので、$1_2; となります。
  [SaveLargest]を無効にする
条件による自動[SaveLargest]を有効にしている場合、望まないページで誤作動を起こす場合があります。たとえば、[URLが画像の拡張子(jpg/png/gif/bmp)で終わる場合]を有効にすると、Wikipediaの画像プレビューページで[SaveLargest]が作動してしまいます(普通、保存したいのはクリックした先のオリジナル画像でしょう?)。
例に挙げたWikipediaの場合は、XPath方式によって積極的にオリジナル画像を保存しに行くということも考えられますが、あくまでオリジナル画像を(自分で)開き、それから保存したいという場合にはプレビューページでの[SaveLargest]の作動を禁止することができます。設定方法は次の通りです。
  • [対象URL]を指定します。
  • 一番下の[[SaveLargest]機能]で[[SaveLargest]機能を強制的に無効にする]を選択します。
以上で、[SaveLargest]が発動しなくなります。