Google Chrome/Chromium/Braveの履歴のタイムスタンプ形式を調べて1日分の履歴を手に入れる

たまに以前ウェブで見た情報が欲しくなることがあります．履歴に残っていればいいけど消えてしまっているかも．ウェブブラウザのアクセス履歴のタイトルとURLだけでもテキストファイルに残しておくと便利かもしれません．

履歴はHistoryファイルをsqlite3で叩くと取れるのですが，タイムスタンプがよくあるUNIX timeでもなくとても大きな値です．

$ sqlite3 ~/.config/chromium/Default/History "SELECT \"[\" || group_concat(json_object('timestamp', last_visit_time, title, url)) || \"]\" FROM urls;" | jq . | grep timestamp | sort
-n | tail -1
"timestamp": 13256542361632384,

UNIX timeの例

$ date +%s
1612703645

検索するとこのようなページを見つけました．

WebKit/Chrome Timestamp Converter

This timestamp format is used in web browsers such as Apple Safari (WebKit), Google Chrome and Opera (Chromium/Blink). It’s a 64-bit value for microseconds since Jan 1, 1601 00:00 UTC. One microsecond is one-millionth of a second.

このTimestampはUTC 1601-01-01からのマイクロセカンド秒らしいです．試してみます．

まずはUNIX timeの1601-01-01からの秒数に10^6を掛けてUNIX timeとの差を求めます．(GNU coreutilsのdateって1970-01-01より前の時間も計算できるんだ!)

UTC 1601-01-01のUNIX time?に10^6

$ echo "$( date --utc --date 1601-01-01 +%s ) * 10^6" | bc
-11644473600000000

Chrome時間とUNIX timeの差を引いてUNIX timeに変換します．

$ echo "( 13256542361632384 -11644473600000000 ) / 1000000" | bc
1612068761

UNIX timeを人間が読めるように変換

$ date --date="@1612068761"
Sun 31 Jan 2021 01:52:41 PM JST

1行にまとめる

$ date --date="@`echo "(13256542361632384/10^6-11644473600)"|bc`"
Sun 31 Jan 2021 01:52:41 PM JST

逆に今の時間をChromeのtimestampに変換

$ echo "(`date +%s`+11644473600)*10^6" | bc
13257218080000000

1日前のChrome時間

$ echo "(`date -d '1day ago' +%s`+11644473600)*10^6" | bc
13257336413000000

ということで1日分Chrome/ChromiumのHistoryはこんな感じで取得できそうです．

$ sqlite3 /tmp/History "SELECT \"[\" || group_concat(json_object('timestamp', last_visit_time, title, url)) || \"]\" FROM urls WHERE last_visit_time >= $(((`date -d '1 day ago' +%s` +11644473600)*1000000));"

Note

該当プロファイルを利用中の場合このようなエラーになります．
Error: database is locked
ブラウザを終了するか，Historyファイルを適当な場所にコピーしてそちらを使います．
$ cp /home/matoken/.config/google-chrome/Default/History /tmp/

History ファイルは既定値ではこの辺にあります．

Chromium

~/.config/chromium/Default/History

Google Chrome

~/.config/google-chrome/Default/History

Brave Brouser

/.config/BraveSoftware/Brave-Browser/Default/History

既定値以外の場合はこんな感じで検索? ~/.config 以外にもできるけどその場合はパスがわかっていると思います．

$ find ~/.config/chromium/ ~/.config/google-chrome/ ~/.config/BraveSoftware/Brave-Browser -name History -print

Operaは買収されてから使っていないのですが，古いプロファイルを見るとこの辺のようです．現在は変わっている可能性があります．

Opera

~/.config/opera/History

Safariは環境がないので未確認ですがArchiveBoxのscriptを見ると既定値は恐らくこのあたりです．

Safari

~/Library/Safari/History.db

環境

$ dpkg-query -W bc google-chrome-stable chromium brave-browser coreutils sqlite3
bc 1.07.1-2+b2
brave-browser 1.19.92
chromium 88.0.4324.146-1
coreutils 8.32-4+b1
google-chrome-stable 88.0.4324.150-1
sqlite3 3.34.1-1