fastpaper-cli 0.2.0

CLI tool for searching, downloading and reading academic papers
Documentation
# Zenodo

- **API 类型**: REST JSON
- **基础 URL**: `https://zenodo.org/api`
- **认证**: 无需
- **能力**: search + download + read;CERN 运营的通用存储库(论文/数据集/软件)
- **实现**: `src/sources/zenodo.rs`(以代码为准)

## 搜索

`GET /api/records`,参数:`q`(Elasticsearch 查询语法)、`size`、`page`、`type=publication`(只取论文)、`sort`(如 `mostrecent`)、`access_right=open`。

- 日期过滤写进查询串:`... AND publication_date:[2020-01-01 TO *]`- 不支持按引用数排序。单条详情:`GET /api/records/{id}`
## 响应映射(→ Paper)

顶层 `hits.hits[]`,总数在 `hits.total`。每条 hit:

- `id`:`hit.id`(数字 record id;落地页模式 `https://zenodo.org/record/{id}`)
- `title` / `description`(→ abstract,可能含 HTML 标签,实现未剥离)/ `creators[].name` / `publication_date`(取前 4 位为 year)/ `access_right`:均在 `hit.metadata`- `doi`:hit 顶层 `doi`;Zenodo 自身 DOI 形如 `10.5281/zenodo.{record_id}`
- `url`:`hit.links.html`
- `pdf_url`:`hit.files[]``key``.pdf` 结尾者的 `links.self`
- `open_access`:`metadata.access_right == "open"`
- `venue` / `citations`:无

## 下载

无直接 PDF 端点:按 identifier 调 `/api/records?q={id}&size=1&type=publication` 拿 `pdf_url` 再下载,见 `src/download.rs::download_zenodo`;read = 下载后本地提取 PDF 文本。

## 注意

- 端点必须带 `/api`:`https://zenodo.org/records?q=...` 返回 404 HTML(2026-07 实测),须用 `/api/records`。默认 base `https://zenodo.org`(`FASTPAPER_ZENODO_URL` 可覆盖);`search()``download_zenodo` 均拼 `/api`- 429 → 指数退避重试(实现内置 3 次);5xx → 直接报错。