paper-search-cli 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +31 -3
- package/README-sc.md +151 -36
- package/README.md +150 -27
- package/dist/cli.js +21 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/ConfigService.d.ts +1 -1
- package/dist/config/ConfigService.d.ts.map +1 -1
- package/dist/config/ConfigService.js +6 -1
- package/dist/config/ConfigService.js.map +1 -1
- package/dist/config/constants.d.ts +6 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +4 -1
- package/dist/config/constants.js.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js +54 -12
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/handleToolCall.d.ts.map +1 -1
- package/dist/core/handleToolCall.js +77 -7
- package/dist/core/handleToolCall.js.map +1 -1
- package/dist/core/platformMetadata.d.ts +28 -0
- package/dist/core/platformMetadata.d.ts.map +1 -0
- package/dist/core/platformMetadata.js +258 -0
- package/dist/core/platformMetadata.js.map +1 -0
- package/dist/core/schemas.d.ts +134 -74
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +42 -38
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/searchers.d.ts +11 -0
- package/dist/core/searchers.d.ts.map +1 -1
- package/dist/core/searchers.js +17 -1
- package/dist/core/searchers.js.map +1 -1
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js +82 -30
- package/dist/core/tools.js.map +1 -1
- package/dist/platforms/ACMSearcher.d.ts +16 -0
- package/dist/platforms/ACMSearcher.d.ts.map +1 -0
- package/dist/platforms/ACMSearcher.js +125 -0
- package/dist/platforms/ACMSearcher.js.map +1 -0
- package/dist/platforms/ArxivSearcher.d.ts.map +1 -1
- package/dist/platforms/ArxivSearcher.js +10 -2
- package/dist/platforms/ArxivSearcher.js.map +1 -1
- package/dist/platforms/DBLPSearcher.d.ts +16 -0
- package/dist/platforms/DBLPSearcher.d.ts.map +1 -0
- package/dist/platforms/DBLPSearcher.js +116 -0
- package/dist/platforms/DBLPSearcher.js.map +1 -0
- package/dist/platforms/IEEESearcher.d.ts +15 -0
- package/dist/platforms/IEEESearcher.d.ts.map +1 -0
- package/dist/platforms/IEEESearcher.js +123 -0
- package/dist/platforms/IEEESearcher.js.map +1 -0
- package/dist/platforms/OpenAIRESearcher.d.ts.map +1 -1
- package/dist/platforms/OpenAIRESearcher.js +9 -1
- package/dist/platforms/OpenAIRESearcher.js.map +1 -1
- package/dist/platforms/OpenReviewSearcher.d.ts +19 -0
- package/dist/platforms/OpenReviewSearcher.d.ts.map +1 -0
- package/dist/platforms/OpenReviewSearcher.js +141 -0
- package/dist/platforms/OpenReviewSearcher.js.map +1 -0
- package/dist/platforms/PaperSource.d.ts +6 -0
- package/dist/platforms/PaperSource.d.ts.map +1 -1
- package/dist/platforms/PaperSource.js.map +1 -1
- package/dist/platforms/PubMedSearcher.d.ts.map +1 -1
- package/dist/platforms/PubMedSearcher.js +8 -0
- package/dist/platforms/PubMedSearcher.js.map +1 -1
- package/dist/platforms/USENIXSearcher.d.ts +14 -0
- package/dist/platforms/USENIXSearcher.d.ts.map +1 -0
- package/dist/platforms/USENIXSearcher.js +75 -0
- package/dist/platforms/USENIXSearcher.js.map +1 -0
- package/dist/services/JournalMetricsService.d.ts +38 -0
- package/dist/services/JournalMetricsService.d.ts.map +1 -0
- package/dist/services/JournalMetricsService.js +142 -0
- package/dist/services/JournalMetricsService.js.map +1 -0
- package/dist/services/MultiSourceSearchService.d.ts.map +1 -1
- package/dist/services/MultiSourceSearchService.js +8 -34
- package/dist/services/MultiSourceSearchService.js.map +1 -1
- package/dist/services/OpenAccessFallbackService.d.ts +1 -0
- package/dist/services/OpenAccessFallbackService.d.ts.map +1 -1
- package/dist/services/OpenAccessFallbackService.js +2 -2
- package/dist/services/OpenAccessFallbackService.js.map +1 -1
- package/dist/utils/HttpClient.d.ts +6 -0
- package/dist/utils/HttpClient.d.ts.map +1 -0
- package/dist/utils/HttpClient.js +30 -0
- package/dist/utils/HttpClient.js.map +1 -0
- package/dist/utils/PdfDownload.d.ts.map +1 -1
- package/dist/utils/PdfDownload.js +106 -16
- package/dist/utils/PdfDownload.js.map +1 -1
- package/package.json +3 -1
- package/skills/paper-search/SKILL.md +38 -8
package/.env.example
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# ==============================================================================
|
|
2
2
|
# Paper Search CLI - Environment Variables
|
|
3
3
|
# ==============================================================================
|
|
4
|
-
# Supports
|
|
4
|
+
# Supports 25 academic sources/platforms with a unified CLI interface,
|
|
5
|
+
# plus EasyScholar journal metrics lookup
|
|
5
6
|
# Platforms: Crossref, OpenAlex, PubMed, PubMed Central, Europe PMC, arXiv,
|
|
6
7
|
# bioRxiv, medRxiv, Semantic Scholar, CORE, OpenAIRE, Web of Science,
|
|
7
|
-
# Google Scholar,
|
|
8
|
-
#
|
|
8
|
+
# Google Scholar, DBLP, ACM metadata, USENIX metadata, OpenReview,
|
|
9
|
+
# IACR ePrint, Sci-Hub, IEEE Xplore, ScienceDirect, Springer/SpringerLink,
|
|
10
|
+
# Wiley, Scopus, Unpaywall
|
|
9
11
|
#
|
|
10
12
|
# For global installs, prefer:
|
|
11
13
|
# paper-search config set KEY VALUE
|
|
@@ -26,6 +28,15 @@
|
|
|
26
28
|
WOS_API_KEY=your_web_of_science_api_key_here
|
|
27
29
|
WOS_API_VERSION=v1
|
|
28
30
|
|
|
31
|
+
# ------------------------------------------------------------------------------
|
|
32
|
+
# IEEE Xplore Metadata API - REQUIRED for IEEE search
|
|
33
|
+
# ------------------------------------------------------------------------------
|
|
34
|
+
# Official metadata search API for IEEE Xplore
|
|
35
|
+
# Get API key: https://developer.ieee.org/
|
|
36
|
+
# Documentation: https://developer.ieee.org/docs/read/Searching_the_IEEE_Xplore_Metadata_API
|
|
37
|
+
# Pricing/access: Requires IEEE API access; entitlements may vary
|
|
38
|
+
IEEE_API_KEY=your_ieee_api_key_here
|
|
39
|
+
|
|
29
40
|
# ------------------------------------------------------------------------------
|
|
30
41
|
# PubMed/NCBI E-utilities - OPTIONAL (but recommended)
|
|
31
42
|
# ------------------------------------------------------------------------------
|
|
@@ -49,6 +60,17 @@ NCBI_TOOL=paper-search-cli
|
|
|
49
60
|
# Pricing: Free for academic use
|
|
50
61
|
SEMANTIC_SCHOLAR_API_KEY=your_semantic_scholar_api_key_here
|
|
51
62
|
|
|
63
|
+
# ------------------------------------------------------------------------------
|
|
64
|
+
# EasyScholar Journal Metrics API - REQUIRED for journal metrics
|
|
65
|
+
# ------------------------------------------------------------------------------
|
|
66
|
+
# Query journal-level metrics such as impact factor, JCR quartile, CAS zones,
|
|
67
|
+
# JCI, ESI, warning flags, and selected rank datasets.
|
|
68
|
+
# Configure through `paper-search setup EASYSCHOLAR_KEY` when possible so the
|
|
69
|
+
# SecretKey is entered through a hidden prompt instead of appearing in shell history.
|
|
70
|
+
EASYSCHOLAR_KEY=your_easyscholar_secret_key_here
|
|
71
|
+
# Legacy-compatible fallback name
|
|
72
|
+
PAPER_SEARCH_EASYSCHOLAR_KEY=your_easyscholar_secret_key_here
|
|
73
|
+
|
|
52
74
|
# ------------------------------------------------------------------------------
|
|
53
75
|
# Unpaywall - REQUIRED for DOI-based open-access resolution
|
|
54
76
|
# ------------------------------------------------------------------------------
|
|
@@ -138,11 +160,17 @@ WILEY_TDM_TOKEN=your_wiley_tdm_token_here
|
|
|
138
160
|
# bioRxiv | ✅ Free | Biology preprints, PDF | Biology research
|
|
139
161
|
# medRxiv | ✅ Free | Medical preprints, PDF | Medical research
|
|
140
162
|
# Semantic Scholar | 🟡 Optional| AI-powered search, citations | CS, AI research
|
|
163
|
+
# EasyScholar | 🔴 Required| IF, JCR/CAS zones, JCI, ESI | Journal metrics
|
|
141
164
|
# CORE | 🟡 Optional| Repository PDFs | Open repositories
|
|
142
165
|
# OpenAIRE | 🟡 Optional| Repository discovery | Open repositories
|
|
166
|
+
# DBLP | ✅ Free | CS bibliography metadata | CS literature
|
|
167
|
+
# ACM metadata | ✅ Free | Crossref DOI-prefix metadata | ACM papers
|
|
168
|
+
# USENIX metadata | ✅ Free | DBLP-backed proceedings data | Systems/security
|
|
169
|
+
# OpenReview | ✅ Free | Notes/search metadata | ML conferences
|
|
143
170
|
# Unpaywall | 📧 Email | DOI OA resolution | Fallback downloads
|
|
144
171
|
# IACR ePrint | ✅ Free | Cryptography papers, PDF | Cryptography
|
|
145
172
|
# Sci-Hub | ✅ Free | Universal DOI access | Any paper by DOI
|
|
173
|
+
# IEEE Xplore | 🔴 Required| IEEE metadata | Engineering
|
|
146
174
|
# ScienceDirect | 🔴 Required| Elsevier journals | Full-text search
|
|
147
175
|
# Springer | 🔴 Required| Dual API (Meta+OpenAccess) | Books & journals
|
|
148
176
|
# Wiley | 🔴 Required| TDM API, full text mining | Data mining
|
package/README-sc.md
CHANGED
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md)
|
|
4
4
|
|
|
5
|
-
Paper Search CLI 是一个独立的 Node.js
|
|
6
|
-
|
|
7
|
-
它继承了之前 Paper Search 实现中的平台覆盖、统一数据模型和详细功能说明,但运行方式已经收口为普通 CLI:每次调用执行一次命令,执行完即退出,不需要配置、启动或维护长期后台服务。
|
|
5
|
+
Paper Search CLI 是一个独立的 Node.js 命令行工具,用于跨多个学术来源检索论文、核验元数据、EasyScholar 检索影响因子和期刊分区等信息、下载 PDF。它面向终端直接使用、自动化脚本和 agent 工作流,提供稳定命令入口和可预测的 JSON 输出。
|
|
8
6
|
|
|
9
7
|

