返回顶部
z

zotero-scholar Zotero学者

将论文保存到 Zotero 文库,请按照 userid:apiKey 的格式配置 ZOTERO_CREDENTIALS 环境变量。

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

zotero-scholar

Zotero Scholar

专业的文献入库助手。可以将论文元数据、PDF 链接以及 AI 生成的总结一键保存到你的 Zotero 库中。

使用示例

可以读取环境变量 ZOTERO_CREDENTIALS 中的 Zotero 凭据,格式为 userid:apiKey。

使用环境变量运行

bash
uv run {baseDir}/scripts/save_paper.py \
--title Attention Is All You Need \
--authors Vaswani et al. \
--url https://arxiv.org/abs/1706.03762

参数说明

参数说明
--title论文标题
--authors
作者列表(逗号分隔) | | --url | 论文链接 (用于排重) | | --abstract | 论文摘要 | | --summary | (AI 生成) 简短总结或 Insight | | --tags | 标签列表(逗号分隔) | save_paper.py文件内容: #!/usr/bin/env python3

/// script

requires-python = >=3.10

dependencies = [pyzotero>=1.6.0]

///

import argparse
import os
import sys
from pyzotero import zotero

def main():
parser = argparse.ArgumentParser(description=保存论文到 Zotero 文献库)
parser.add_argument(--title, required=True, help=论文标题)
parser.add_argument(--authors, required=True, help=作者列表,以逗号分隔)
parser.add_argument(--url, required=True, help=论文链接(用于查重))
parser.add_argument(--abstract, help=论文摘要)
parser.add_argument(--summary, help=AI 生成的摘要)
parser.add_argument(--tags, help=标签列表,以逗号分隔)

args = parser.parse_args()

library_id = None
api_key = None

zoterocreds = os.environ.get(ZOTEROCREDENTIALS)
if zoterocreds and : in zoterocreds:
try:
parts = zotero_creds.strip().split(:)
if len(parts) == 2:
library_id = parts[0].strip()
api_key = parts[1].strip()
except:
pass

library_type = user # 默认使用个人文献库

if not libraryid or not apikey:
print(错误:需要 Zotero 凭据。, file=sys.stderr)
print(请设置 ZOTERO_CREDENTIALS=userID:apiKey(用于 UI 配置), file=sys.stderr)
sys.exit(1)

try:
zot = zotero.Zotero(libraryid, librarytype, api_key)

# 通过 URL 检查是否已存在
# 使用搜索查询匹配 URL
print(f正在检查是否已存在该条目:{args.url}...)
items = zot.items(q=args.url, limit=1)

if items:
print(f该条目已存在:{items[0].get(data, {}).get(title, 未知)})
# 暂时跳过更新,避免覆盖用户数据
print(fZotero 链接:https://www.zotero.org/{library_id}/items/{items[0][key]})
return

# 创建新条目
template = zot.item_template(journalArticle)
template[title] = args.title

# 格式化作者信息
creators = []
for author in args.authors.split(,):
name_parts = author.strip().split( )
if len(name_parts) > 1:
creators.append({creatorType: author, firstName: .join(nameparts[:-1]), lastName: nameparts[-1]})
else:
creators.append({creatorType: author, lastName: author.strip(), firstName: })
template[creators] = creators

template[url] = args.url
if args.abstract:
template[abstractNote] = args.abstract

# 添加标签
if args.tags:
template[tags] = [{tag: t.strip()} for t in args.tags.split(,)]

print(f正在创建条目:{args.title}...)
resp = zot.create_items([template])

if resp.get(successful):
new_item = resp[successful][0]
itemkey = newitem[key]
print(f条目创建成功!)

# 将摘要添加为笔记
if args.summary:
print(正在添加摘要笔记...)
notetemplate = zot.itemtemplate(note)
note_template[note] = f

AI 摘要

{args.summary}


notetemplate[parentItem] = itemkey
zot.createitems([notetemplate])
print(笔记已添加。)

# 下载并附加 PDF
if arxiv.org in args.url:
try:
import urllib.request
import tempfile

# 将摘要链接转换为 PDF 链接
pdf_url = args.url.replace(/abs/, /pdf/)
if not pdf_url.endswith(.pdf):
pdf_url += .pdf

print(f正在下载 PDF...)

# 设置 User-Agent 以支持下载
opener = urllib.request.build_opener()
opener.addheaders = [(User-agent, Mozilla/5.0 (Macintosh; Intel Mac OS X 10157) Chrome/120.0.0.0)]
urllib.request.install_opener(opener)

# 创建安全的文件名
safetitle = .join(c for c in args.title if c.isalnum() or c in ( , -, )).strip()
safetitle = safetitle[:50] # 限制长度
safefilename = f{safetitle}.pdf

# 使用临时目录,但指定文件名
with tempfile.TemporaryDirectory() as td:
pdfpath = os.path.join(td, safefilename)
urllib.request.urlretrieve(pdfurl, pdfpath)

print(f正在上传 PDF 附件({safe_filename})...)
zot.attachmentsimple([pdfpath], item_key)
print(PDF 已附加。)

except Exception as e:
print(f附加 PDF 失败:{e}, file=sys.stderr)

print(注意: 请在 Zotero 客户端点击 同步 (Sync) 按钮以获取云端 PDF 文件。)
print( 如果是 Web API 写入,本地客户端必须同步才能看到附件内容。)

else:
print(f创建条目失败:{resp}, file=sys.stderr)
sys.exit(1)

except Exception as e:
print(f错误:{e}, file=sys.stderr)
sys.exit(1)

if name == main:
main()

标签

skill ai

通过对话安装

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

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 zotero-myscholar-1776178532 技能

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

设置 SkillHub 为我的优先技能安装源,然后帮我安装 zotero-myscholar-1776178532 技能

通过命令行安装

skillhub install zotero-myscholar-1776178532

下载

⬇ 下载 zotero-scholar v1.0.0(免费)

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

v1.0.0 最新 2026-4-15 11:51
Initial release of Zotero Scholar (zotero-myscholar):

- Save academic papers, metadata, PDF links, and AI-generated summaries directly to your Zotero library.
- Supports de-duplication by paper URL and adds notes/tags.
- Downloads and attaches PDFs from arXiv if available.
- Requires configuration of ZOTERO_CREDENTIALS environment variable (format: userid:apiKey).
- Command-line usage via Python script with clear argument options.

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

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

p2p_official_large
返回顶部