Firefox で指定範囲日の履歴データを CSV でエクスポートする
最初は履歴管理画面からコピペで行けるかと思っていたが、これだと URL しかコピーされなくてダメ。結局 Firefox の設定ファイル(sqliteファイル)から直接吸い出すことに。
- 前提
- アプローチ
- 1: SQLite3 を入手する
- 2: Firefox の履歴データファイルを見つける
- 3: 取得したい範囲を Unixtime で表す
- 4: SQLite3 コマンドを叩いてエクスポートする
- お疲れ様でした
- (2019/05/17 追記) スクリプト書きました
前提
必須:
- 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 スクリプトを書いてみました。
毎日履歴を取って記録すれば日記になることから History + Diary → Distory と名付けてみました。