テクニック/PageScraperでなんとかする
前書き 
本項ではuziq氏制作のPageScraperを利用してあらゆるサイトから情報を取得する方法について解説します。
PageScraperは日本語環境下の場合、幾つかの例外を除いて文字エンコーディングがShift-JISでないと化けるという欠陥がありますが、それの対策も併せて後半で解説。
前半はニコニコ動画
の毎時ランキング(マイリスト)
取得をサンプルとして進めていきますので、興味を持たれた方はおつきあい頂ければ幸いです。
そして解説に入る前に、まずは改稿前の解説を参考にしてニコニコ動画の情報を取得していた方、
並びにその煩雑さに挫折した方へのお詫びから書かねばなりません。
PageScraperでRSSを利用して情報を引っ張る場合、リクエストヘッダのContent-Typeでcharset=utf-8と宣言されている場合に限りUTF-8でも2バイト文字が化けないと言うことに今更気づきました(この条件を満たしていない場合、S-JISとして処理されるため化ける模様)。
幸いニコ動はこの条件を満たしているのでwgetとCharset Converterは必要ありません。本当に申し訳ありませんでした。完全に確認ミスです。
これにより難易度は大幅に下がると思います。
本項で使用している画像の多くは、PluginPak v1.08に同梱されているv2.63を使用しています。その後に機能の変更/追加されたこともあって、最新版を使用する場合は微妙に画像と違う箇所も出てくると思います。やることはほとんど変わらないはずですが、一応注意してください。該当部分は説明文でフォローされていると思います。
基礎編 
基礎編では特に小細工を労せずともPageScraperで取得出来るタイプ…つまり文字エンコーディングがShift-JISの場合、あるいは先の条件を満たしているRSSからの取得について解説します。
該当ページの文字エンコーディングはソースで確認可能です。
ただし、ごく稀にページでの指定と実際の文字エンコーディングが不一致の場合もありますので注意してください。
PageScraperをダウンロード/インストールする 
まずPageScraperをインストールします。こちらのリンクからPluginPakの最新版をDLし、適当なところに解凍します(注:zip→自己解凍型7zの二重書庫)。
出てきたファイル/フォルダの中で厳密に必要なのはPluginsフォルダに入っているPageScraper.dllだけですが、よく分からないという方はSamurizeのConfigsとPluginsフォルダにそのまま上書きしてください。
Pluginsフォルダに入っているPageScraper.chmは英語のヘルプファイルです。便利なのでどこかに確保しておいた方がいいかもしれません。
(追記:PageScraperの項目を見れば分かると思いますが、現在PluginPakに入っているものより新しいバージョンが公開されています。致命的なものではないですがバグ修正も含んでいるので、特に何か理由がない限り最新版を使ってください。単独でヘルプが欲しいという方はこちら
からもダウンロードできます。)
PageScraperの機能解説 
わりと細かいところまで解説しているので、サンプルをさっさと完成させたい方は サンプルを作成してみるまで飛ばしてください。
ただ、PageScraperの機能解説の一番上で使用している 画像に書かれている番号だけは、サンプルを作成してみるの説明でも使っているところがあるので、 読み飛ばすと意味不明になる可能性があります。どの番号がどの位置を指しているのかだけは把握しておいてください。
いつも通りSamurizeのConfigを起動し、「メーターの追加」で出てくるメニューの一番下にある「プラグイン」から「PageScraper.dll」を選択。
追加したメーターの「情報」タブへ移動し、「実行する関数」で「GetWebpage」を選択したあと「設定」をクリックすると、
二枚の設定画面が出てきます
(追記:2.9.7以降は三枚のウィンドウが開きます)。
まずはメインのPageScraperと書かれたウインドウの解説から。
- 入力ボックスには使用したいページのURLもしくはローカルにあるファイルのPathを記述します。
...をクリックするとローカルのファイルを選択できます。デフォルトだとhtmlは見えないので、 選択する際は「ファイルの種類」で「All Files(*.*)」を選択してください。直接ボックスにPathを入力も可能です。
またPathに日本語が入っていても特に問題はありません。 Loadを押すと指定したURLのソースやPathにあったファイルの中身が2に表示されます。 - 本来はここでソースの確認をしながら後述するMatchesを使って切り抜くのですが、残念ながら2バイト文字が完全に化けます。読みづらい場合は右クリックのメニューからフォントの変更も可能ですが、日本語が使えるフォントでも普通に表示が化けるので注意。
使いづらいので、webサイトから取得するならブラウザからソースを確認(大抵右クリックにあります)、 ローカルにあるファイルならテキストエディタで開いて切り抜きたい部分を把握するようにしましょう。 ここで出力する項目を設定します。一番左のグレーのボックスには特殊な表記例が記載されています。ほぼSamurizeで通常使っているものと同じです。一番上の[Occurrences]は独自で、出力項目に連番を付けてくれます。
その右隣では出力する項目の組み合わせを設定できます。項目は後述のMatchesで作成します。
さらに右隣には、出力した結果が表示されます。
(追記:2.9.7で廃止され、Outputというウィンドウに独立しました)- Advanced Optionsはオプション設定です。クリックすると新たに設定ウィンドウが開きます。
よく使うのは、作成したデータの出力先を指定する「Save Output to TMP/HTML File:」
更新間隔(秒)を指定する「Update every xxx seconds」
クライアントが隠し/停止状態でも更新するか否かを指定する「Allow updates while config is hidden/paused」あたりでしょうか。
Advanced Optionsの隣にあるIndicate Selected Matchesはトグルになっていて、ONにするとMatchesで選択状態になっている定義で得られる文字列をハイライト表示してくれます。日本語環境だと動作が微妙です。
OKとCancelに関してはいつも通りです。
(追記:2.7以降でこの箇所に「PageScraper Name」という項目が追加されています。これは新たに追加された関数「GetScrapedMatches」を使用して、同一Config上にある複数のPageScraperから得られた情報を纏める際に使われる識別用の名前を入力する箇所です。適当に名前を付けても構いませんし、GetScrapedMatchesを使用しない(あるいはよく分からない)なら、とりあえずデフォのままでも構いません)
(追記:2.9.7でShow/Hide Match PanelとShow/Hide Output Panelが追加。押すと該当ウィンドウが表示/非表示になります)
次いでもう一枚の設定画面、Matchesの解説。
- Page Start Boundary
切り抜く範囲の大ざっぱな開始位置を決めます。ソースが長大な場合や、後述するMatchで指定した部分が変な位置で誤爆しているような場合に使用します。設定しなくても問題ありません。大抵は特徴的なタグやソースに記述されたコメントなんかを登録する感じになると思います。
ただし、上手く認識できないようなので2バイト文字を含む文字列を指定しないでください。2バイト文字を指定しても2のソース部分で該当する箇所に打ち消し線が引かれないだけで、実際は取得可能でした。訂正します。申し訳ありませんでした。
- Page End Boundary
切り抜く範囲の大ざっぱな終了位置を決めます。使い方はPage Start Boundary同様です。いずれか一方だけを使用することも出来ます。設定しなくても問題ありません。
こちらも2バイト文字を含む文字列を指定しないでください。こちらも2バイト文字を含む指定が可能です。申し訳ありませんでした。
- Match
(1~75)
Page Start BoundaryとPage End Boundaryの間(設定していない場合ソース全体)から、さらに細かい条件を指定して切り出します。実質ここがメインです。
チェックボックスにチェックを入れると、Start BoundaryとEnd Boundary、後述のFilterのグレーアウトが解除されます。先と同様にStart BoundaryとEnd Boundaryの間の文字列を出力します。たとえばページのタイトルが欲しい場合は、Start Boundaryに<title>、End Boundaryに</title>のように入力すればいいわけですね。条件に2バイト文字を含んでいても取れるようです。
最大で75個の条件を指定できます。項目を右クリックで名前の変更も可能。
(追記:2.8から75個の上限が撤廃され、Matchが最初から羅列されなくなりました。新たなMatchを作成したいときは上部に追加された「Insert」を選択して増やしてください。「Delete」を押すと指定されたMatchは削除されます)
- Filter
(1~25)
Matchで条件指定して出力された文字列を加工します。文字の除去、置換、追加等多彩な加工が可能です。
一つのMatch設定に付き、最大25個の条件を指定できます。項目を右クリックからリセット可能。2バイト文字を使用可能(一部制限アリ)。
チェックを入れると右向きの三角形が現れ、それをクリックすると使用できるフィルタのメニューが出てきます。各Filterの効果については一応簡単な解説も付けておきますが、確実なものはヘルプに例文付きで載っているのでそちらを参考にしてください。
条件が複数指定可能なものは各条件を|で区切ります。また、Filterは常に上から、一つのFilterで複数指定出来るものは前から順に処理されます。html出力時に<>&"などの実体参照を真面目に処理しようとReplace Multipleを使う場合、&を最優先で処理しないと酷いことになるので注意。
(追記:こちらも2.8から25個の上限が撤廃され、最初から羅列されなくなりました。Filterを増やしたい場合も同様に「Insert」を押して追加して下さい。「Delete」を押すと選択中のFilterは削除されます)
- Add Prefix / Suffix / Add Prefix/Suffix
Matchで取得した文字列の前方 / 後方 / 前後方に指定した文字列を付加します。
- Trim Text (Trim / Left Trim / Right Trim / Trim Whitespace)
Matchで取得した文字列の端にある文字列を指定して除去します。Whitespaceは半角スペース/タブ/改行コードを除去。
- Case Format (Capitalize / All Lowercase / All Uppercase / Mixed Case)
Matchで取得した文字列の大文字/小文字を変換します。英字のみで扱う機能なのであまり使用機会はないかも。
- Left / Right / Mid
Matchで取得した文字列を、指定方向から指定した数字分だけ表示させます(Leftで10と指定したら頭から半角10文字分表示)。日本語が考慮されていないので中途半端に切ると化けます。Midは開始位置の指定可能。
- Extract / Extract From End
指定した文字数目から指定した文字列の手前までを表示します。
「2008年09月19日」という文字列に対し、指定文字列は「月」、指定文字数「3」と指定した場合、文頭から半角3文字目~月の手前までということで、表示されるのは「08年09」ということになります。通常は文頭から。From Endは文末から。
- Remain / Remain From End
指定した字数分の位置より先にある、指定文字以降の文字列を表示します。同種の文字がある場合に使用。
「あめんぼあかいなあいうえお」という文字列に対して、指定文字列「あ」、指定文字数「0」とした場合、出力は「めんぼあかいなあいうえお」、文字数を「3」とした場合は文頭から半角で3文字目以降の「あ」以降となるので「かいなあいうえお」となります。From Endは文末からです。
- Retain Text... (Retain / Retain Multiple / Retain Numbers)
取得した文字列から指定した文字だけを切り出して表示します。Multipleは複数指定可能。Numbersは文字列から数字だけを切り取って表示させます。
- Remove Text... (Remove / Remove Multiple / Remove Numbers / Rmove HTML / Remove Whitespace / Remove Extra Spaces / Remove Extra Chars)
取得文字列から指定した文字を消去して表示します。Multipleは複数指定可能。Numbersは数字のみ削除。HTMLはHTMLタグ(<>で囲まれているもの)を削除。Whitespaceは半角スペース/タブ/改行コードを削除。Extra Spacesは連続する半角スペースを一つにしてくれます。
(追記:v2.9でRemove Extra Chars追加。Extra Space同様、連続した任意の文字をひとつに纏めてくれます)
- Replace Text... (Replace / Replace Multiple)
指定した文字を任意の文字に置換します。Multipleは複数指定可能。
- Insert
文頭から指定数字分移動した位置に任意の文字を挿入します。
指定した数字が「7」なら、文頭から半角で7文字目に指定した文字が挿入されます。0を指定すると文末に挿入。
- Delete
指定位置から指定文字数分の文字列を削除します。
- Blank Match Text
指定した条件にヒットしなかった時に出す文字列です。
- Reverse Text... (Reverse / Reverse Line / Reverse Word Order)
取得文字列を反転して表示させます。「あいうえお」なら「おえういあ」という感じ…ですが、実際は日本語考慮してないので化けます。
Reverse Lineは複数行出力された時に最終行を開始行にひっくり返して表示。Reverse Word Orderは単語ごとに文字列順を逆転させます(I love You.をYou. Love Iのような感じ。日本語だと使い道なさそうです)。
- Pad Text... (Pad Text Left / Pad Text Middle / Pad Text Right)
指定文字数分を常に表示し、取得文字列が指定文字数分に足りなかった場合は指定の文字を付加して埋めます。
「ニュース」という文字列(半角8文字分)に対して文字数「12」、指定文字「-」とした場合、「ニュース----」となります。 Middleを指定した場合は「--ニュース--」となります。
- Numeric Options... (Add / Subtract / Multiply / Divide / Integer Divide / Modulo / Round Decimals / Evaluate Expression / Formula)
取得文字が数字の場合の計算用Filterです。基本的な加減乗除からそれ以外まで。
- Convert (HTML Char References / URL Percent Encording / Unixtime / Date Format / 12hr to 24hr / 24hr to 12hr / F to C / C to F)
使用頻度の多そうな数字/文字列置換用Filterです。年月日の書式、12<->24時間置換、華氏<->摂氏置換。
2.634でUnixTimeを通常の時間に置換するフィルタ追加。
2.8.7でHTML Char References追加。例えば&を&に置換してくれます。
2.9.7でURL Percent Encording追加。%20を半角スペースなどに置換してくれます。
Allow Match If... (Allow If Contains / Allow If Does Not Contain / Allow If Begins With / Allow If Ends With)
指定文字列を含む場合にのみ表示します。複数指定可能。
Does Notは逆に指定文字列を含んだ場合は非表示。Beginsは指定文字が文頭にあった場合、Endsは指定文字が文末にあった場合に表示。
2.9.2で廃止。Ignoreと共にConditionalに統合。
Ignore Match If... (Ignore If Contains / Ignore If Does Not Contain / Ignore If Begins With / Ignore If Ends With / Ignore If Length / Ignore If Occurrence)
指定文字列を含む場合は非表示にします。複数指定不可能。
Does Notは逆に指定文字列を含んだ場合は表示。Beginsは指定文字が文頭にあった場合、Endsは指定文字が文末にあった場合に非表示。Lengthは指定した数字と文字数が一致した場合に非表示。
Occurrenceは先に説明したPageScraperの設定画面の3で[Occurrence]を指定した場合に使用可能で、指定した番号以降の文字列を非表示にします。
2.9.2で廃止。Conditionalに統合。
- Conditional
2.9.2で追加。上記のAllowとIgnoreを統合したようなフィルタです。
条件を指定して、それを満たした時に出力する(Allow)/しない(Ignore)などを設定できます。
2.9.5以前でAllow/Ignoreフィルタを使用していた場合、再設定が必要なので注意。
- Save File To... (Save File To Folder / Save File To File)
Filterと言うには少し微妙ですが、取得した文字列にURLが含まれる場合、指定した拡張子を持つファイルを指定したフォルダにダウンロードします。ファイル名はオリジナルのものが使用されます。PageScraperの設定上では動作しないそうなので、SamurizeのConfig上からテストかけるか、Client上で実験してくださいとのこと。
ファイル名を替えたい場合はFile To Fileを使用してください。
- Return All Occurrences
チェックを入れるとMatchで指定した条件を繰り返し、当て嵌まるものを全て持ってきます。
同形式で繰り返し記述されているニュースなどを取得する時に便利です。
(追記:2.8.8でOccurrence Rangeとなり、仕様が少し変わりました。全部持ってきたい場合は右のボックスで0を選択し、1 to 0のような形にしてください)
- Limit
Return All Occurrencesにチェックを入れると選択できるようになります。繰り返す回数を指定します。
(追記:2.8.8で廃止) - Cycle
これもReturn All Occurrencesにチェックを入れると選択できるようになります。
チェックを入れると、ソースに変更がなかった際にPageScraperを実行すると行をずらして出力されます。表示されていた最初の行は最終行に回されます。
1.hogehoge 2.nyannyan 3.teketeke
と出力されていた場合、
1.nyannyan 2.teketeke 3.hogehoge
のような感じになります。ずれる行数はPageScraperの実行速度によるようで。(15秒更新だと15行ずれる)
(追記:項目名がCycle Outputに変更になりました。機能は変わらない模様)
サンプルを作成してみる 
とりあえずニコニコ動画の毎時ランキングから基本的な情報を引っ張ってみましょうか。
最新版のPageScraperをインストールしてConfigを起動し、「メーターの追加」で出てくるメニューの一番下にある「プラグイン」から「PageScraper.dll」を選択。
追加したメーターの「情報」タブへ移動し、「実行する関数」で「GetWebpage」を選択したあと「設定」をクリックして設定画面を出します。
先述したPageScraperのウィンドウにある1の入力ボックスにhttp://www.nicovideo.jp/ranking/mylist/hourly/all?rss=2.0
と入力して、「Load」を押します。2にソースが出ると思います。
Matchesのウィンドウへ移動し、[Match1]のボックスにチェックを入れます。
グレーアウトの解除された「Start Boundary」に<title>と入力し、「End Boundary」に</title>と入力します。
どうでしょう? グレーボックスに指定した部分が出力されたでしょうか? ちなみに上のグレーボックスはMatchで得られる素の状態、下のグレーボックスはFilterを通した状態が出力されます。
あとはReturn All Occurrencesにチェックを入れて、必要な順位分データを引っ張ってください(100位までなのでLimitは最大100です)。
(追記:2.8.8以降の場合、Return All OccurrencesではなくOccurrence Rangeとなっています。この場合は左のドロップボックスの数値を1、右のドロップボックスを0とし、1 to 0とすると全部持ってきてくれます)
トップにある「総合のマイリストランキング(毎時)‐ニコニコ動画(ββ)」が邪魔だという人は、Page Start Boundaryにチェックを入れ、
<item>と入力すると、ページの一番最初にある<item>以降からの取得になります。
再びPageScraperのウィンドウに戻り、3の入力ボックスで出力形式を決めます。
今回は[Match1]を使ったので、特に弄ることもなく[Match1]と記述してください。大文字/小文字を区別するのでMatch1をmatch1等にしないよう注意。
これで動画タイトルが右のグレーのボックスに出てくると思います。
とりあえずこれで完成です。OKを押してメーターに情報が出力されていることを確認してください。
サンプルをもう少し実用的な構成にする 
急ぎ足で酷い解説でしたが、なんとかここまで読み進めてきた方、PageScraperの使用方法がなんとなくでも理解できたでしょうか?
極論を許されるのならば、基本はソースを見て、欲しい情報の前後にある文字を見て、MatchesのMatchにチェックしてStart BoundaryとEnd Boundaryに入力するだけで、それ以外の機能はちょっと便利なオマケ機能に過ぎません(まぁPage Start/End Boundaryはかなり使うんですが…)。
ここからは知ってると便利かも知れないことをサンプルを例にちょっとだけ解説。
リンクを可能にする 
見出しに対してクリックで該当情報に飛べないと利用価値がかなり微妙です。
サンプルの場合、最終的に「動画タイトル%l動画のURL」と出力されればいいわけですから、こうなります。
- 先に作ったサンプルのメーター([Match1]を指定してあるやつです)のPageScraperの設定を開き、Matchesのウィンドウで[Match2]をチェックする。
- Start Boundaryに<link>、End Boundaryに</link>と入力する。 これで[Match2]には動画のURLが出力される。
- PageScraperの設定ウィンドウに[Match1]%l[Match2]と入力し、右欄のボックスに望み通りの情報が出力されたか確認をする。
さて、ここまできてひとつ問題があります。残念ながらSamurizeのリンクタグは閉じるように作られていませんので、このままではリンクが使用不能です。
Return All Occurrencesのチェックを外して一行だけ出力させる状態にし、Page Start Boundaryを上手くずらしていくという方法もありますが、面倒な上に応用が利かないので、結果をテキストに出力させてそれをSamurizeのテキストメーターで一行ずつ拾う形にしましょう。
- PageScraperの設定ウィンドウにあるAdvanced Optionsをクリックしてオプション画面を起動し、Save Output to TMP/HTML File:にチェックを入れ、出力場所を指定する。任意のファイル名まで入力可能。今回はどこか適当な場所にniconico.txtとでもして出力させてください。
- PageScraper設定ウィンドウを閉じ、SamurizeのConfig上でPageScraperのメーターを選択状態にし、「情報」タブの「テスト」を押す。
- 指定した場所にniconico.txtが出力されていることを確認する。
- Configに戻り、「メーターの追加」→「テキストファイル」でメーターを作り、「情報」タブの参照先に先に作ったテキストを指定する。
- そのまま「情報」タブで「表示行」を1、「表示行数」を1にすることで1位の情報だけが出力される。そのメーターにリンクを作成して終了。
リンクタグを利用したリンクの作成に関してはこの辺を参考に。 - 以下同様の手法でテキストファイルのメーターを作成し、表示行をずらしていくことで2位以降の情報が出力される。
以上です。あとはリンクが動作するか確認してください。
PageScraperのメーターにも出力した情報と同内容が表示されていますが、こちらは別に不可視でも構いません。削除はしないでください。
ブラウザではなく、TubePlayerのような外部プレイヤーに渡したい場合、「動画タイトル%l使用プレイヤーのPath 動画のURL」と出力されればいいわけですから、PageScraperの設定ウィンドウに[Match1]%l"使用プレイヤーのPath" [Match2]のような感じで入力してください(Pathと動画URLの間に半角スペースが必要なことに注意)。
[Match2]のFilterでPrefixを使ってURLの前方に文字列を追加するという方法もあります。
使用するプレイヤーによってはプレイヤーにURLを渡すときに引数が必要だったりと特別な形式があるかも知れませんので、意図したとおり動作しない場合はそれぞれのプレイヤーのヘルプ等で確認してください。
Filterの使い方 
特に悩むことはないと思いますが、一応簡単なサンプルを交えて。
動画タイトルの邪魔な順位でも消してみましょうか。
- 先ほど作ったPageScraperの設定を開き、Match1を選択状態にしてFilter1にチェック。
- Filter1の横に出た右向きの三角をクリック、出てきたメニューからRemainを選択。 要求されたReturn everything after this text:には:とし(全角注意)、starting from this position:は0とする。
以上です。これで0文字目以降にある:以降の文字だけを出力するようになりました。
これは最も簡単なFilterの使用例であり、慣れてくるとFilter(あるいはMatchも)を複数組み合わせることによって、
例えば最終更新時刻(<lastBuildDate>)のSun, 18 Jan 2009 23:24:32 +0900
みたいな表記を09/01/18 23:24:32のように加工出来るようになります。解説を参考に色々試してみてください。
その他の情報の取得 
動画のアップロード時間や作者コメントなんかも取れると思いますが、ここではいちいち説明しません。
ここまでの説明が大体理解できていれば楽勝だと思いますので、腕試しにどうぞ。
毎時ランキング(マイリスト)以外のランキングを取りたい場合はソース指定を変えていってください(公開RSS一覧
)。
なぜか一覧にはマイリストしか記載されていませんが、URLのmylistをviewに変えると再生数、resに変えるとコメント数になります。
ニコニコ動画のサムネイルに関して 
残念ながらニコニコ動画の仕様が特殊で
<img src="http://tn-skr1.smilevideo.jp/smile?i=xxxxxxx
">
といった感じで記述されており、jpgやgif、pngといった画像系の拡張子で終わっておらず、そのままだと普通の手段…画像のURLを抽出して、そのまま表示タイプを画像にして表示、という手段が使用出来ませんでした。
ただほんの一手間、Filterで拡張子付けてやれば表示出来ることを指摘いただきましたので(Thanks Samurize Part 43 - 407
氏、およびpNewsでオリジナルを考案されたSamurize Part 41 - 710
氏) 、そのやり方を軽く紹介。並びにMiniBrowserを使った方法も。
既に解説済みの所は軽く流します。
サムネイルのURLを取得して表示 
FilterのSuffixでURLに拡張子を付加して一覧を出力させ、それをテキストファイルのメーターで拾って表示させる方式です。
特に難しいこともなく、MiniBrowserに比べると加工が容易でデザインの整合性が取りやすいです。
ただ初回読み込み時やreload時の動作がかなり重く、環境次第では数十秒以上クライアントが固まるので切り替えなどを使う時には向いていません。また、スクロールが使えるMiniBrowserに比べると限られた範囲に上手く収めるのはやや慣れがいるかも知れません。上手く使い分けてください。
- Configを起動して「メーターの追加」→「プラグイン」で「PageScraper」を追加し、「情報」タブの「実行する関数」で「GetWebpage」を選択後「設定」をクリック。PageScraperの設定ウィンドウの1で、欲しいサムネイルのあるRSSのURLを指定する。
- Matchesのウィンドウに行き、[Match1]にチェックを入れ、Start Boundaryに" src="、End Boundaryに" width=と記入。
Return All Occurrencesにチェック。必要ならばLimitを設定(最大100)。
(追記:2.8.8以降の場合、Return All OccurrencesではなくOccurrence Rangeとなっています。この場合は左のドロップボックスの数値を1、右のドロップボックスをALLとし、1 to ALLとなるようにしてください) - Filter1にチェックを入れ、メニューからSuffixを選択。要求されるAdd this text to the end:は&.jpgとする。
- Advanced Optionsを開き、Output OptionsにあるSave Output to TMP/HTML file:にチェックを入れ、入力ボックスに適当な出力先を指定する(ex. C:\Program files\Samurize\nico_list.txt)。3の出力項目に関してはそのまま[Match1]。
- OKを押してPageScraperの設定を閉じ、メーターの「情報」タブにある「テスト」を押して、指定した箇所にtxtが出力されているかを確認する。
- 「メーターの追加」→「テキストファイル」で新規にテキストファイルのメーターを追加し、「表示タイプ」を「画像」に変え、「情報」タブの参照先で先ほど出力したtxtを指定して表示する。表示行は1、表示行数も1です。以上。
2位以降は必要なだけテキストメーターを作成し、表示行をずらしていってください。
ちなみにサムネイルの横縦比は13:10(オリジナルのサイズは130px×100px)です。
MiniBrowserを使う 
uziq氏の作ったMiniBrowserを使うことによって、先のイメージタグをそのままSamurize上で表示させることも可能です。
幸いPageScraper側も整形した情報を最終的にhtmlとして出力させることは考慮されていますので、大きな問題は特にないと思います。
装飾に関してはどうしてもhtmlタグが必要なのですが、数が多すぎるのでここでは具体的には触れません。検索して適当なページで学んでください。
- Configを起動して「メーターの追加」→「プラグイン」で「PageScraper」を追加し、「情報」タブの「実行する関数」で「GetWebpage」を選択後「設定」をクリック。PageScraperの設定ウィンドウの1で、使用ソースは欲しいサムネイルのあるRSSのURLを指定する。
- Matchesのウィンドウに行き、[Match1]にチェックを入れ、Start Boundaryに" src="、End Boundaryに" width=と記入。
Return All OccurrencesにもチェックしLimitを設定する(最大100)。これで先ほど説明した<img src="">内のURLが取得出来るようになった。
(追記:2.8.8以降の場合、Return All OccurrencesではなくOccurrence Rangeとなっています。この場合は左のドロップボックスの数値を1、右のドロップボックスをALLとし、1 to ALLとなるようにしてください) - PageScraperの設定画面に戻り、3の部分で<img src="[Match1]"><br>と指定する。
- Advanced Optionsを開き、Save output to TMP/HTML file:にチェックしてhtmlを出力したいPathを記述する。場所は相変わらずどこでもいい。C:\Program Files\Samurize\niconico.htmlみたいな感じで入力する。
その下のPrefix:に<html><head></head><body>、Suffix:に</body></html>と入力する。設定終了後OKを押してウィンドウを閉じ、「情報」タブの「テスト」を一回押す。指定したフォルダに指定したhtmlが作成されているか確認する。 - MiniBrowserを設定する。既にインストールまでは終わっているものとする。分からない方はこの辺を参考に。
Configで「メーターの追加」→「文字列」でメーターを追加、ここに情報が表示されるので適当な大きさに変更する。「一般」タブで「表示タイプ」を「視覚プラグイン」に変更し、「表示」タブの「プラグインの選択」で「MiniBrowser.dll」を選択し、「設定」をクリック。
出てきた設定ウィンドウの「Browser Window」の「HomePage」に先ほどPageScraperで生成したhtmlを指定する。必要なら「Show Scrollbar」にチェック。設定を閉じ、iniを保存して終了する。
以上です。適当なClientで先ほど保存したiniを読ませて、MiniBrowserに動画のサムネイルが表示されることを確認してください。上手く表示されなかった場合、一回再読み込みを実行すると表示される場合があります。
まぁ本当に最低限サムネイルを表示させただけで、リンクすら機能しない状況なのですが、表示が可能なことは理解いただけたと思います。あとは必要なものを各自で追加していくと言うことで。
基本的にはMatchesを駆使して必要な情報を抽出し、PageScraperの設定ウィンドウの3で必要なhtmlタグを付加、Advanced Optionsでhtml全体の設定を追加して出力、MiniBrowserで表示すると言う感じになります。
(背景透過は壁紙の該当箇所を使った擬似的なもの。右にあるのはスクロールバーではなくリロード用に作ったタイマーです。また、RSSには集計期間は記載されていないので出力出来ません(これはhtmlから引っ張ったサンプルです))
注意点
MiniBrowserはソースの情報が更新されても自動でリロードするという機能が存在しないので、MeterMathあたりを使って一定間隔でリロードさせる(ここのオートクローズの応用)とか、更新されるテキストを監視させてリロード、あるいは<meta http-equiv="Refresh" content="更新時間">のようなmetaタグを付加してやる必要があります(単位は秒)。自身の環境で効率のいい方法を考えてみてください。
MiniBrowserはSamurize上にInternetExplorerを呼びだして表示しているだけなので、右クリックメニュー等はIEのものがそのまま使われます。
また、普通のウィンドウなので、Samurize側で該当のクライアントを「デスクトップに貼り付け」としてもMiniBrowser部の動作は「通常のウィンドウと同じ動作」で、クリックするとMiniBrowser部だけ最前面に来ます。
この仕様により、サンプルのように疑似透過を使って「デスクトップに貼り付け」をするとかなり美しくない動作をすることが多いので、台座を敷いて「通常のウィンドウと同じ動作」で纏めた方が崩れづらいと思います。
htmlのデザインを考える時、確認はIE上か直接MiniBrowser上で行ってください。Firefoxなどだと指定しても無視されるタグがあります。無視されるタグはだいたい標準規格に非準拠なので、本来なら使用を避けるべきですが、今回はどうせローカルでしか使わないのでIE上で動けばオッケーです。
普通の設定ではMiniBrowser内のリンクをクリックするとMiniBrowser内で開いてしまいますので、今回のような用途の場合は<a>内にtarget="_blank"を付けた方がいいかと思います。新規ウィンドウで開きます。
PageScraperの設定画面、3の部分で普通に改行を使うと最後の出力で%bとして出力される仕様です。当然html上では改行として認識しませんし、邪魔なので使用しないでください。ちなみにhtmlの改行は<br>です。また、Advanced OptionsのPrefix/Suffixにこの制限はありません。
改行などが許されない関係で、見た目上、鰻の寝床のように横に長い表記になります。複雑なものを作ろうとすると可読性も重要になってくるので、デザインを考える時はテキストエディタ上で土台を構成した方がいいかもしれません。
応用編 
応用編では先に述べたように2バイト文字が文字化けするようなページから取得する方法を解説していきます。
個人的にデスクトップにあると便利な情報を見つけたけどRSSが提供されていなかった、PageScraperだと化けたので諦めた…なんて人は是非。
ただ最低限コマンドラインオプションの使い方が分からないとちょっと厳しいかも知れません。
やることを簡単に説明すると、表示したい部分を含むhtmlをローカルに取得し、コマンドラインから文字エンコーディングをShift-JISに変更して出力、それをPageScraperで拾って成形して画面上に表示という形になります。
コマンドラインでhtml取得 
探せば同様の機能を持つツールは結構あると思うのですが、今回はwgetを使います。
こちら
が本家サイトなのですが、ここからバイナリ落とすとSSL関係のライブラリが足りないようなので、この辺
からwgetを入手して適当な場所に展開します。ページの上の方でIf you don't know which version to getと書かれたリンクからです。
インストール場所はどこでもいいのですが、以下の説明ではC:\Program Files\wget\に入れたものとして解説しています。以上インストール終わり。
SamurizeのConfigを起動して、「メーターの追加」→「コンソールプログラム」でメーターを追加し、
「情報」タブの「コマンドライン」にごりごりコマンドを書きます。wgetのコマンドラインオプションに関してはこの辺
に書かれていますので、興味を持たれた方は読んでみてください。
さて、コマンドの書き方ですが、通常こんな感じになります。
"wget.exeのPath" 取得したいURL -O "html出力先のPath"
具体的な例を挙げてみましょう。例えばニコニコ動画の毎時ランキング(マイリスト)
をRSSに頼らずに取得しようとするとこうなります。
"C:\Program files\wget\wget.exe" http://www.nicovideo.jp/ranking/mylist/hourly/all -O "C:\Program files\wget\niconico.html"
(今回はwgetをインストールしたフォルダにniconico.htmlとして保存していますが、出力先はどこでも構いません。扱いやすいところを選んでください)
完了したら「情報」タブの「テスト」を押してください。さて、どうでしょうか? 指定したフォルダに意図したとおりのhtmlが作成されたでしょうか?
出来ていればこの項目は終了です。お疲れ様でした。
出来なかった場合、コマンドラインに記入したコマンドが間違っている可能性が最も高いと思うのでよく確認してください。SamurizeのConfig上では見にくいので、適当なテキストエディタにコピペしてミスがないか確認する方がいいと思います。
プログラムの実行間隔ですが、ちょっと事情もあるので後述します。 以下余談。
コマンドラインにPathを記述する際、そのPathに半角スペースが含まれる場合はPath全体をダブルクォーテーション(")で括る作業が必須になっています。
何故かというと、例えばC:\Program files\hoge\hoge.exeに/Aみたいなオプションを付けて実行しようとする場合、普通にC:\Program files\hoge\hoge.exe /Aという記述だと半角スペースで区切られてしまい、C:\Program files\hoge\hoge.exe /Aのような構成と誤認してしまうためです。
こういう時は"C:\Program files\hoge\hoge.exe" /Aのように記述しましょう。
半角スペースが含まれない場合に""で括っても特に動作に支障はないので、いっそ常にダブルクォーテーションで括ると覚えてしまってもいいかもしれません。VBS上だとまたちょっと違ったりします。
コマンドラインで文字コード変換 
これも類似ツールは探せば他にあると思いますが、検索したら出てきたCharset Convererを使います。
こちら
からCharset Convererをダウンロードして展開して適当な場所に配置。以上です。
相変わらずインストール場所はどこでもいいですが、ここではC:\Program Files\Charset Converter\にインストールしたものとします。
多分大体インストール済みだと思うのですが、動作にMFC42.dllを必要とするので、必要な方はこのあたり
からダウンロードしてインストールしてください。
先ほど同様に「メーターの追加」→「コンソールプログラム」でメーターを追加し、「情報」タブの「コマンドライン」にごりごりコマンドを書きます。
基本的な書式は
"csconv.exeのPath" "変換元のhtmlがあるPath" -S変換元htmlの文字コード -O変換後htmlの文字コード -Auto -ROFF -NCRLF -F"変換後htmlの出力先Path"
取得してあるニコニコ動画の毎時ランキング(マイリスト)の文字コードをUTF-8からS-JISに変換するならこうなります。
"C:\Program Files\Charset Converter\csconv.exe" "C:\Program files\wget\niconico.html" -SUTF-8 -OShift_JIS -Auto -ROFF -NCRLF -F"C:\Program files\wget\niconico_sjis.html"
(今回はwgetをインストールしたフォルダにniconico_sjis.htmlとして出力。実際はどこでも構わないです)
完了したら「情報」タブの「テスト」を押してください。指定したフォルダに意図したとおりのniconico_sjis.htmlが作成されたでしょうか?
出来ていればこの項目は終了です。お疲れ様でした。失敗した場合はコマンドを確認してください。
とりあえず気づいた限りですが、Charset Converterは指定した変換元のhtmlがない場合と、コマンドラインに変な文字列が入っている場合、実行時にVC++のRuntime Errorが出ます。気をつけてください。
サンプル以外で使用する時に詰まるとすれば、-S使用時の変換元htmlの文字コードの選択だと思います。 ソースを見て間違わないようにしてください。文字コードによって-SShift_JIS, -SEUC-JP, -SISO-2022-JP, -SUnicode, -SUTF-8のいずれかを指定します(このうちS-JISの場合は先述の通りwgetとCharset Converterを使用する必要はないので、使う機会はないと思いますが)。
実行間隔に関しては先と同様に後述します。
PageScraperで成形する 
これは基礎編で解説したとおりです。PageScraperの機能解説を参考にMatchやFilterを設定してください。
もちろんソースにはCharset ConverterでShift-JISに変換したhtml(サンプルで言うところのniconico_sjis.html)を指定すること。以上。
更新時間 
さて、保留してきたプログラムの実行間隔について解説します。
今回、二つの外部プログラムと一つのプラグインで(半ば無理矢理)機能を実装したわけですが、それゆえ非常にプログラム間の連携が悪いです。特に起動時。
どういうことかというと、例えばwgetを30分間隔で実行、Charset Converterを…まぁ15分間隔で実行としましょうか。PageScraperは今回ローカルから情報を引っ張っているので、1分と設定したとします。
これらを一つのClient上で扱うとなると、遅延起動が噛ませないのでClient起動時は同時にスタートするわけです。こうなるとネットから情報を取得する必要のあるwgetは完了が必ず遅れ、htmlを取得した時にはCharset Converterは既に動作を終えてしまっているため、古いhtmlの情報を変換してしまうことになります。
(追記:というか、おそらくそれ以前の問題で、wgetでページ取得中にCharset Converterを動かすと、目的のhtmlが存在しない扱いとなってしまい、かなりの確率でCharset Converter実行時にエラーを吐くと思います)
そんな感じでいろいろ問題があるので、ここは一つvbsを使って、指定したプログラムを連続で動作させ、合間に遅延を噛ますバッチ処理をさせることにしましょう。
こんな感じです。
Dim WShell
Set WShell = WSCript.CreateObject("WScript.Shell")
WShell.Run """C:\Program Files\wget\wget.exe"" http://www.nicovideo.jp/ranking/mylist/hourly/all -O ""C:\Program Files\wget\niconico.html""",0
WScript.sleep(1000)
WShell.Run """C:\Program Files\Charset Converter\csconv.exe"" ""C:\Program Files\wget\niconico.html"" -SUTF-8 -OShift_JIS -NCRLF -F""C:\Program Files\wget\niconico_sjis.html"" -Auto -ROFF",0
WScript.Quit
これをコピーしてメモ帳に貼り付け、適当な場所にniconico_batch.vbsとでもして保存します。
とりあえず今回は例としてC:\Program Files\Samurize\Scripts\niconico_batch.vbsとしたことにします。
iniを構築していきます。
- Configを起動する。先の続きから始める場合で、既にwgetとCharset Converterを動かすメーターがある場合はまず削除すること。
- 「メーターの追加」→「コンソールプログラム」で新規にメーターを作成する。
「情報」タブの「コマンドライン」にwscript "C:\Program Files\Samurize\Scripts\niconico_batch.vbs"と記入。「実行間隔」は…とりあえず30分としておく。
頻繁に更新されないページから取得する場合は、より長い間隔を設定すること。相手サーバの負担になるので極端に短い時間を設定しないこと。 - 「メーターの追加」→「プラグイン」でPageScraperのメーターを作成する。既にある場合はそれを利用する。
設定からAdvanced Optionsを開き、Update every xxx secondsを設定する。今回は取得先がローカルなので、どれだけ早くても問題ない。気が短い人は一秒設定でも構わないが、そこそこ負荷がかかるので適当な時間を各自で見つけて欲しい。
以上です。さすがにプラグインとの連携は難しいですが(vbsをPageScraperと別個のクライアントに配置して、バッチの最後にclient.exe reloadを実行させるって手もありますけど)、これで起動時でもだいぶスムーズになると思います。
バッチ処理で使ったvbsの記述に関してですが、WShell.Runの行で実行するアプリケーションとコマンドラインオプションを指定しています。これは全体が""で括られる必要があります。また括られた内部で使用するPathに半角スペースが存在する場合、そのPathを""C:\Program Files\Charset Converter\csconv.exe""のように、""""で括る必要があることを覚えておいてください。サンプルを見れば分かると思います。
また、WScript.sleep(1000)はプログラム実行後1000ミリ秒(=1秒)停止して次に移行するという意味です。ネットワークの状況により、1000ミリ秒ではウェイトが足りない可能性もありますので、各自の環境に合わせて改変してください。
WShell.RunとWScript.sleepを重ねていけば、2つ以上のアプリを連続起動させることも可能です。
取得先が複数ある場合、一つのvbsにまとめて記述する方がいいと思います。
ここではコンソールプログラムのメーターを使って一定間隔でvbsを動作させていますが、サイトの更新時間がランダムではなく、ある程度決まっているような場合、日付と時刻のメーターでnnで分を表示させ、毎時更新されるタイミングのあたりを付けて通知機能を設定し、決まった時間にvbsを実行させる方がいいかもしれません。
補記 
- PageScraperは出力の際に、改行コードを常に%bとして出力する仕様になっています。
そのため出力結果に妙に%bが多く、Samurize上で表示させてみると行が空くという場合は、 [Match]で設定して切り出した情報の中に(見えないけど)改行コードが含まれているせいだと思われます。 こういう場合は、該当している[Match]を見つけて、FilterでTrim WhitespaceやRemove Whitespaceを適用してください。
- 応用編ではPageScraperをサブ的に扱ったため、更新間隔をどれだけ短くしても特に問題は出ないと思いますが、基礎編のようにメインで使用する場合は情報を拾いに行く更新間隔に気を遣ってください。デフォルトだと600秒間隔ですが、よほど規模の大きいニュースサイトならともかく、個人サイトや混雑するサイトの場合はもっと長目に取った方がいいと思います。
wgetやPageScraperはやり方によってはファイル収集ツールとしても使えたりしますが、この手の自動化は見つかると大抵アク禁処分食らうと思います。
- サンプルのニコニコ動画では特に指定しなくても問題はありませんが、google news
のように、User-Agent(ごく簡単に説明すると使用しているブラウザ)がwgetだと弾かれるようなページもたまにあります。この場合wget実行時に
--user-agent="使用したいUA"
のようなオプションを付け、適当なUAを指定してください(参考
)。
また、同様にリファラ(どこのページから来たか)を見て弾くようなページの場合、
--referer="使用したいリファラ"
を付けることで、指定したリファラを渡します。
- 同梱されていたPageScraperのヘルプは、動作には別になくても困りませんがかなり役に立つことが書かれています(画像に連番を含むURLから範囲を指定してランダムに表示させる方法とか)。
今回の解説では適当に流した部分もかなり多いので(Advanced Optionsの各項目とか)、余裕がある時やこのWikiで解決出来なかった事例にぶち当たった時は目を通してみると、なにかの糸口になるかも知れません。
- 画像のURLを取得させて、表示タイプを画像にすることでネットから画像を取得して表示させることが出来ます。ローカルフォルダにダウンロードさせることも可能です。天気図なんか取得する時にそこそこ便利だと思います。
後書き 
解説は以上です。使用したプラグイン、スクリプト、外部プログラムの制作者様、並びにここまで読み進めていただいた方に感謝を。また、改稿前の記事を信じて無駄な手順を踏んでしまった方、本当に申し訳ありませんでした。
もしなにか表記ミスなどに気づいた、あるいは新たなテクニックを発見した方は追記なり修正なりをお願いします。面白いiniなど作成された方、良かったら公開してみてください。
Attach file:










