Firefox で指定範囲日の履歴データを CSV でエクスポートする

最初は履歴管理画面からコピペで行けるかと思っていたが、これだと URL しかコピーされなくてダメ。結局 Firefox の設定ファイル(sqliteファイル)から直接吸い出すことに。

前提

必須:

  • Windows 10
  • Firefox 66.0.5

任意:

  • Python 3.6.3
    • Unixtime 変換時に使ってます
    • 別の手段で変換しても良いです

アプローチ

SQLite3 コマンドを使って Firefox の履歴データ places.sqlite から直接履歴データを取り出す。ただし履歴データの日付時刻が Unixtime マイクロ秒なので、WHERE 句ではこれを指定する必要がある。

1: SQLite3 を入手する

SQLite Download Page から sqlite-tools-win32-x86-3280000.zip などをゲット。

展開すると sqlite3.exe がある。これを使う。パスを通すなり作業フォルダに配置するなり。

2: Firefox の履歴データファイルを見つける

これ。

%appdata%\Mozilla\Firefox\Profiles\XXXXXXXX.YYYYYY\places.sqlite

XXXXXXXX.YYYYYY 部分はプロファイル名。

3: 取得したい範囲を Unixtime で表す

履歴データの日付時刻が Unixtime 表記なので頑張って変換しないといけない。本記事では以下 Python でやる。最悪 Unixtime相互変換ツール - konisimple tools のようなウェブツールもある。

例: 2019/04/12~2019/04/13 を取得したい場合、以下のように変換する。

  • Step1. Unixtime に変換する
    • 2019/04/12 00:00:00 → 1554994800
    • 2019/04/13 00:00:00 → 1555081200
  • Step2. 単位を揃える(マイクロ秒にする)
    • 0 を 6 個つける
    • 1554994800 → 1554994800000000
    • 1555081200 → 1555081200000000

肝心の変換方法は、以下スクリプトにて。date() のところに値を入れる感じ。

$ python -c "import time; import datetime; dt=datetime.date(2019,4,12); ut=time.mktime(dt.timetuple()); ret='{}000000'.format(int(ut));  print(ret);"
1554994800000000

(余談) Python スクリのもうちょっと読みやすいやつ

# -*- coding: utf-8 -*-

import time
import datetime

a_dt = datetime.date(2019,4,12)
a_ut = time.mktime(a_dt.timetuple())
ret = '{}000000'.format(int(a_ut))
print(ret)

参考: Convert datetime to Unix timestamp and convert it back in python - Stack Overflow

4: SQLite3 コマンドを叩いてエクスポートする

この手順 4: を実行する前に Firefox を終了しておくこと(そうしないとデータベースの処理が競合してエラーが出るかも ← まだ試してないのでわかりません)。または places.sqlite を作業フォルダにコピーして、コピーした方を使うこと。私は後者のコピーの方で試している。

SQLite3 のコマンドはこんな感じ。

$ sqlite3 -readonly -csv places.sqlite "SELECT title,url,last_visit_date FROM moz_places WHERE last_visit_date BETWEEN 1554994800000000 AND 1555081200000000;" > history_betwee_190412_190413.csv

注意点など:

  • places.sqlite のパスは適宜修正
  • BETWEEN 1554994800000000 AND 1555081200000000; には 3: の Unixtime マイクロ秒を指定
  • > history_betwee_190412_190413.csv は適当に出力ファイル名を指定

参考: Firefoxでの閲覧履歴をCSV形式でエクスポート - Qiita

お疲れ様でした

これで以下のような CSV ファイルがエクスポートされるはず。

"Title1",URL1,1555020329870000
"Title2",URL2,1555020463990000
...

ちなみに places.sqlite-shm と places.sqlite-wal が生成されるが、ジャーナルモードという機能みたい。そういう仕様なので気にしなくて良い。気になるようなら下記あたりを読んで勉強。

参考: Pragma statements supported by SQLite

(2019/05/17 追記) スクリプト書きました

指定日の履歴データを取ってくる Python スクリプトを書いてみました。

github.com

毎日履歴を取って記録すれば日記になることから History + Diary → Distory と名付けてみました。