ブックマークをサルベージした件 @Firefox
これの最中にミスって、直近でブックマークしたやつが消えちまってるのに気が付いた。
ブックマークの自動保存されたやつで戻すという手はある(保存期間の15日間には入ってる)のだけれど、moz_places を直接いじったりしてるので、ちょっと不安がある。
幸いにして、ブックマークツールバーの表示が消えてしまった直後の places.sqlite は取ってあったので、そこからサルベージしたよ、というお話。
最近、ブックマークした URL を抽出する
moz_bookmarks.dateAdded は、unix でよく使われる 1970年1月1日からの相対時刻。単位はマイクロ秒。
一方、SQLite には時刻型がないけれど、時刻を扱う関数が用意されている。
相対時刻で使えそうなのがこれ。
A time string can be in any of the following formats:
SQLite Query Language: Date And Time Functions
...
12. DDDDDDDDDD
...
Format 12 is the Julian day number expressed as a floating point value.
Julian day number というのは、紀元前4713年1月1日からの相対日らしい。
Unix 時刻への換算式がこちら。
Unix Time
Julian day - Wikipedia, the free encyclopedia
(JD - 2440587.5) × 86400
例えば、2月25日以降を絞り込む条件はこう書ける。
strftime('%Y-%m-%d',dateAdded/1000/1000/86400+2440587.5) >= '2016-02-25'
moz_bookmarks だけだと URL が分からないので、moz_places と join する。
select * from moz_bookmarks left join moz_places on moz_bookmarks.fk = moz_places.id where strftime('%Y-%m-%d',dateAdded/1000/1000/86400+2440587.5) >= '2016-02-25' order by dateAdded desc
ブックマークの復元
後は手作業。
復元に必要な列だけに絞り込む。
select strftime('%Y-%m-%d %H:%M',dateAdded/1000.0/1000/86400+2440587.5) as DATE, moz_bookmarks.title, moz_places.url from moz_bookmarks left join moz_places on moz_bookmarks.fk = moz_places.id where strftime('%Y-%m-%d',dateAdded/1000/1000/86400+2440587.5) >= '2016-02-25' order by dateAdded desc
この結果とブックマークを見比べて、ブックマークされていないものを Firefox でアクセスしてブックマーク。
フォルダ階層も何とか追える。
moz_bookmarks.parent は moz_bookmarks.id を指している。
moz_bookmarks.type = 2 がフォルダか。
Excel へエクスポート
DB Browser for SQLite の「Execute SQL」タブで実行した結果は、メッセージ領域の右側にあるアイコンから「Export to CSV」で、CSV ファイルに保存できる。
Excel の日時は、1900年1月0日からの相対日(浮動小数点)。
moz_bookmarks.dateAdded の値は、マイクロ秒を日に換算して、1970-1-1 と 1900-1-0 の差分を足してあげると、Excel で登録日付が分かる。
=I2/1000/1000/60/60/24+25569
「セルの書式設定」の「表示形式」から、日時を表すような "yyyy/m/d hh:mm" なんかを指定。
前にも書いたけど
やはり、プロファイルのバックアップは取っておくべき。