大半の人は同じ悩みを抱えているような気もしますが、ぼくのはてブのタグには、表記揺れが相当ある。 例えば、"programming" というタグと "programming" というタグがあったり、"nix" タグでまとめるはずだったのに "unix" タグがあったりと、タグで検索する度に「おれバカだなー」みたいに自分を責めてしまって HP が削られ続けるので、表記揺れを統一する方法がないかなと考えた。
最初に思いついたのは、はてなブックマーク AtomPub API を使用する方法で、そのために AtomPub の RFC を読みふけり、よっしゃーこれで華麗に WebService 化でもするかーみたいな夢物語を描いていたところ、そもそも自分のブックマークを総取得する API がない*1。 というわけで、それならば Firefox はてなブックマーク拡張でインストールされる sqlite のテーブルを直にいじってしまえば良いか、という結論に達した。ぼくの場合は、以下のファイルが対象になる。 -/Users/kiririmode/Library/Application Support/Firefox/Profiles/[Profile ID].kiririmode/hatenabookmark/kiririmode/bookmark.sqlite
ファイルに格納されてるテーブルのスキーマはこんなかんじ。
|sqlite| sqlite> .schema CREATE TABLE bookmarks ( id INTEGER PRIMARY KEY, place_id INTEGER, url TEXT UNIQUE NOT NULL, title TEXT, search TEXT, date INTEGER NOT NULL, last_visited INTEGER, comment TEXT ); CREATE TABLE tags ( id INTEGER PRIMARY KEY, bookmark_id INTEGER NOT NULL, name TEXT COLLATE NOCASE ); CREATE INDEX "bookmarks_date" ON "bookmarks" ("date" DESC); CREATE INDEX "bookmarks_date_asc" ON "bookmarks" ("date" ASC); ||<
ものは試しにと、bookmarks テーブルに直に UPDATE 文を発行してみたところ、オンライン側にも速攻で反映されたので、それなりに有望な手段のようだ。せっかくなので、Teng を使って表記揺れの検出と UPDATE をスクリプト化してみる。
*1:たぶん。FeedURI に対する GET リクエストでもできない…よね?