ブラウザの履歴データベースのテキスト入出力コマンド

Copyright (C) 1999,2000 Taiji Yamada <taiji@aihara.co.jp>

ブラウザの履歴データベースのテキスト出力コマンド

UNIX の Netscape の履歴データベースファイルって ~/.netscape/history.db または ~/.netscape/history.dat にありますが、これはバイナリファイルなので more とか less とかで見てもよくわかりません。Communicator の「履歴」ウィンドウでその内容は見れますが、やはりテキストで grep とかかけたい時があると思います。例えば、「あそこのサイト、ブックマークしとくの忘れた!」とか、「自分、Linux 関係のページって今までどのぐらい見たんだろう」とかとか。

そこで、Netscape の履歴データベースから「タイトル」と「URL」を抽出し、テキストに吐き出すコマンド history-db-list を作成しました。

以下のようにすると、標準出力に一行毎に「URL[TAB]TITLE」の形式で出力されます。

また、以下のように "-a" オプションを付けると、最終閲覧日時、初閲覧日時、エクスパイア日時、アクセス回数の属性、"-T" オプションを付けると無題の URL を含めてすべて表示します。 また、HTML 形式で出力するスクリプト show-history.pl も作成しました。 これは内部で history-db-list を使っています。

但し、show-history.pl が生成した HTML は人によっては非常に大きくなるので、Netscape のブラウザで見るには辛いかもしれません。そこで、以下のような使い方を用意しました。

これで、履歴の中の Linux に関する URL がブラウザで閲覧できます。

また、show-history.plshow-history.cgi というファイル名にしたとして、HTTP 経由での利用も考慮してあります。その場合、以下の URL のような使い方になると思います。

但し、そもそも ~/.netscape/history.dat はオーナー以外は読み込み許可がされてませんし、~/.netscape もオーナー以外は入れませんので、HTTP 経由の使用はセキュリティやプライバシーを十分検討した上で運用しない場合は推奨できません。

テキスト入力による、ブラウザの履歴データベース作成及び追加コマンド

上記の履歴データベースが生成したテキストを標準入力から読み込んで、指定したデータベースファイルに書き込むコマンド history-db-write も作成しました。例えば、以下のように使用します。 ここで "./history.dat" は作成されるデータベースファイルです。また、history-db-list"-a" オプションは必須です。また、既にあるデータベースにエントリを追加する場合は、以下のようにアペンドオプション "-A" を指定します。 但し、SPARC プロセッサや Pentium プロセッサなど異機種間で history.dat を変換もしくはマージする場合、ビッグエンディアン、リトルエンディアンの問題で、最終閲覧日時、初閲覧日時、エクスパイア日時、アクセス回数の属性が正しく表示されない場合があります。そのような場合、history-db-list もしくは history-db-write"-C" オプションを付加してエンディアン変換を行うことが出来ます。これについては、次節の Solaris における Communicator 4.0x から 4.5x へのアップグレードの際の活用例を参考にして下さい。

Applications

history-db-list, history-db-write の応用例を紹介します。

Solaris における Communicator 4.0x から 4.5x へのアップグレードの際の活用例

SPARC の Solaris で Communicator 4.5x を使うと Navigator 3.x の頃から使われていた history.db は使用しなくなり、新たに history.dat という履歴データベースファイルが使用されます。よって、そのままでは Communicator 4.5x では過去の履歴を継承できません。しかし、データベースファイルの形式が抜本的に変更されているわけではなく、実は、history.dat ではリトルエンディアンのファイル形式に変更されているだけです。よって、history-db-listhistory-db-write を使って、history.dbhistory.dat 形式に変換することが出来ます。例えば、以下のようにします。
% cd ~/tmp
% history-db-list -a -T ~/.netscape/history.db | sort > history-db.all
% history-db-write -C history.dat < history-db.all
"-C" オプションは、エンディアンのタイプを変更する為のオプションです。カレントディレクトリに新規作成された history.dat~/.netscape/history.db から変換されたデータベースファイルです。念の為、以下のように確認するといいと思います。日付などがおかしな値になっていないことを確認して下さい。
% history-db-list -a -T -C history.dat | sort | less
さらに、既に Communicator 4.5x を運用していて ~/.netscape/history.dat が既に作成されている方は、以下のようにしてデータベースをマージすることも出来ます。
% history-db-list -a -T -C ~/.netscape/history.dat | sort > history-dat.all
% history-db-write -C -A history.dat < history-dat.all
"-A" はデータベースに追加する場合に指定する為のオプションです。これを付けないと history-db-write は、常に新規のデータベースを作成します。やはりマージされたデータベースを、以下のように確認するのがいいかと思います。
% history-db-list -a -T -C history.dat | sort | less
データベースファイル history.dat が正しく作成されたら、以下のように ~/.netscape に移動します。
% mv ~/.netscape/history.db ~/.netscape/history.db.org
% mv history.dat ~/.netscape/history.dat

データベースファイルのダイエット

データベースファイルがあまり大きくなり過ぎると、Communicator 自体の速度も遅くなってきます。履歴の自動消去機能で、ある程度はそれほど大きくならないように出来ますが、そもそも履歴データベースには「タイトルが無く、残っていても活用できない URL」や「Navigator 3.x」の頃から残ってしまっているゴミ、「404 Not Found の URL」などがあります。これらを削除すれば、データベースファイルを相当ダイエットすることが出来ます。以下は、そのダイエットの例です。
% history-db-list -a ~/.netscape/history.dat | \
grep -v 'Bad Request'| \
grep -v 'Authorization Required'| \
grep -v 'Forbidden'| \
grep -v '[nN]ot [fF]ound'| \
grep -v 'Internal Server Error'| \
grep -v 'Error [45]0[0-9]' | \
grep -v '\(GIF\|PNG\|JPEG\) 画像 .* \(ピクセル\|ドット\)' | \
sort > history-list.all
% history-db-write ./history.dat < history-list.all
この例では、history-db-list"-T" オプションを付けていないので無題の URL は無条件に出力しておらず、さらに、'grep -v' で不要そうな URL を除外しています。およそ経験的に3分の1のサイズになります。そして netscape が軽くなります。

EBW3 への応用例

作者は ebw3 という CD-ROM 辞書サーバを使って英単語を調べているのですが、Netscape の履歴データベースから「一度は調べたことのある、自分だけの英単語帳」というのを作ることが可能です。そのためのスクリプト show-history-ebw3-result.plshow-history.pl を元に作成し、以下のように使っています。 ちなみにここで、history-db-list"-a" オプションは、最終閲覧日時、初閲覧日時、エクスパイア日時、アクセス回数の情報を付加するためのもので、必ずしも必要ではありません。

このようにすると今まで調べたことのある英単語についての自分だけの辞書が、下図のように作成されます。

show-history-ebw3-result.pl サンプル画面

また、以下のようにすると指定した日時以降に調べた英単語のみの辞書を作成します。この場合は、上記で示した history-db-list には "-a" オプションが必須です。

他にもいろいろと応用が考えられると思います。

Problems

Netscape の history.db のフォーマットについて良く知って作成したわけではないので、破壊されている URL を表示することがあります。調べ次第、修正しますが、詳しい方がいらっしゃいましたら教えて下されば幸いです。この問題はバージョン 0.4 より解決しています。

History & distributions


このサイトに関するご意見ご要望は taiji@aihara.co.jp までお願いします。

Copyright (C) 1999 Taiji Yamada, All rights reserved.