✨ 核心特性
📋
剪贴板识别
自动读取剪贴板中的Zotero Item Key,无需手动输入
🔄
格式转换
Markdown自动转HTML,完美适配Zotero笔记显示
⚡
批量上传
多个AI分析结果并发上传,效率翻倍
🔑 获取Zotero API密钥
Step 1: 生成API密钥
- 访问 Zotero API密钥管理页面
- 点击"Create New Private Key"
- 设置密钥描述(如"Mac自动化")
- 勾选权限:
- 允许库访问:Allow library access
- 允许写入:Allow notes editing
- 复制生成的密钥(格式:Zotero API密钥以字母开头,长度约24位)
Step 2: 获取Library ID
在Zotero客户端中,右键点击你的个人文献库 → 选择"Feed URL", URL中的数字就是你的Library ID。
💡 配置示例
# Zotero配置
LIBRARY_ID = '8758500' # 你的Library ID(纯数字)
API_KEY = 'Nh8PFHCpWziTGzskKHqRXYav' # 你的API Key
LIBRARY_TYPE = 'user' # 个人库用'user',群组用'group'
📖 使用流程
完整工作流程
1
复制Zotero Item Key
在Zotero中右键点击文献条目 → "Copy Item Key"(或按Cmd+Shift+C)
2
运行AI分析
右键点击PDF文件 → 快速操作 → "Zotero AI分析"
3
自动上传笔记
脚本自动从剪贴板读取Item Key,将AI分析结果上传为Zotero子笔记
4
查看结果
在Zotero中展开该文献,查看自动生成的AI笔记
⚠️ 注意事项
- 运行脚本前必须先复制Item Key到剪贴板
- Item Key是8位字母数字组合,如"ABC12345"
- 如果剪贴板没有有效的Item Key,脚本会终止运行
- 每个AI分析任务会生成一条独立的Zotero笔记
💻 代码集成要点
在PDF AI分析脚本的基础上,添加以下代码模块即可实现Zotero集成:
# 1. 安装依赖
pip install pyzotero markdown
# 2. 导入模块
import subprocess
import markdown
from pyzotero import zotero
# 3. 配置Zotero连接
LIBRARY_ID = 'your_library_id'
API_KEY = 'your_api_key'
LIBRARY_TYPE = 'user'
# 4. 解析剪贴板中的Item Key
def parse_item_key(text):
if not text: return None
candidates = re.findall(r'([A-Z0-9]{8})', text)
for c in candidates:
return c
return None
# 5. 获取剪贴板内容
def get_clipboard_content():
try:
return subprocess.check_output(
'pbpaste', env={'LANG': 'en_US.UTF-8'}
).decode('utf-8')
except Exception:
return ""
# 6. 上传到Zotero
def upload_to_zotero(zot, parent_key, content, task_id):
try:
# Markdown转HTML
html_content = markdown.markdown(
content,
extensions=['extra', 'nl2br']
)
note_item = {
'itemType': 'note',
'parentItem': parent_key,
'note': html_content,
'tags': [{'tag': 'AI Auto-Note'}]
}
resp = zot.create_items([note_item])
return True if resp.get('successful') else False
except Exception as e:
return False, str(e)
# 7. 主流程修改
def main():
# ... PDF提取和AI分析代码 ...
# 获取Item Key
clipboard_text = get_clipboard_content()
zotero_key = parse_item_key(clipboard_text)
if not zotero_key:
notify("停止运行", "剪贴板未找到有效的Zotero Key")
return
# 连接Zotero
zot = zotero.Zotero(LIBRARY_ID, LIBRARY_TYPE, API_KEY)
# ... AI分析代码 ...
# 批量上传结果
for task_id, content in results:
upload_to_zotero(zot, zotero_key, content, task_id)
notify("完成", f"已上传{len(results)}条笔记到Zotero")