UrlCmd


はじめに

WEB ページを徘徊していると、「この間見たあのページに行きたい」と思うことが 多々あります。 んで、google とかで記憶を頼りにキーワード打ち込んで見てもノイズが多くて なかなか辿り着けませんし、履歴機能を使うというのも、 見たのが昔なら昔程むずかしくなります。

ブックマーク (お気に入り) を使うという手もありますが、 「あっこれはいい情報だな」と思ったものをすべて登録すると、 登録数が増えて結局同じ結果になってしまいます。 そもそも別の PC では情報を取り出せなくなるし...

なんか「 squid の cache を namazu で検索」のイントロと同じですね...

で、どうしたいかというと、やはり namazu でしょう。 WEB を散策していて、「あっこのページいいなぁ、後で役立つかも」と思ったら、 そのページを保存して namazu の検索対象にしたいものです。

ところが、もろもろの事情で私は Microsoft Internet Explorer (IE) を使っているのですが、こいつの保存機能は、 デフォルトのファイル名がタイトルになってしまい namazu には適しません。 例えば本ページの場合、"UrlCmd.html" になってしまいます。 "..../homepage3.nifty.com/ysenta/product/urlcmd/urlcmd.html" と保存したいのに...

しかたないので、URL をコピーして httpdown (最近は wget ですかね) に食わしていたのですがめんどうです。 「ボタン一発でなんとかならんか」と思って作って見たのがこれです。

使い方

一式ははこいつです。 展開すると UrlCommand というディレクトリの下に三つの ファイルがころがっています。 ディレクトリごと適当な所にコピーし (例えば D:/tools) urlcmd.exe を実行してください。すると次のようなダイアログが現れます。

実行コマンドの中に例えば

d:\tools\urlcommand\urlget $U D:\Pages\$u
とでも書いて、[追加]ボタンを押してください。

IE を開いて右ボタンを押すと "URL Command" というメニューが出てきます。 保存したいページでこの URL Command を実行すると、上記のようなファイル名で 保存されるようになりますので、後は煮るなり焼くなり自由にしてください。

ちなみにアンインストールは上記ダイアログで[削除]ボタンを押した後、 UrlCommand ディレクトリを削除します。

あっ実行には administrator の権限が必要です。 それから動作確認は Xp-Pro でしか行っていませんので、 他の Windows ではどうなるか知りません。

実行コマンドについて

実行コマンドですが、要は現在表示している URL を展開して プログラムを呼び出しているだけです。本ページの場合

が入ってます。ので、上記の
d:\tools\urlcommand\urlget $U D:\Pages\$u
d:\tools\urlcommand\urlget http://homepage3.nifty.com/ysenta/product/urlcmd/urlcmd.html D:\Pages\homepage3.nifty.com/ysenta/product/urlcmd/urlcmd.html
というコマンドに展開され実行されることになります。

この urlget ですが、WEB サーバで公開しているファイルを取得するもので、 書式は見れば分かるように

urlget < URL > < 保存位置 >
という感じです。

ちなみにこいつは 「こういう物を公開する際に『wget を別途インストールしてね』と言うと 敷居が高くなるだろう」と考え、おまけで作ってつけたものです。 機能的にはいろいろ問題があるのですが、それらに対応すると wget そのものを作ることになりそうなので、この程度にとどめています。 本格的に使う方は、 wget などきちんとしたツールを使うことを薦めます (potate や webcopy でも可)。

なお、こういうきちんとしたツールの場合、再帰的にページを取得することが できますが、貪欲に取得するとサーバやネットワークに負荷がかかりますので、 設定はほどほどにしてください。

プログラムについて

要はレジストリの HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt をいじると、IE にメニューが追加され、任意の Java スクリプトが実行 できるというしくみを利用しています。

本来は Java スクリプトで完結してファイルを保存したかったのですが、 なにぶん Java は今回初めて触ったもんで、 ファイルをオープンして保存する方法が分かりませんでした。 セキュリティの観点からファイルオープンはできないのかもしれないですが、 ネットワークゲームなど Java でソケットオープンして そうなのを見るとなんか手はありそうな気もしますけど。

という訳でちょっとセコい手を使いました。 IE ではレジストリをいじると IE だけ解釈できるスキーム (http: とか ftp: とか mailto: とか URL の頭のこと) を新たに定義し、 その URL をクリックすると任意のプログラムが実行できます。 そこでこの機能を使ってプログラムを呼び出し、 そのプログラムでファイルをオープンして保存しています。

具体的には

  1. IE でメニューを選択
  2. Java スクリプト起動 (urlcmd.html)
  3. 現在表示中の URL を取得して、スキーム (UrlCmd:) を付けてオープンする
  4. すると UrlCmd: に関連付けられたプログラム (callcmd.exe) が起動する
  5. callcmd では引数から URL を取得し、実行コマンドの中の $U, $u に当てはめ、 システム関数で実行する
  6. すると urlget.exe (もしくは同様のソフト) が呼ばれファイルを取得する
という非常にまどろっこしい手順を踏んでいます。

なおこのしくみは、 もしどこかのページに <A HREF="UrlCmd:...." というリンクが存在し、 それをクリックした場合、callcmd.exe が実行されてしまいます。 そこで勝手にページをダウンロードされては困るので、念のため 32bit のキーワードを用意し、それが一致しなければ動かないようにしています。

本当はこんなまどろっこしいことせずに、ツールバーの拡張とかすれば いいんでしょうが、めんどうくさいし、見た目は悪いけど 一応目的は達するからとほっといてます。

Namazu の設定

これは、あんまりとやかく書いてもしかたないでしょうから簡潔に 私の利用法を書くにとどめます。

私の場合ですが samba で L ドライブが apatch が入った Linux マシンになってます。 そして、L:/htdocs 以下が LAN 上から web ページとして見ることができます。

そこで L:/htdocs/PageCopy/Pages の下にページを収集し、さらに L:/htdocs/PageCopy/NamazuIndex と L:/htdocs/PageCopy/NamazuBin というディレクトリを掘り、 NamazuBin の下には Index を "../NamazuIndex" に、 Replace を "/L\|/htdocs/PageCopy/Pages http:/" に書き換えた .namazurc と namazu.cgi を置いています。

一方 NamazuIndex ですが、適度にページを溜め込んだ間隔で

mknmz -O L:/htdocs/PageCopy/NamazuIndex  L:/htdocs/PageCopy/Pages
と書かれたバッチファイルを実行し、インデックスを作ってます。

分からない方は この辺この辺 でも見て調べてください。


追記


[戻る]