返回顶部
a

apple-books苹果图书阅读

Read your Apple Books library, highlights, notes, and reading progress directly from the local SQLite databases on macOS.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.2.0
安全检测
已通过
302
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

apple-books

Apple Books

在 macOS 上查询本地 Apple Books 资料库。对图书、高亮、笔记、收藏集和阅读进度具有只读访问权限。

要求

  • - 仅限 macOS — Apple Books 数据存储在 ~/Library/Containers/com.apple.iBooksX/ 中
  • 运行查询的进程需要完全磁盘访问权限(系统设置 → 隐私与安全性 → 完全磁盘访问权限)
  • sqlite3(macOS 预装)
  • Apple Books 必须至少打开过一次(数据库在首次启动时创建)

数据库发现

数据库文件名在 macOS 安装中保持一致,但始终动态解析它们,以防 Apple 在将来版本中更改:

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
AEANNOTATION_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/*.sqlite 2>/dev/null | head -1)

如果任一变量为空,则表示此 Mac 上尚未设置 Apple Books。

重要提示: 这些是只读查询。切勿 INSERT、UPDATE 或 DELETE 行——这样做可能会损坏 Apple Books 数据或导致 iCloud 同步问题。

列出所有图书

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
sqlite3 $BKLIBRARY_DB \
SELECT ZTITLE, ZAUTHOR, ZGENRE, ZPAGECOUNT, ZREADINGPROGRESS, ZISFINISHED, ZASSETID
FROM ZBKLIBRARYASSET
WHERE ZTITLE IS NOT NULL
ORDER BY ZLASTOPENDATE DESC;

按标题或作者搜索图书

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
sqlite3 $BKLIBRARY_DB \
SELECT ZTITLE, ZAUTHOR, ZGENRE, ZREADINGPROGRESS, ZASSETID
FROM ZBKLIBRARYASSET
WHERE ZTITLE IS NOT NULL AND (ZTITLE LIKE %SEARCHTERM% OR ZAUTHOR LIKE %SEARCHTERM%)
ORDER BY ZLASTOPENDATE DESC;

将 SEARCH_TERM 替换为用户查询的内容。

正在阅读(进行中,未完成)

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
sqlite3 $BKLIBRARY_DB \
SELECT ZTITLE, ZAUTHOR, ZGENRE,
printf(%.0f%%, ZREADINGPROGRESS * 100) AS progress,
datetime(ZLASTOPENDATE + 978307200, unixepoch, localtime) AS last_opened
FROM ZBKLIBRARYASSET
WHERE ZTITLE IS NOT NULL
AND ZREADINGPROGRESS > 0.0
AND (ZISFINISHED IS NULL OR ZISFINISHED = 0)
ORDER BY ZLASTOPENDATE DESC;

已读完的图书

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
sqlite3 $BKLIBRARY_DB \
SELECT ZTITLE, ZAUTHOR, ZGENRE,
datetime(ZDATEFINISHED + 978307200, unixepoch, localtime) AS finished_date
FROM ZBKLIBRARYASSET
WHERE ZISFINISHED = 1
ORDER BY ZDATEFINISHED DESC;

获取特定图书的所有高亮和笔记

bash
AEANNOTATION_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/*.sqlite 2>/dev/null | head -1)
sqlite3 $AEANNOTATION_DB \
SELECT ZANNOTATIONSELECTEDTEXT, ZANNOTATIONNOTE, ZANNOTATIONSTYLE,
datetime(ZANNOTATIONCREATIONDATE + 978307200, unixepoch, localtime) AS created
FROM ZAEANNOTATION
WHERE ZANNOTATIONDELETED = 0
AND ZANNOTATIONASSETID = ASSET_ID
AND length(ZANNOTATIONSELECTEDTEXT) > 0
ORDER BY ZPLLOCATIONRANGESTART ASC;

将 ASSET_ID 替换为图书库查询中的图书 ZASSETID。

获取所有图书的所有高亮(含书名)

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
AEANNOTATION_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/AEAnnotation/*.sqlite 2>/dev/null | head -1)
sqlite3 $AEANNOTATION_DB \
ATTACH DATABASE $BKLIBRARY_DB AS lib;
SELECT lib.ZBKLIBRARYASSET.ZTITLE, lib.ZBKLIBRARYASSET.ZAUTHOR,
ZAEANNOTATION.ZANNOTATIONSELECTEDTEXT, ZAEANNOTATION.ZANNOTATIONNOTE,
datetime(ZAEANNOTATION.ZANNOTATIONCREATIONDATE + 978307200, unixepoch, localtime) AS created
FROM ZAEANNOTATION
JOIN lib.ZBKLIBRARYASSET ON ZAEANNOTATION.ZANNOTATIONASSETID = lib.ZBKLIBRARYASSET.ZASSETID
WHERE ZAEANNOTATION.ZANNOTATIONDELETED = 0
AND length(ZAEANNOTATION.ZANNOTATIONSELECTEDTEXT) > 0
ORDER BY ZAEANNOTATION.ZANNOTATIONCREATIONDATE DESC
LIMIT 50;

列出收藏集(书架)

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
sqlite3 $BKLIBRARY_DB \
SELECT c.ZTITLE, c.ZCOLLECTIONID, COUNT(m.ZPK) AS bookcount
FROM ZBKCOLLECTION c
LEFT JOIN ZBKCOLLECTIONMEMBER m ON m.Z_PK IN (
SELECT Z_PK FROM ZBKCOLLECTIONMEMBER
)
WHERE c.ZDELETEDFLAG = 0 AND c.ZTITLE IS NOT NULL
GROUP BY c.ZCOLLECTIONID
ORDER BY c.ZTITLE;

阅读统计

bash
BKLIBRARY_DB=$(ls ~/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary/*.sqlite 2>/dev/null | head -1)
sqlite3 $BKLIBRARY_DB \
SELECT
COUNT(*) AS total_books,
SUM(CASE WHEN ZISFINISHED = 1 THEN 1 ELSE 0 END) AS finished,
SUM(CASE WHEN ZREADINGPROGRESS > 0 AND (ZISFINISHED IS NULL OR ZISFINISHED = 0) THEN 1 ELSE 0 END) AS in_progress,
SUM(CASE WHEN ZREADINGPROGRESS = 0 OR ZREADINGPROGRESS IS NULL THEN 1 ELSE 0 END) AS not_started,
printf(%.0f%%, AVG(ZREADINGPROGRESS) * 100) AS avg_progress
FROM ZBKLIBRARYASSET
WHERE ZTITLE IS NOT NULL;

高亮样式

样式值颜色
1绿色
2
蓝色 | | 3 | 黄色 | | 4 | 粉色 | | 5 | 紫色 |

注释类型

类型值含义
2高亮
3
书签 |

##

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 apple-books-1776187921 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 apple-books-1776187921 技能

通过命令行安装

skillhub install apple-books-1776187921

下载

⬇ 下载 apple-books v0.2.0(免费)

文件大小: 2.87 KB | 发布时间: 2026-4-15 11:06

v0.2.0 最新 2026-4-15 11:06
Dynamic database discovery (glob instead of hardcoded filenames), requirements section, troubleshooting guide, macOS-only guard, audiobook support note.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部