📚

Zotero AI智能集成

AI分析结果自动上传到Zotero

结合PDF AI分析和Zotero API,实现从PDF到结构化笔记的全自动流程。 支持剪贴板读取Item Key、Markdown转HTML、批量上传等高级功能。

✨ 核心特性

📋

剪贴板识别

自动读取剪贴板中的Zotero Item Key,无需手动输入

🔄

格式转换

Markdown自动转HTML,完美适配Zotero笔记显示

批量上传

多个AI分析结果并发上传,效率翻倍

🔑 获取Zotero API密钥

Step 1: 生成API密钥

  1. 访问 Zotero API密钥管理页面
  2. 点击"Create New Private Key"
  3. 设置密钥描述(如"Mac自动化")
  4. 勾选权限:
    • 允许库访问:Allow library access
    • 允许写入:Allow notes editing
  5. 复制生成的密钥(格式: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")