SuperAPI AI 工具集

zenodo-skill

写作与研究

查看项目

更新于 10-15 09:09

技能介绍

用途

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 调用,需按顺序执行。

  1. 创建空沉积:

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)

  1. 上传文件(推荐 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,应避免使用。

  1. 设置元数据:通过 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 及字段级错误。修正并重试后再发布。

  1. 发布:生产环境发布不可逆(之后可编辑元数据,但不能移除文件或删除记录)。除非在沙箱,否则此步前需与用户确认。

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 权限范围。
  • 关于收费、价格、平台支持范围等信息,资料中暂未提供。