用途
browser-history 用于搜索用户的本地浏览器历史记录,帮助查找访问过的页面、分析浏览模式以及找回遗忘的信息。
适用场景包括:
- 用户询问访问过的页面(例如“我上周看了哪些 GitHub 仓库?”)
- 用户想找回遗忘的页面(例如“找到我读过的那篇关于 LLM 的文章”)
- 用户询问浏览习惯(例如“我在 Twitter 上花了多少时间?”)
- 用户想要浏览统计(例如“显示我最常访问的网站”)
主要能力
- 按关键词搜索历史记录(匹配 URL 或标题)
- 按日期范围搜索历史记录
- 分析在特定网站上花费的时间(Firefox 支持)
- 统计最常访问的网站
- 支持 Firefox 和 Chromium 两类浏览器数据库
使用方式
环境要求
需要 sqlite3 命令行工具。
设置
首先检测可用浏览器,运行:
./find-browser.sh
输出格式:PATH,TYPE,BROWSER,LAST_MODIFIED
- TYPE:firefox 或 chromium(决定 SQL 语法)
- 默认使用第一个结果(最近使用的浏览器)
- 如果最近 24 小时内有多个浏览器被使用,询问用户要搜索哪一个
查询数据库
在 SQLite URI 中使用 ?immutable=1,以便在浏览器打开时也能读取数据库:
sqlite3 "file:///path/to/history.db?immutable=1" "SELECT ..."
Firefox 数据库(places.sqlite)
按关键词搜索:
SELECT
title,
url,
datetime(last_visit_date/1000000, 'unixepoch', 'localtime') as visit_date
FROM moz_places
WHERE url LIKE '%keyword%' OR title LIKE '%keyword%'
ORDER BY last_visit_date DESC
LIMIT 50;
按日期范围搜索:
SELECT url, title, datetime(last_visit_date/1000000, 'unixepoch', 'localtime') as visit_date
FROM moz_places
WHERE last_visit_date > strftime('%s', '2025-01-01') * 1000000
AND last_visit_date < strftime('%s', '2025-01-31') * 1000000
ORDER BY last_visit_date DESC;
时间花费分析(使用 moz_places_metadata):
SELECT
SUM(m.total_view_time) / 1000 / 60 as minutes,
COUNT(*) as sessions
FROM moz_places_metadata m
JOIN moz_places p ON m.place_id = p.id
WHERE p.url LIKE '%example.com%'
AND m.created_at > strftime('%s', '2025-01-01') * 1000;
注意:created_at 单位为毫秒,last_visit_date 单位为微秒。
最常访问的网站:
SELECT
SUBSTR(url, INSTR(url, '://') + 3,
INSTR(SUBSTR(url, INSTR(url, '://') + 3), '/') - 1) as domain,
SUM(visit_count) as visits
FROM moz_places
WHERE url LIKE 'http%'
GROUP BY domain
ORDER BY visits DESC
LIMIT 20;
Chromium 数据库(History)
重要:Chromium 时间戳是自 1601 年 1 月 1 日(Windows epoch)以来的微秒数。
转换方式:(timestamp/1000000) - 11644473600 得到 Unix epoch。
按关键词搜索:
SELECT
title,
url,
datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') as visit_date
FROM urls
WHERE url LIKE '%keyword%' OR title LIKE '%keyword%'
ORDER BY last_visit_time DESC
LIMIT 50;
按日期范围搜索:
SELECT url, title, datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') as visit_date
FROM urls
WHERE last_visit_time > (strftime('%s', '2025-01-01') + 11644473600) * 1000000
AND last_visit_time < (strftime('%s', '2025-01-31') + 11644473600) * 1000000
ORDER BY last_visit_time DESC;
数据库结构
Firefox(moz_places)
| 列 | 说明 |
|---|---|
| url | 完整 URL |
| title | 页面标题 |
| last_visit_date | 自 Unix epoch 起的微秒数 |
| visit_count | 访问次数 |
| frecency | 频率 + 最近度评分 |
Firefox(moz_places_metadata)
| 列 | 说明 |
|---|---|
| place_id | 指向 moz_places 的外键 |
| total_view_time | 在页面上花费的毫秒数 |
| created_at | 自 Unix epoch 起的毫秒数 |
| scrolling_time | 滚动花费的时间 |
| key_presses | 按键次数 |
Chromium(urls)
| 列 | 说明 |
|---|---|
| url | 完整 URL |
| title | 页面标题 |
| last_visit_time | 自 1601-01-01 起的微秒数 |
| visit_count | 访问次数 |
输出指南
- 以可读格式呈现结果,相关时按域名分组
- 时间分析显示小时/分钟,而非原始毫秒数
- 显示历史记录时,包含日期和可点击链接
- 如果结果很多,按域名或时间段汇总
- 相关时可包含小型 ASCII/Unicode 图表(每日细分、直方图)
更多输出示例参见 @README.md。
适用场景
- 找回遗忘的网页或文章
- 回顾特定时间段内的浏览记录
- 分析在某个网站上的时间投入
- 查看最常访问的网站排行
限制
- 需要 sqlite3 命令行工具
- 仅支持 Firefox 和 Chromium 系列浏览器
- 时间花费分析仅 Firefox 支持(依赖 moz_places_metadata)
- 浏览器数据库结构可能随版本变化,需注意字段兼容性