firefoxで表示したウェブページの履歴はプロファイルのplaces.sqliteに保存されている。しかし、デフォルト設定では180日前以上の履歴は消去される。おそらくパフォーマンス上の理由かプライバシー上の理由なんだろう。
しかし、表示ページの履歴は過去の自分の興味関心を表す、言わば日記のようなデータなので出来れば残して起きたい。昔によく見ていたウェブサイトとかわかったら懐かしくて面白そうだ。places.sqliteは単なるsqliteデータベースファイルなので簡単にデータをエクスポートできる。以下のpythonスクリプトは履歴(タイトル、URL、タイムスタンプ、description)をCSVとして表示するサンプル。
#!/usr/bin/env python3
import sqlite3
from pathlib import Path
from io import StringIO
import csv
import argparse
def get_profile_history(profile_dir, min_time):
profile = Path(profile_dir)
db = profile / 'places.sqlite'
connection = sqlite3.connect(db)
connection.row_factory = sqlite3.Row
cur = connection.cursor()
query = """
SELECT
moz_historyvisits.visit_date AS visit_date,
moz_places.url AS url,
moz_places.title AS title,
moz_places.description AS description
FROM
'moz_historyvisits'
LEFT OUTER JOIN
moz_places
ON moz_historyvisits.place_id = moz_places.id
WHERE
visit_date > ?
"""
cur.execute(query, (min_time,))
return cur
def row2csv(d):
fieldnames = ('title', 'url', 'description', 'visit_date')
with StringIO(newline='') as s:
writer = csv.DictWriter(s, fieldnames=fieldnames)
writer.writeheader()
for h in d:
writer.writerow(dict(h))
return s.getvalue()
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument('profile_dir', help='path to firefox profile')
parser.add_argument('min_time', help='min microsec timestamp', default=0)
return parser.parse_args()
if __name__ == '__main__':
args = vars(get_args())
history = get_profile_history(**args)
print(row2csv(history))
数年後とかに、「ああ、このサイトよく見てたなぁ」とか思いたい。