|
|
10
8
|

|
|
11
9
|

|
|
12
|
-

|
|
11
|
+

|
|
14
12
|
[](https://linux.do)
|
|
15
13
|
|
|
16
14
|
感谢真诚、友善、团结、专业的 [LinuxDo](https://linux.do) 社区。本项目的 CLI + Skill 路线和论文检索工作流改进,来自社区交流与开源分享的启发。
|
|
@@ -27,16 +25,11 @@ Paper Search CLI 是一个独立的 Node.js 命令行工具,用于跨多个学
|
|
|
27
25
|
|
|
28
26
|
## 核心特性
|
|
29
27
|
|
|
30
|
-
- **
|
|
31
|
-
-
|
|
32
|
-
- **JSON 优先输出**:stdout 默认输出 JSON,stderr 保留给人类可读日志和错误。
|
|
33
|
-
- **统一论文数据模型**:标准化标题、作者、DOI、来源、日期、摘要、PDF 链接、引用数和平台扩展字段。
|
|
34
|
-
- **多源检索与去重**:用 `--sources crossref,openalex,pmc` 选择来源,或用 `platform=all` 尝试所有已注册检索来源,再按 DOI、标题+作者合并重复结果。
|
|
35
|
-
- **Semantic Scholar 正文片段检索**:`search_semantic_snippets` 用于检索 Semantic Scholar Open Access snippet 索引中的正文片段,适合查找论文中的方法学细节。该功能需要 `SEMANTIC_SCHOLAR_API_KEY`。
|
|
36
|
-
- **开放获取优先下载链**:`download_with_fallback` 会先尝试原生下载、结果里的 PDF URL、PMC/Europe PMC/CORE/OpenAIRE、Unpaywall DOI 解析,只有显式开启时才把 Sci-Hub 作为最后兜底。
|
|
37
|
-
- **限速与重试**:内置平台级限速和可重试 API 错误处理。
|
|
28
|
+
- **25 个学术来源/平台**:Crossref、OpenAlex、PubMed、PubMed Central、Europe PMC、arXiv、bioRxiv、medRxiv、Semantic Scholar、CORE、OpenAIRE、DBLP、ACM Digital Library 元数据、USENIX 元数据、OpenReview、Web of Science、Google Scholar、IACR ePrint、Sci-Hub、IEEE Xplore、ScienceDirect、Springer Nature/SpringerLink、Wiley、Scopus、Unpaywall。
|
|
29
|
+
- **EasyScholar 影响因子与期刊分区检索**:检索影响因子、5 年影响因子、JCR/SSCI 分区、中科院分区、JCI、ESI、预警字段,以及可选的官方/自定义原始等级字段等。
|
|
38
30
|
- **PDF 下载支持**:支持 arXiv、bioRxiv、medRxiv、Semantic Scholar、IACR、Sci-Hub、Springer 开放获取、Wiley DOI 下载等路径。
|
|
39
|
-
-
|
|
31
|
+
- **正文片段检索**:用于检索论文正文片段,数据来源于 Semantic Scholar 中,适合查找论文中的方法学细节等。
|
|
32
|
+
- **适合 agent 调用**:`tools`、`status`、`search`、`journal-metrics`、`download`、`run` 覆盖简单检索和精确工具调用。
|
|
40
33
|
|
|
41
34
|
## 快速开始
|
|
42
35
|
|
|
@@ -51,6 +44,7 @@ paper-search search "machine learning" --platform crossref --max-results 3 --pre
|
|
|
51
44
|
```
|
|
52
45
|
|
|
53
46
|
安装后运行 `paper-search setup`,即可把可选 API key 和 email 写入用户级配置。
|
|
47
|
+
其中 Unpaywall 和 Crossref 的邮箱项可以直接回车跳过,CLI 会自动写入一个随机前缀的 Gmail 格式邮箱;如果你想使用自己的邮箱,后续再用 `paper-search config set` 覆盖即可。
|
|
54
48
|
|
|
55
49
|
如果你需要本地开发版,或要验证尚未发布的改动,可以从源码安装:
|
|
56
50
|
|
|
@@ -72,37 +66,103 @@ paper-search config doctor --pretty
|
|
|
72
66
|
|
|
73
67
|
## 支持的平台
|
|
74
68
|
|
|
69
|
+
### 平台类型
|
|
70
|
+
|
|
71
|
+
下面的能力表仍然是平台能力的准确信息来源。除 25 个论文检索/获取来源外,CLI 还提供 EasyScholar 影响因子、期刊分区等检索;EasyScholar 不参与 `platform=all` 或 `--sources`,应使用 `journal-metrics` / `query_journal_metrics` 调用。
|
|
72
|
+
|
|
73
|
+
如果只是快速选择检索来源或查询工具,可以先按这些类型判断:
|
|
74
|
+
|
|
75
|
+
| 类型 | 平台 | 适合场景 |
|
|
76
|
+
| --- | --- | --- |
|
|
77
|
+
| 综合检索 | Crossref、OpenAlex、Semantic Scholar、Google Scholar | 广覆盖发现、DOI 元数据、引用线索、文献初筛 |
|
|
78
|
+
| 影响因子/期刊分区 | EasyScholar | 影响因子、5 年影响因子、JCR/SSCI 分区、中科院分区、JCI、ESI、预警和等级信息 |
|
|
79
|
+
| 医学/生命科学 | PubMed、PubMed Central、Europe PMC | 临床、生物医学、公卫、生物医学元数据和开放全文 |
|
|
80
|
+
| 预印本/会议稿 | arXiv、bioRxiv、medRxiv、OpenReview、IACR ePrint | 跨学科预印本、生命科学/医学预印本、AI/ML 投稿和密码学 ePrint |
|
|
81
|
+
| 计算机/工程 | DBLP、ACM Digital Library 元数据、IEEE Xplore、USENIX | CS 文献目录、工程数据库、系统/安全会议论文 |
|
|
82
|
+
| 开放全文/仓储 | CORE、OpenAIRE、Unpaywall | 跨学科仓储发现和开放获取 PDF 回退路径 |
|
|
83
|
+
| 引文库/出版商 | Web of Science、Scopus、ScienceDirect、Springer Nature/SpringerLink、Wiley | 机构权限型元数据、引文数据库、出版商记录和下载 |
|
|
84
|
+
| DOI 定向获取 | Sci-Hub | DOI 定向获取,并作为 PDF 下载漏斗的最后自动兜底;除非传入 `useSciHub=false` |
|
|
85
|
+
|
|
86
|
+
部分平台会跨多个实际工作流。例如 Semantic Scholar 既适合广覆盖检索,也常用于 CS/AI;arXiv 覆盖计算机、数学、物理和部分定量学科。这里按主要使用方式归类;做计算机方向检索时,通常会同时用“计算机/工程”和“预印本/会议稿”两组。
|
|
87
|
+
|
|
88
|
+
### 能力矩阵
|
|
89
|
+
|
|
90
|
+
#### 综合检索
|
|
91
|
+
|
|
75
92
|
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
76
93
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
77
94
|
| Crossref | ✅ | ❌ | ❌ | ✅ | ❌ | 默认搜索平台,广泛元数据覆盖 |
|
|
78
95
|
| OpenAlex | ✅ | 🟡 条件支持 | ❌ | ✅ | ❌ | 广泛免费元数据;记录含开放链接时可用于回退下载 |
|
|
79
|
-
|
|
|
80
|
-
|
|
|
96
|
+
| Semantic Scholar | ✅ | ✅ | ✅ 正文片段 | ✅ | 🟡 可选* | AI 语义检索 + OA 正文片段 |
|
|
97
|
+
| Google Scholar | ✅ | ❌ | ❌ | ✅ | ❌ | 广泛学术发现,基于页面解析 |
|
|
98
|
+
|
|
99
|
+
#### 影响因子与期刊分区
|
|
100
|
+
|
|
101
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
102
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
103
|
+
| EasyScholar | ✅ 影响因子/分区检索 | ❌ | ❌ | ❌ | ✅ 必需 | 影响因子、5 年影响因子、JCR/SSCI 分区、中科院分区、JCI、ESI、预警字段,以及可选的官方/自定义原始等级字段 |
|
|
104
|
+
|
|
105
|
+
#### 医学/生命科学
|
|
106
|
+
|
|
107
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
108
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
81
109
|
| PubMed | ✅ | ❌ | ❌ | ❌ | 🟡 可选 | NCBI E-utilities 生物医学文献 |
|
|
82
110
|
| PubMed Central | ✅ | ✅ | ✅ | ❌ | ❌ | 生物医学开放全文和 PMC PDF |
|
|
83
111
|
| Europe PMC | ✅ | ✅ | ✅ | ❌ | ❌ | 生物医学元数据和开放全文链接 |
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
|
112
|
+
|
|
113
|
+
#### 计算机/工程
|
|
114
|
+
|
|
115
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
116
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
117
|
+
| DBLP | ✅ | ❌ | ❌ | ❌ | ❌ | 通过官方 DBLP search API 检索计算机文献目录 |
|
|
118
|
+
| ACM Digital Library | ✅ | ❌ | ❌ | ✅ | ❌ | 通过 Crossref 的 ACM DOI 前缀元数据检索;不抓取 ACM 页面 |
|
|
119
|
+
| USENIX | ✅ | ❌ | ❌ | ❌ | ❌ | 基于 DBLP 的 USENIX 会议元数据;不抓取 USENIX 搜索页 |
|
|
120
|
+
| IEEE Xplore | ✅ | ❌ | ❌ | ✅ | ✅ 必需 | 通过官方 IEEE Xplore Metadata API 检索 IEEE 元数据 |
|
|
121
|
+
|
|
122
|
+
#### 开放全文/仓储
|
|
123
|
+
|
|
124
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
125
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
88
126
|
| CORE | ✅ | 🟡 条件支持 | 🟡 条件支持 | ❌ | 🟡 可选 | 记录含 PDF 或全文链接时可下载 |
|
|
89
127
|
| OpenAIRE | ✅ | 🟡 条件支持 | ❌ | ❌ | 🟡 可选 | 记录含开放链接时可用于回退下载 |
|
|
90
128
|
| Unpaywall | 🟡 条件支持 | 🟡 条件支持 | ❌ | ❌ | ✅ 必需 | 仅支持 DOI 查询;需要 email;发现 OA PDF 时可下载 |
|
|
129
|
+
|
|
130
|
+
#### 预印本/会议稿
|
|
131
|
+
|
|
132
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
133
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
134
|
+
| arXiv | ✅ | ✅ | ✅ | ❌ | ❌ | 物理、计算机、数学等预印本 |
|
|
135
|
+
| bioRxiv | ✅ | ✅ | ✅ | ❌ | ❌ | 生物学预印本 |
|
|
136
|
+
| medRxiv | ✅ | ✅ | ✅ | ❌ | ❌ | 医学预印本 |
|
|
137
|
+
| OpenReview | ✅ | ❌ | ❌ | ❌ | ❌ | 通过公开 OpenReview notes search 检索会议投稿、评审和预印本 |
|
|
91
138
|
| IACR ePrint | ✅ | ✅ | ✅ | ❌ | ❌ | 密码学论文 |
|
|
92
|
-
|
|
139
|
+
|
|
140
|
+
#### 引文库/出版商
|
|
141
|
+
|
|
142
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
143
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
144
|
+
| Web of Science | ✅ | ❌ | ❌ | ✅ | ✅ 必需 | 引文数据库、日期排序、年份范围 |
|
|
93
145
|
| ScienceDirect | ✅ | ❌ | ❌ | ✅ | ✅ 必需 | Elsevier 元数据和摘要 |
|
|
94
|
-
| Springer Nature | ✅ | 🟡 条件支持 | ❌ | ❌ | ✅ 必需 |
|
|
146
|
+
| Springer Nature / SpringerLink | ✅ | 🟡 条件支持 | ❌ | ❌ | ✅ 必需 | `springerlink` 是现有 Springer Nature 集成的别名 |
|
|
95
147
|
| Wiley | ❌ 关键词搜索 | ✅ | ✅ | ❌ | ✅ 必需 | TDM API,仅支持 DOI 下载 PDF |
|
|
96
148
|
| Scopus | ✅ | ❌ | ❌ | ✅ | ✅ 必需 | 摘要和引文数据库 |
|
|
97
149
|
|
|
150
|
+
#### DOI 定向获取
|
|
151
|
+
|
|
152
|
+
| 平台 | 搜索 | 下载 | 全文 | 被引统计 | API Key | 特色功能 |
|
|
153
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
154
|
+
| Sci-Hub | ✅ | ✅ | ❌ | ❌ | ❌ | 基于 DOI 查询和下载 |
|
|
155
|
+
|
|
98
156
|
说明:
|
|
99
157
|
|
|
100
158
|
- 能力列中,`✅` 表示直接支持,`❌` 表示不支持,`🟡 条件支持` 表示只在满足条件时可用,例如记录里含 PDF/开放获取链接、只能按 DOI 查询,或只能下载开放获取记录。
|
|
101
159
|
- API Key 列中,`❌` 表示不需要配置,`🟡 可选` 表示不配置也能用但限额或稳定性较弱,`✅ 必需` 表示只在启用该平台时必须配置,不代表新用户默认都要配置。Unpaywall 需要的是 email,不是传统 API key。
|
|
102
160
|
- Wiley TDM API 不支持关键词搜索。应先用 `search_crossref` 找到 Wiley 文章 DOI,再用 `download_paper` 配合 `platform=wiley` 下载。
|
|
161
|
+
- ACM 和 USENIX 检索刻意走元数据后端,不抓取平台搜索页,以遵守 robots.txt 并降低 IP 被封风险。
|
|
103
162
|
- `platform=all` 会尝试所有已注册检索来源,但不包含 Wiley 这类只支持 DOI 下载、不能关键词搜索的平台。未配置 key、超时或请求失败的来源会写入 `failed_sources` / `errors`,其他来源继续返回。
|
|
104
163
|
- `--sources` 接受逗号分隔来源,例如 `--sources crossref,openalex,pmc`。
|
|
105
164
|
- `🟡 可选*` 对 Semantic Scholar 的含义是:普通检索可选;`search_semantic_snippets` 正文片段检索必需配置 `SEMANTIC_SCHOLAR_API_KEY`。
|
|
165
|
+
- EasyScholar 是影响因子、期刊分区等检索工具,不是论文检索来源;使用 `paper-search journal-metrics "Nature"` 或 `paper-search run query_journal_metrics`。
|
|
106
166
|
|
|
107
167
|
## 配置
|
|
108
168
|
|
|
@@ -111,7 +171,8 @@ paper-search config doctor --pretty
|
|
|
111
171
|
```bash
|
|
112
172
|
paper-search setup
|
|
113
173
|
paper-search config set SEMANTIC_SCHOLAR_API_KEY your_semantic_scholar_api_key_here
|
|
114
|
-
paper-search
|
|
174
|
+
paper-search setup EASYSCHOLAR_KEY # 隐藏输入;更适合配置 EasyScholar SecretKey
|
|
175
|
+
paper-search config set PAPER_SEARCH_UNPAYWALL_EMAIL you@example.com # 可选:手动覆盖 setup 自动生成的邮箱
|
|
115
176
|
paper-search config list --pretty
|
|
116
177
|
paper-search config doctor --pretty
|
|
117
178
|
paper-search diagnostics --pretty
|
|
@@ -125,7 +186,7 @@ paper-search diagnostics --pretty
|
|
|
125
186
|
|
|
126
187
|
配置文件权限会写成 `0600`。`config list` 和 `config doctor` 会自动脱敏。
|
|
127
188
|
|
|
128
|
-
`paper-search setup` 是引导式配置命令。默认只询问推荐配置:Semantic Scholar、Unpaywall email、Crossref email 和
|
|
189
|
+
`paper-search setup` 是引导式配置命令。默认只询问推荐配置:Semantic Scholar、Unpaywall email、Crossref email、CORE 和 EasyScholar。需要遍历所有支持项时使用 `paper-search setup --all`;只想配置指定项时使用 `paper-search setup --keys SEMANTIC_SCHOLAR_API_KEY,CORE_API_KEY`。
|
|
129
190
|
|
|
130
191
|
为降低首次配置成本,如果 `PAPER_SEARCH_UNPAYWALL_EMAIL` / `UNPAYWALL_EMAIL` / `CROSSREF_MAILTO` 尚未配置,setup 时直接回车会自动写入一个随机前缀的 Gmail 格式邮箱,例如 `paper.search.xxxxxx@gmail.com`,用于让 Unpaywall 和 Crossref 的基础请求能直接运行。
|
|
131
192
|
|
|
@@ -138,11 +199,13 @@ paper-search diagnostics --pretty
|
|
|
138
199
|
| 等级 | 配置项 | 是否建议新用户配置 | 说明 |
|
|
139
200
|
| --- | --- | --- | --- |
|
|
140
201
|
| 默认推荐 | `SEMANTIC_SCHOLAR_API_KEY` | 建议配置 | 开启 Semantic Scholar 正文片段检索,适合方法学细节检索,也能提高请求稳定性。 |
|
|
141
|
-
| 默认推荐 | `PAPER_SEARCH_UNPAYWALL_EMAIL` 或 `UNPAYWALL_EMAIL` | 建议配置 | 用 DOI 查找开放获取 PDF;只需要邮箱,不需要申请 API key
|
|
142
|
-
| 默认推荐 | `CROSSREF_MAILTO` | 建议配置 | 让 Crossref 请求进入 polite pool
|
|
202
|
+
| 默认推荐 | `PAPER_SEARCH_UNPAYWALL_EMAIL` 或 `UNPAYWALL_EMAIL` | 建议配置 | 用 DOI 查找开放获取 PDF;只需要邮箱,不需要申请 API key。`setup` 直接回车会自动生成随机 Gmail 格式邮箱,也可以手动换成自己的邮箱。 |
|
|
203
|
+
| 默认推荐 | `CROSSREF_MAILTO` | 建议配置 | 让 Crossref 请求进入 polite pool,适合长期或高频检索。`setup` 直接回车会复用自动生成的邮箱,也可以手动换成自己的邮箱。 |
|
|
143
204
|
| 默认推荐 | `CORE_API_KEY` 或 `PAPER_SEARCH_CORE_API_KEY` | 建议配置 | CORE 匿名访问容易限流;配置 key 后更适合开放仓储检索。 |
|
|
205
|
+
| 默认推荐 | `EASYSCHOLAR_KEY` 或 `PAPER_SEARCH_EASYSCHOLAR_KEY` | 需要检索影响因子、期刊分区等时建议配置 | 开启 EasyScholar 检索影响因子、JCR 分区、中科院分区、JCI、ESI 和预警字段等能力。建议用 `paper-search setup EASYSCHOLAR_KEY` 通过隐藏输入配置 SecretKey。 |
|
|
144
206
|
| 生物医学高频 | `PUBMED_API_KEY`、`NCBI_EMAIL`、`NCBI_TOOL` | 经常用 PubMed 时建议配置 | 提高 NCBI E-utilities 限额,并让请求带上明确客户端信息。 |
|
|
145
207
|
| 机构权限型 | `WOS_API_KEY` | 有 Web of Science API 权限再配置 | 用于 Web of Science 检索和引文数据;需要 Clarivate API 权限。 |
|
|
208
|
+
| 机构权限型 | `IEEE_API_KEY` | 有 IEEE Xplore API 权限再配置 | 用于 IEEE Xplore 元数据检索;IEEE 可能要求注册 API 访问和产品权限。 |
|
|
146
209
|
| 机构权限型 | `ELSEVIER_API_KEY` | 有 Scopus 或 ScienceDirect API 权限再配置 | 同一个 Elsevier key 不等于自动拥有两个产品权限,Scopus 和 ScienceDirect 需要分别开通。 |
|
|
147
210
|
| 机构权限型 | `SPRINGER_API_KEY`、`SPRINGER_OPENACCESS_API_KEY` | 需要 Springer 平台时再配置 | 用于 Springer 元数据和开放获取记录;401 通常表示 key 无效或产品权限未开通。 |
|
|
148
211
|
| 机构权限型 | `WILEY_TDM_TOKEN` | 有 Wiley TDM/机构全文权限再配置 | 仅支持 DOI 下载;能否下载取决于 token 和机构订阅权限。 |
|
|
@@ -174,6 +237,9 @@ cp .env.example .env
|
|
|
174
237
|
WOS_API_KEY=your_web_of_science_api_key_here
|
|
175
238
|
WOS_API_VERSION=v1
|
|
176
239
|
|
|
240
|
+
# IEEE Xplore,IEEE 元数据检索必需
|
|
241
|
+
IEEE_API_KEY=your_ieee_api_key_here
|
|
242
|
+
|
|
177
243
|
# PubMed,可选;从 3 requests/sec 提升到 10 requests/sec
|
|
178
244
|
PUBMED_API_KEY=your_ncbi_api_key_here
|
|
179
245
|
NCBI_EMAIL=you@example.com
|
|
@@ -182,6 +248,9 @@ NCBI_TOOL=paper-search-cli
|
|
|
182
248
|
# Semantic Scholar,正文片段检索必需,也可提升请求限额
|
|
183
249
|
SEMANTIC_SCHOLAR_API_KEY=your_semantic_scholar_api_key_here
|
|
184
250
|
|
|
251
|
+
# EasyScholar,检索影响因子、JCR 分区和中科院分区等信息时必需
|
|
252
|
+
EASYSCHOLAR_KEY=your_easyscholar_secret_key_here
|
|
253
|
+
|
|
185
254
|
# Elsevier,Scopus 和 ScienceDirect 必需;两个产品仍需要分别开通权限
|
|
186
255
|
ELSEVIER_API_KEY=your_elsevier_api_key_here
|
|
187
256
|
|
|
@@ -192,10 +261,10 @@ SPRINGER_OPENACCESS_API_KEY=your_openaccess_api_key_here
|
|
|
192
261
|
# Wiley TDM,Wiley DOI 下载必需
|
|
193
262
|
WILEY_TDM_TOKEN=your_wiley_tdm_token_here
|
|
194
263
|
|
|
195
|
-
# Crossref polite pool
|
|
264
|
+
# Crossref polite pool,可选但推荐;setup 直接回车会自动生成/复用随机 Gmail 格式邮箱
|
|
196
265
|
CROSSREF_MAILTO=you@example.com
|
|
197
266
|
|
|
198
|
-
# Unpaywall,DOI
|
|
267
|
+
# Unpaywall,DOI 开放获取解析必需;setup 直接回车会自动生成随机 Gmail 格式邮箱
|
|
199
268
|
PAPER_SEARCH_UNPAYWALL_EMAIL=you@example.com
|
|
200
269
|
UNPAYWALL_EMAIL=you@example.com
|
|
201
270
|
|
|
@@ -211,8 +280,10 @@ OPENAIRE_API_KEY=your_openaire_api_key_here
|
|
|
211
280
|
### API Key 获取入口
|
|
212
281
|
|
|
213
282
|
- Web of Science: [Clarivate Developer Portal](https://developer.clarivate.com/apis)
|
|
283
|
+
- IEEE Xplore: [IEEE Xplore Metadata API](https://developer.ieee.org/docs/read/Searching_the_IEEE_Xplore_Metadata_API)
|
|
214
284
|
- PubMed: [NCBI API Keys](https://ncbiinsights.ncbi.nlm.nih.gov/2017/11/02/new-api-keys-for-the-e-utilities/)
|
|
215
285
|
- Semantic Scholar: [Semantic Scholar API](https://www.semanticscholar.org/product/api)
|
|
286
|
+
- EasyScholar: [EasyScholar Open API](https://www.easyscholar.cc/console/user/open)
|
|
216
287
|
- Elsevier: [Elsevier Developer Portal](https://dev.elsevier.com/apikey/manage)
|
|
217
288
|
- Springer Nature: [Springer Nature Developers](https://dev.springernature.com/)
|
|
218
289
|
- Wiley TDM: [Wiley Text and Data Mining](https://onlinelibrary.wiley.com/library-info/resources/text-and-datamining)
|
|
@@ -319,8 +390,20 @@ paper-search run search_crossref --arg query="machine learning" --arg maxResults
|
|
|
319
390
|
paper-search run search_papers --json-args '{"query":"machine learning","sources":"crossref,openalex","maxResults":2}' --pretty
|
|
320
391
|
paper-search run search_pubmed --json-args '{"query":"osteoarthritis","maxResults":5,"sortBy":"date"}' --pretty
|
|
321
392
|
paper-search run get_paper_by_doi --arg doi="10.1038/nature12373" --pretty
|
|
393
|
+
paper-search run query_journal_metrics --json-args '{"journals":["Nature","BMJ"],"includeRaw":true}' --pretty
|
|
322
394
|
```
|
|
323
395
|
|
|
396
|
+
### `paper-search journal-metrics`
|
|
397
|
+
|
|
398
|
+
通过 EasyScholar 检索影响因子、期刊分区等信息。需要配置 `EASYSCHOLAR_KEY` 或 `PAPER_SEARCH_EASYSCHOLAR_KEY`。
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
paper-search journal-metrics "Nature" "BMJ" --pretty
|
|
402
|
+
paper-search journal-metrics --file journals.txt --include-raw --pretty
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
标准化返回字段包括 `impact_factor`、`impact_factor_5y`、`jcr_quartile`、`ssci_quartile`、`jci`、`cas_base`、`cas_upgraded`、`cas_small`、`cas_top`、`cas_zone`、`esi`、`warning`、`pku`、`cssci`、`cscd`、`ahci`、`ccf`、`ei` 和 `china_st_core`,具体以 EasyScholar 对该期刊实际返回字段为准。加 `--include-raw` 会额外保留 `official_all`、`official_select` 和 `custom_rank`。
|
|
406
|
+
|
|
324
407
|
### `paper-search tools`
|
|
325
408
|
|
|
326
409
|
列出全部可用工具名、说明和输入 schema。
|
|
@@ -357,7 +440,7 @@ paper-search diagnostics --pretty
|
|
|
357
440
|
```bash
|
|
358
441
|
paper-search config init --pretty
|
|
359
442
|
paper-search config set SEMANTIC_SCHOLAR_API_KEY your_key --pretty
|
|
360
|
-
paper-search config set PAPER_SEARCH_UNPAYWALL_EMAIL you@example.com --pretty
|
|
443
|
+
paper-search config set PAPER_SEARCH_UNPAYWALL_EMAIL you@example.com --pretty # 可选:手动覆盖 setup 自动生成的邮箱
|
|
361
444
|
paper-search config import-env .env --pretty
|
|
362
445
|
paper-search config list --pretty
|
|
363
446
|
paper-search config doctor --pretty
|
|
@@ -398,8 +481,9 @@ paper-search run search_papers --json-args '{"query":"machine learning","platfor
|
|
|
398
481
|
|
|
399
482
|
```text
|
|
400
483
|
crossref, arxiv, webofscience, wos, pubmed, biorxiv, medrxiv, semantic,
|
|
401
|
-
iacr, googlescholar, scholar, scihub, sciencedirect, springer,
|
|
402
|
-
openalex, unpaywall, pmc, europepmc, core,
|
|
484
|
+
iacr, googlescholar, scholar, scihub, ieee, sciencedirect, springer,
|
|
485
|
+
springerlink, scopus, openalex, unpaywall, pmc, europepmc, core,
|
|
486
|
+
openaire, dblp, acm, usenix, openreview, all
|
|
403
487
|
```
|
|
404
488
|
|
|
405
489
|
多源检索使用 `sources`:
|
|
@@ -447,6 +531,24 @@ paper-search run search_openaire --arg query="machine learning" --arg maxResults
|
|
|
447
531
|
|
|
448
532
|
Unpaywall 只支持 DOI,且需要配置 email。CORE 匿名访问可能很快返回空结果或被限流,长期使用建议配置 API key。
|
|
449
533
|
|
|
534
|
+
### 注册表驱动的平台检索
|
|
535
|
+
|
|
536
|
+
这些偏元数据检索的工具由平台注册表生成;后续接入新平台时,只需要增加新的 searcher 和平台注册信息:
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
paper-search run search_dblp --arg query="graph neural networks" --arg maxResults=5 --pretty
|
|
540
|
+
paper-search run search_acm --arg query="software testing" --arg maxResults=5 --pretty
|
|
541
|
+
paper-search run search_usenix --arg query="file systems" --arg maxResults=5 --pretty
|
|
542
|
+
paper-search run search_openreview --arg query="large language models" --arg maxResults=5 --pretty
|
|
543
|
+
paper-search run search_springerlink --arg query="machine learning" --arg maxResults=5 --pretty
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
`search_ieee` 使用同一套通用参数,但需要配置 `IEEE_API_KEY`:
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
paper-search run search_ieee --arg query="wireless networks" --arg maxResults=5 --arg articleTitle="wireless" --pretty
|
|
550
|
+
```
|
|
551
|
+
|
|
450
552
|
### `search_webofscience`
|
|
451
553
|
|
|
452
554
|
搜索 Web of Science。需要 `WOS_API_KEY`。
|
|
@@ -488,6 +590,17 @@ paper-search run search_semantic_scholar --json-args '{"query":"graph neural net
|
|
|
488
590
|
paper-search run search_semantic_snippets --arg query="CMAverse mediation bootstrap confidence interval" --arg limit=5 --arg fieldsOfStudy=Medicine --pretty
|
|
489
591
|
```
|
|
490
592
|
|
|
593
|
+
### `query_journal_metrics`
|
|
594
|
+
|
|
595
|
+
检索 EasyScholar 影响因子、期刊分区等信息。它不是论文检索来源,而是影响因子与期刊分区检索工具,适合投稿规划、目标期刊筛选和投稿前检查。需要配置 `EASYSCHOLAR_KEY` 或 `PAPER_SEARCH_EASYSCHOLAR_KEY`。
|
|
596
|
+
|
|
597
|
+
```bash
|
|
598
|
+
paper-search run query_journal_metrics --json-args '{"journals":["Nature","BMJ"]}' --pretty
|
|
599
|
+
paper-search run query_journal_metrics --json-args '{"journal":"Journal of Medical Internet Research","includeRaw":true}' --pretty
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
标准化的 `core` 对象只返回 EasyScholar 对该期刊实际存在的字段,例如影响因子、JCR/SSCI 分区、中科院分区、JCI、ESI、预警字段和中文/学科等级信息。需要完整官方和自定义等级数据时,使用 `includeRaw=true` 保留 `officialRank.all`、`officialRank.select` 和 `customRank`。
|
|
603
|
+
|
|
491
604
|
### `search_iacr`
|
|
492
605
|
|
|
493
606
|
搜索 IACR ePrint Archive。
|
|
@@ -549,29 +662,31 @@ paper-search run get_paper_by_doi --arg doi="10.1038/nature12373" --arg platform
|
|
|
549
662
|
|
|
550
663
|
### `download_paper`
|
|
551
664
|
|
|
552
|
-
|
|
665
|
+
从指定平台下载 PDF。如果该平台没有原生下载器,或原生下载失败,会进入与 `download_with_fallback` 相同的下载漏斗。
|
|
553
666
|
|
|
554
667
|
```bash
|
|
555
668
|
paper-search run download_paper --arg paperId="2301.00001" --arg platform=arxiv --arg savePath=./downloads --pretty
|
|
556
669
|
```
|
|
557
670
|
|
|
558
|
-
|
|
671
|
+
原生下载平台:
|
|
559
672
|
|
|
560
673
|
```text
|
|
561
674
|
arxiv, biorxiv, medrxiv, semantic, iacr, scihub, springer, wiley,
|
|
562
675
|
pmc, europepmc, core
|
|
563
676
|
```
|
|
564
677
|
|
|
678
|
+
其他已注册来源,例如 `crossref`、`openalex`、`dblp`、`acm`、`usenix`、`openreview`,也可以传给 `download_paper`;它们会直接进入元数据/仓储/Unpaywall/Sci-Hub 回退漏斗。
|
|
679
|
+
|
|
565
680
|
### `download_with_fallback`
|
|
566
681
|
|
|
567
|
-
|
|
682
|
+
按完整下载漏斗尝试下载。顺序是原生下载、元数据 PDF URL、仓储发现、Unpaywall DOI 解析,最后默认使用 Sci-Hub 兜底:
|
|
568
683
|
|
|
569
684
|
```bash
|
|
570
685
|
paper-search run download_with_fallback --arg source=arxiv --arg paperId=1201.0490 --arg doi=10.48550/arxiv.1201.0490 --arg savePath=./downloads --pretty
|
|
571
|
-
paper-search run download_with_fallback --arg source=crossref --arg paperId="10.1038/nature12373" --arg doi="10.1038/nature12373" --arg savePath=./downloads --
|
|
686
|
+
paper-search run download_with_fallback --arg source=crossref --arg paperId="10.1038/nature12373" --arg doi="10.1038/nature12373" --arg savePath=./downloads --pretty
|
|
572
687
|
```
|
|
573
688
|
|
|
574
|
-
`useSciHub` 默认为 `false
|
|
689
|
+
`useSciHub` 默认为 `true`;只有需要关闭该最后兜底路径时才设置为 `false`。`download_paper` 在指定平台下载失败或平台不支持直接下载时,也会进入同一条漏斗。
|
|
575
690
|
|
|
576
691
|
### `search_wiley`
|
|
577
692
|
|