用途
Zenodo Skill 用于与 Zenodo REST API 交互,帮助用户将研究产物(数据集、代码发布、论文、海报等)存入 Zenodo、发布并获取可引用的 DOI,也支持更新已有沉积、发布新版本以及搜索 Zenodo 上的公开记录。Zenodo 会为每条已发布记录分配一个可引用的 DOI。
主要能力
- 创建新的沉积(deposition),上传文件并发布,获得 DOI。
- 为已有记录发布新版本,沿用同一 concept-DOI。
- 丢弃草稿沉积。
- 搜索已发布的公开记录(无需令牌)。
- 支持生产环境与沙箱环境两套 API 端点。
使用方式
环境与令牌
提供两个环境,会话期间应固定使用其中一个:
- 生产环境:Base URL 为 https://zenodo.org/api,令牌页面为 https://zenodo.org/account/settings/applications/tokens/new/
- 沙箱(测试):Base URL 为 https://sandbox.zenodo.org/api,令牌页面为 https://sandbox.zenodo.org/account/settings/applications/tokens/new/
沙箱账号与令牌和生产环境相互独立。新工作流应先在沙箱测试——生产环境已发布的记录无法删除。
所需令牌权限范围:deposit:write 和 deposit:actions。
运行命令前导出令牌:
export ZENODO_TOKEN=... # 不要在展示给用户的命令中内联令牌 export ZENODO_BASE=https://sandbox.zenodo.org/api # 或 https://zenodo.org/api
如果 ZENODO_TOKEN 未设置,需先向用户询问令牌及环境。
核心工作流:存入新产物
沉积生命周期为:创建 → 上传文件 → 设置元数据 → 发布。每一步是独立的 API 调用,需按顺序执行。
- 创建空沉积:
curl -sS -X POST "$ZENODO_BASE/deposit/depositions"
-H "Authorization: Bearer $ZENODO_TOKEN"
-H "Content-Type: application/json"
-d '{}'
响应 JSON 中需要记住两项:id(沉积 id,用于元数据/发布/版本操作)和 links.bucket(文件上传的 bucket URL)。可用 jq 捕获:
RESP=$(curl -sS -X POST "$ZENODO_BASE/deposit/depositions"
-H "Authorization: Bearer $ZENODO_TOKEN" -H "Content-Type: application/json" -d '{}')
DEPOSIT_ID=$(echo "$RESP" | jq -r .id)
BUCKET=$(echo "$RESP" | jq -r .links.bucket)
- 上传文件(推荐 bucket API):bucket API 支持每条记录总计最多 50 GB / 100 个文件。使用 --upload-file(HTTP PUT),而非 multipart 表单上传。URL 中的文件名即记录上显示的文件名。
curl -sS --upload-file ./data.csv
-H "Authorization: Bearer $ZENODO_TOKEN"
"$BUCKET/data.csv"
每个文件重复一次;文件多时可在 shell 中循环。旧版 /files multipart 端点单文件上限 100 MB,应避免使用。
- 设置元数据:通过 PUT 提交到沉积。必填字段:upload_type、title、creators、description。完整 schema、允许的 upload_type 值、许可证代码及条件字段(如 publication_type、embargo_date)见 references/metadata.md。最小示例:
curl -sS -X PUT "$ZENODO_BASE/deposit/depositions/$DEPOSIT_ID"
-H "Authorization: Bearer $ZENODO_TOKEN"
-H "Content-Type: application/json"
-d '{
"metadata": {
"title": "My dataset",
"upload_type": "dataset",
"description": "<p>A short description (HTML allowed).</p>",
"creators": [{"name": "Doe, Jane", "affiliation": "Example Univ.", "orcid": "0000-0002-1825-0097"}]
}
}'
需阅读响应——Zenodo 在此处校验,若有缺失或格式错误会返回 400 及字段级错误。修正并重试后再发布。
- 发布:生产环境发布不可逆(之后可编辑元数据,但不能移除文件或删除记录)。除非在沙箱,否则此步前需与用户确认。
curl -sS -X POST "$ZENODO_BASE/deposit/depositions/$DEPOSIT_ID/actions/publish"
-H "Authorization: Bearer $ZENODO_TOKEN"
响应包含 doi 和 links.record_html,需向用户展示两者。
已有记录的新版本
当用户此前已发布、希望在同一 concept-DOI 下发布更新后的数据/代码时使用。
1. 创建新版本草稿(返回 links.latest_draft)
curl -sS -X POST "$ZENODO_BASE/deposit/depositions/$DEPOSIT_ID/actions/newversion"
-H "Authorization: Bearer $ZENODO_TOKEN"
然后跟随新草稿的 bucket(从 links.latest_draft → GET 它 → 使用其 links.bucket)上传变更文件、更新元数据,并按上述步骤 2–4 发布。新版本默认继承上一版本的文件——如需替换,可通过 DELETE $BUCKET/<filename> 删除。
丢弃草稿
curl -sS -X POST "$ZENODO_BASE/deposit/depositions/$DEPOSIT_ID/actions/discard"
-H "Authorization: Bearer $ZENODO_TOKEN"
搜索已发布记录
公开搜索无需令牌。
curl -sS "$ZENODO_BASE/records?q=climate+model&size=10&sort=mostrecent"
查询语法为 Elasticsearch——支持字段化查询,如 creators.name:"Doe, Jane"、communities:zenodo、resource_type.type:dataset。查询模式见 references/search.md。
约定与注意事项
- 始终检查 HTTP 状态:201 = 已创建,202 = 发布已接受,400 = 元数据错误(阅读响应体),401 = 令牌错误,403 = 权限范围错误,429 = 触发速率限制。
- 速率限制:认证用户 100 请求/分钟、5000 请求/小时。关注 X-RateLimit-Remaining。
- 不要在展示的命令中内联令牌——使用 $ZENODO_TOKEN。不要将令牌写入文件。
- 沙箱优先。任何首次工作流都建议先在沙箱进行;仅在用户明确确认后切换到生产环境。
- 发布前验证。在生产环境调用 actions/publish 前,先 GET 沉积并与用户一起检查文件与元数据。
- 大文件上传:对于超过几百 MB 的文件,考虑使用 --progress-bar 进行 curl 上传,并提醒用户注意时间与带宽。
更新检查
每个安装每 24 小时最多检查一次;未经用户明确同意,不得改动技能目录。
如果 <this-skill-dir>/.last_update 存在且不足 24 小时,完全跳过此步骤。
否则从上游获取最新标签:
git -C <this-skill-dir> ls-remote --tags origin 'v*' 2>/dev/null
| awk '{print $2}' | sed 's|refs/tags/||'
| sort -V | tail -1
与此技能 frontmatter 中的 metadata.version 比较。如果上游标签严格更新(semver),告知用户一行并询问:
"A newer version of this skill is available: vX.Y.Z → vA.B.C. Want me to git pull?"
如果用户同意,运行 git -C <this-skill-dir> pull --ff-only。无论结果如何都刷新 .last_update,使提示 24 小时内不再重复。
如果上游相同或更旧,静默刷新 .last_update 并继续。
任何失败(离线、非 git 检出——例如 ClawHub 安装的副本、只读路径、无权限)都应静默忽略并继续用户任务,不要提及失败。
参考资料
- references/metadata.md — 完整元数据 schema、upload_type 值、许可证代码、条件字段
- references/search.md — 搜索查询语法与实用过滤器
- references/examples.md — 常见场景的端到端 shell 脚本(数据集上传、软件发布、新版本)
适用场景
- 用户希望将数据集、代码发布、论文、海报或其他产物上传到 Zenodo。
- 用户希望为研究成果获取 DOI。
- 用户希望更新已有沉积或发布新版本。
- 用户希望搜索 Zenodo 上的记录。
限制
- 生产环境已发布的记录无法删除,发布操作不可逆。
- 沙箱账号与令牌和生产环境相互独立。
- bucket API 每条记录总计最多 50 GB / 100 个文件;旧版 /files multipart 端点单文件上限 100 MB。
- 认证用户速率限制为 100 请求/分钟、5000 请求/小时。
- 令牌需具备 deposit:write 和 deposit:actions 权限范围。
- 关于收费、价格、平台支持范围等信息,资料中暂未提供。