paper-search-cli 0.1.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 +165 -0
- package/LICENSE +21 -0
- package/README-sc.md +642 -0
- package/README.md +642 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +637 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/ConfigService.d.ts +26 -0
- package/dist/config/ConfigService.d.ts.map +1 -0
- package/dist/config/ConfigService.js +145 -0
- package/dist/config/ConfigService.js.map +1 -0
- package/dist/config/constants.d.ts +140 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +93 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/core/diagnostics.d.ts +43 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +544 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/handleToolCall.d.ts +8 -0
- package/dist/core/handleToolCall.d.ts.map +1 -0
- package/dist/core/handleToolCall.js +440 -0
- package/dist/core/handleToolCall.js.map +1 -0
- package/dist/core/schemas.d.ts +454 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +322 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/searchers.d.ts +45 -0
- package/dist/core/searchers.d.ts.map +1 -0
- package/dist/core/searchers.js +73 -0
- package/dist/core/searchers.js.map +1 -0
- package/dist/core/tools.d.ts +7 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +640 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/models/Paper.d.ts +64 -0
- package/dist/models/Paper.d.ts.map +1 -0
- package/dist/models/Paper.js +70 -0
- package/dist/models/Paper.js.map +1 -0
- package/dist/platforms/ArxivSearcher.d.ts +64 -0
- package/dist/platforms/ArxivSearcher.d.ts.map +1 -0
- package/dist/platforms/ArxivSearcher.js +531 -0
- package/dist/platforms/ArxivSearcher.js.map +1 -0
- package/dist/platforms/BioRxivSearcher.d.ts +47 -0
- package/dist/platforms/BioRxivSearcher.d.ts.map +1 -0
- package/dist/platforms/BioRxivSearcher.js +196 -0
- package/dist/platforms/BioRxivSearcher.js.map +1 -0
- package/dist/platforms/CORESearcher.d.ts +16 -0
- package/dist/platforms/CORESearcher.d.ts.map +1 -0
- package/dist/platforms/CORESearcher.js +148 -0
- package/dist/platforms/CORESearcher.js.map +1 -0
- package/dist/platforms/CrossrefSearcher.d.ts +34 -0
- package/dist/platforms/CrossrefSearcher.d.ts.map +1 -0
- package/dist/platforms/CrossrefSearcher.js +339 -0
- package/dist/platforms/CrossrefSearcher.js.map +1 -0
- package/dist/platforms/EuropePMCSearcher.d.ts +20 -0
- package/dist/platforms/EuropePMCSearcher.d.ts.map +1 -0
- package/dist/platforms/EuropePMCSearcher.js +173 -0
- package/dist/platforms/EuropePMCSearcher.js.map +1 -0
- package/dist/platforms/GoogleScholarSearcher.d.ts +77 -0
- package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -0
- package/dist/platforms/GoogleScholarSearcher.js +262 -0
- package/dist/platforms/GoogleScholarSearcher.js.map +1 -0
- package/dist/platforms/IACRSearcher.d.ts +51 -0
- package/dist/platforms/IACRSearcher.d.ts.map +1 -0
- package/dist/platforms/IACRSearcher.js +339 -0
- package/dist/platforms/IACRSearcher.js.map +1 -0
- package/dist/platforms/OpenAIRESearcher.d.ts +22 -0
- package/dist/platforms/OpenAIRESearcher.d.ts.map +1 -0
- package/dist/platforms/OpenAIRESearcher.js +223 -0
- package/dist/platforms/OpenAIRESearcher.js.map +1 -0
- package/dist/platforms/OpenAlexSearcher.d.ts +14 -0
- package/dist/platforms/OpenAlexSearcher.d.ts.map +1 -0
- package/dist/platforms/OpenAlexSearcher.js +114 -0
- package/dist/platforms/OpenAlexSearcher.js.map +1 -0
- package/dist/platforms/PMCSearcher.d.ts +20 -0
- package/dist/platforms/PMCSearcher.d.ts.map +1 -0
- package/dist/platforms/PMCSearcher.js +177 -0
- package/dist/platforms/PMCSearcher.js.map +1 -0
- package/dist/platforms/PaperSource.d.ts +143 -0
- package/dist/platforms/PaperSource.d.ts.map +1 -0
- package/dist/platforms/PaperSource.js +125 -0
- package/dist/platforms/PaperSource.js.map +1 -0
- package/dist/platforms/PubMedSearcher.d.ts +104 -0
- package/dist/platforms/PubMedSearcher.d.ts.map +1 -0
- package/dist/platforms/PubMedSearcher.js +422 -0
- package/dist/platforms/PubMedSearcher.js.map +1 -0
- package/dist/platforms/SciHubSearcher.d.ts +66 -0
- package/dist/platforms/SciHubSearcher.d.ts.map +1 -0
- package/dist/platforms/SciHubSearcher.js +398 -0
- package/dist/platforms/SciHubSearcher.js.map +1 -0
- package/dist/platforms/ScienceDirectSearcher.d.ts +42 -0
- package/dist/platforms/ScienceDirectSearcher.d.ts.map +1 -0
- package/dist/platforms/ScienceDirectSearcher.js +326 -0
- package/dist/platforms/ScienceDirectSearcher.js.map +1 -0
- package/dist/platforms/ScopusSearcher.d.ts +43 -0
- package/dist/platforms/ScopusSearcher.d.ts.map +1 -0
- package/dist/platforms/ScopusSearcher.js +364 -0
- package/dist/platforms/ScopusSearcher.js.map +1 -0
- package/dist/platforms/SemanticScholarSearcher.d.ts +96 -0
- package/dist/platforms/SemanticScholarSearcher.d.ts.map +1 -0
- package/dist/platforms/SemanticScholarSearcher.js +419 -0
- package/dist/platforms/SemanticScholarSearcher.js.map +1 -0
- package/dist/platforms/SpringerSearcher.d.ts +54 -0
- package/dist/platforms/SpringerSearcher.d.ts.map +1 -0
- package/dist/platforms/SpringerSearcher.js +407 -0
- package/dist/platforms/SpringerSearcher.js.map +1 -0
- package/dist/platforms/UnpaywallSearcher.d.ts +18 -0
- package/dist/platforms/UnpaywallSearcher.d.ts.map +1 -0
- package/dist/platforms/UnpaywallSearcher.js +115 -0
- package/dist/platforms/UnpaywallSearcher.js.map +1 -0
- package/dist/platforms/WebOfScienceSearcher.d.ts +111 -0
- package/dist/platforms/WebOfScienceSearcher.d.ts.map +1 -0
- package/dist/platforms/WebOfScienceSearcher.js +500 -0
- package/dist/platforms/WebOfScienceSearcher.js.map +1 -0
- package/dist/platforms/WileySearcher.d.ts +44 -0
- package/dist/platforms/WileySearcher.d.ts.map +1 -0
- package/dist/platforms/WileySearcher.js +148 -0
- package/dist/platforms/WileySearcher.js.map +1 -0
- package/dist/services/CitationService.d.ts +66 -0
- package/dist/services/CitationService.d.ts.map +1 -0
- package/dist/services/CitationService.js +237 -0
- package/dist/services/CitationService.js.map +1 -0
- package/dist/services/MultiSourceSearchService.d.ts +19 -0
- package/dist/services/MultiSourceSearchService.d.ts.map +1 -0
- package/dist/services/MultiSourceSearchService.js +96 -0
- package/dist/services/MultiSourceSearchService.js.map +1 -0
- package/dist/services/OpenAccessFallbackService.d.ts +20 -0
- package/dist/services/OpenAccessFallbackService.d.ts.map +1 -0
- package/dist/services/OpenAccessFallbackService.js +124 -0
- package/dist/services/OpenAccessFallbackService.js.map +1 -0
- package/dist/utils/ErrorHandler.d.ts +99 -0
- package/dist/utils/ErrorHandler.d.ts.map +1 -0
- package/dist/utils/ErrorHandler.js +266 -0
- package/dist/utils/ErrorHandler.js.map +1 -0
- package/dist/utils/Logger.d.ts +6 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +26 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/PDFExtractor.d.ts +34 -0
- package/dist/utils/PDFExtractor.d.ts.map +1 -0
- package/dist/utils/PDFExtractor.js +130 -0
- package/dist/utils/PDFExtractor.js.map +1 -0
- package/dist/utils/PdfDownload.d.ts +7 -0
- package/dist/utils/PdfDownload.d.ts.map +1 -0
- package/dist/utils/PdfDownload.js +52 -0
- package/dist/utils/PdfDownload.js.map +1 -0
- package/dist/utils/QuotaManager.d.ts +32 -0
- package/dist/utils/QuotaManager.d.ts.map +1 -0
- package/dist/utils/QuotaManager.js +95 -0
- package/dist/utils/QuotaManager.js.map +1 -0
- package/dist/utils/RateLimiter.d.ts +50 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +121 -0
- package/dist/utils/RateLimiter.js.map +1 -0
- package/dist/utils/RequestCache.d.ts +26 -0
- package/dist/utils/RequestCache.d.ts.map +1 -0
- package/dist/utils/RequestCache.js +66 -0
- package/dist/utils/RequestCache.js.map +1 -0
- package/dist/utils/SecurityUtils.d.ts +80 -0
- package/dist/utils/SecurityUtils.d.ts.map +1 -0
- package/dist/utils/SecurityUtils.js +357 -0
- package/dist/utils/SecurityUtils.js.map +1 -0
- package/package.json +111 -0
- package/skills/paper-search/SKILL.md +192 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PMCSearcher.js","sourceRoot":"","sources":["../../src/platforms/PMCSearcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 学术论文搜索平台的抽象基类
|
|
3
|
+
* 定义了所有平台搜索器必须实现的核心接口
|
|
4
|
+
*/
|
|
5
|
+
import { Paper } from '../models/Paper.js';
|
|
6
|
+
import { ErrorHandler } from '../utils/ErrorHandler.js';
|
|
7
|
+
export interface SearchOptions {
|
|
8
|
+
/** 最大结果数量 */
|
|
9
|
+
maxResults?: number;
|
|
10
|
+
/** 年份过滤 */
|
|
11
|
+
year?: string;
|
|
12
|
+
/** 作者过滤 */
|
|
13
|
+
author?: string;
|
|
14
|
+
/** 期刊过滤 */
|
|
15
|
+
journal?: string;
|
|
16
|
+
/** 学科分类过滤 */
|
|
17
|
+
category?: string;
|
|
18
|
+
/** 排序方式 */
|
|
19
|
+
sortBy?: 'relevance' | 'date' | 'citations';
|
|
20
|
+
/** 排序顺序 */
|
|
21
|
+
sortOrder?: 'asc' | 'desc';
|
|
22
|
+
/** 搜索天数范围 (bioRxiv/medRxiv) */
|
|
23
|
+
days?: number;
|
|
24
|
+
/** 是否获取详细信息 (IACR) */
|
|
25
|
+
fetchDetails?: boolean;
|
|
26
|
+
/** 研究领域过滤 (Semantic Scholar) */
|
|
27
|
+
fieldsOfStudy?: string[];
|
|
28
|
+
/** 开放获取过滤 (Springer/ScienceDirect/Scopus) */
|
|
29
|
+
openAccess?: boolean;
|
|
30
|
+
/** 主题过滤 (Springer/Scopus) */
|
|
31
|
+
subject?: string;
|
|
32
|
+
/** 出版物类型过滤 (Springer) */
|
|
33
|
+
type?: 'Journal' | 'Book' | 'Chapter';
|
|
34
|
+
/** 机构过滤 (Scopus) */
|
|
35
|
+
affiliation?: string;
|
|
36
|
+
/** 文档类型过滤 (Scopus) */
|
|
37
|
+
documentType?: 'ar' | 'cp' | 're' | 'bk' | 'ch';
|
|
38
|
+
/** 出版物类型 (PubMed) */
|
|
39
|
+
publicationType?: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface DownloadOptions {
|
|
42
|
+
/** 保存路径 */
|
|
43
|
+
savePath?: string;
|
|
44
|
+
/** 是否覆盖现有文件 */
|
|
45
|
+
overwrite?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface PlatformCapabilities {
|
|
48
|
+
/** 是否支持搜索 */
|
|
49
|
+
search: boolean;
|
|
50
|
+
/** 是否支持PDF下载 */
|
|
51
|
+
download: boolean;
|
|
52
|
+
/** 是否支持全文提取 */
|
|
53
|
+
fullText: boolean;
|
|
54
|
+
/** 是否支持被引统计 */
|
|
55
|
+
citations: boolean;
|
|
56
|
+
/** 是否需要API密钥 */
|
|
57
|
+
requiresApiKey: boolean;
|
|
58
|
+
/** 支持的搜索选项 */
|
|
59
|
+
supportedOptions: (keyof SearchOptions)[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 抽象基类:论文搜索平台
|
|
63
|
+
*/
|
|
64
|
+
export declare abstract class PaperSource {
|
|
65
|
+
protected readonly baseUrl: string;
|
|
66
|
+
protected readonly apiKey?: string;
|
|
67
|
+
protected readonly platformName: string;
|
|
68
|
+
protected readonly errorHandler: ErrorHandler;
|
|
69
|
+
constructor(platformName: string, baseUrl: string, apiKey?: string);
|
|
70
|
+
/**
|
|
71
|
+
* 获取平台能力描述
|
|
72
|
+
*/
|
|
73
|
+
abstract getCapabilities(): PlatformCapabilities;
|
|
74
|
+
/**
|
|
75
|
+
* 搜索论文
|
|
76
|
+
* @param query 搜索查询字符串
|
|
77
|
+
* @param options 搜索选项
|
|
78
|
+
* @returns Promise<Paper[]> 论文列表
|
|
79
|
+
*/
|
|
80
|
+
abstract search(query: string, options?: SearchOptions): Promise<Paper[]>;
|
|
81
|
+
/**
|
|
82
|
+
* 下载PDF文件
|
|
83
|
+
* @param paperId 论文ID
|
|
84
|
+
* @param options 下载选项
|
|
85
|
+
* @returns Promise<string> 下载文件的路径
|
|
86
|
+
*/
|
|
87
|
+
abstract downloadPdf(paperId: string, options?: DownloadOptions): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* 读取论文全文内容
|
|
90
|
+
* @param paperId 论文ID
|
|
91
|
+
* @param options 下载选项(如果需要先下载)
|
|
92
|
+
* @returns Promise<string> 论文全文内容
|
|
93
|
+
*/
|
|
94
|
+
abstract readPaper(paperId: string, options?: DownloadOptions): Promise<string>;
|
|
95
|
+
/**
|
|
96
|
+
* 根据DOI获取论文信息
|
|
97
|
+
* @param doi DOI标识符
|
|
98
|
+
* @returns Promise<Paper | null> 论文信息或null
|
|
99
|
+
*/
|
|
100
|
+
getPaperByDoi(doi: string): Promise<Paper | null>;
|
|
101
|
+
/**
|
|
102
|
+
* 验证API密钥是否有效
|
|
103
|
+
* @returns Promise<boolean> 是否有效
|
|
104
|
+
*/
|
|
105
|
+
validateApiKey(): Promise<boolean>;
|
|
106
|
+
/**
|
|
107
|
+
* 获取平台名称
|
|
108
|
+
*/
|
|
109
|
+
getPlatformName(): string;
|
|
110
|
+
/**
|
|
111
|
+
* 获取基础URL
|
|
112
|
+
*/
|
|
113
|
+
getBaseUrl(): string;
|
|
114
|
+
/**
|
|
115
|
+
* 是否配置了API密钥
|
|
116
|
+
*/
|
|
117
|
+
hasApiKey(): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* 通用的HTTP请求错误处理 - 使用统一ErrorHandler
|
|
120
|
+
*/
|
|
121
|
+
protected handleHttpError(error: any, operation: string): never;
|
|
122
|
+
/**
|
|
123
|
+
* 检查错误是否可重试
|
|
124
|
+
*/
|
|
125
|
+
protected isRetryableError(error: any): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* 获取建议的重试延迟
|
|
128
|
+
*/
|
|
129
|
+
protected getRetryDelay(error: any, attempt?: number): number;
|
|
130
|
+
/**
|
|
131
|
+
* 通用的日期解析
|
|
132
|
+
*/
|
|
133
|
+
protected parseDate(dateString: string): Date | null;
|
|
134
|
+
/**
|
|
135
|
+
* 清理和规范化文本
|
|
136
|
+
*/
|
|
137
|
+
protected cleanText(text: string): string;
|
|
138
|
+
/**
|
|
139
|
+
* 从URL中提取文件名
|
|
140
|
+
*/
|
|
141
|
+
protected extractFilename(url: string, paperId: string, extension?: string): string;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=PaperSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaperSource.d.ts","sourceRoot":"","sources":["../../src/platforms/PaperSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 学术论文搜索平台的抽象基类
|
|
3
|
+
* 定义了所有平台搜索器必须实现的核心接口
|
|
4
|
+
*/
|
|
5
|
+
import { ErrorHandler } from '../utils/ErrorHandler.js';
|
|
6
|
+
import { logDebug } from '../utils/Logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* 抽象基类:论文搜索平台
|
|
9
|
+
*/
|
|
10
|
+
export class PaperSource {
|
|
11
|
+
baseUrl;
|
|
12
|
+
apiKey;
|
|
13
|
+
platformName;
|
|
14
|
+
errorHandler;
|
|
15
|
+
constructor(platformName, baseUrl, apiKey) {
|
|
16
|
+
this.platformName = platformName;
|
|
17
|
+
this.baseUrl = baseUrl;
|
|
18
|
+
this.apiKey = apiKey;
|
|
19
|
+
this.errorHandler = new ErrorHandler(platformName, process.env.NODE_ENV === 'development');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 根据DOI获取论文信息
|
|
23
|
+
* @param doi DOI标识符
|
|
24
|
+
* @returns Promise<Paper | null> 论文信息或null
|
|
25
|
+
*/
|
|
26
|
+
async getPaperByDoi(doi) {
|
|
27
|
+
try {
|
|
28
|
+
const results = await this.search(doi, { maxResults: 1 });
|
|
29
|
+
return results.length > 0 ? results[0] : null;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
logDebug(`Error getting paper by DOI from ${this.platformName}:`, error);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 验证API密钥是否有效
|
|
38
|
+
* @returns Promise<boolean> 是否有效
|
|
39
|
+
*/
|
|
40
|
+
async validateApiKey() {
|
|
41
|
+
if (!this.getCapabilities().requiresApiKey) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
if (!this.apiKey) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
// 尝试一个简单的搜索来验证密钥
|
|
49
|
+
await this.search('test', { maxResults: 1 });
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 获取平台名称
|
|
58
|
+
*/
|
|
59
|
+
getPlatformName() {
|
|
60
|
+
return this.platformName;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 获取基础URL
|
|
64
|
+
*/
|
|
65
|
+
getBaseUrl() {
|
|
66
|
+
return this.baseUrl;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 是否配置了API密钥
|
|
70
|
+
*/
|
|
71
|
+
hasApiKey() {
|
|
72
|
+
return !!this.apiKey;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 通用的HTTP请求错误处理 - 使用统一ErrorHandler
|
|
76
|
+
*/
|
|
77
|
+
handleHttpError(error, operation) {
|
|
78
|
+
// Delegate to ErrorHandler for unified error handling
|
|
79
|
+
this.errorHandler.handleHttpError(error, operation);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 检查错误是否可重试
|
|
83
|
+
*/
|
|
84
|
+
isRetryableError(error) {
|
|
85
|
+
return ErrorHandler.isRetryable(error);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 获取建议的重试延迟
|
|
89
|
+
*/
|
|
90
|
+
getRetryDelay(error, attempt = 1) {
|
|
91
|
+
return ErrorHandler.getRetryDelay(error, attempt);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 通用的日期解析
|
|
95
|
+
*/
|
|
96
|
+
parseDate(dateString) {
|
|
97
|
+
if (!dateString)
|
|
98
|
+
return null;
|
|
99
|
+
const date = new Date(dateString);
|
|
100
|
+
return isNaN(date.getTime()) ? null : date;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 清理和规范化文本
|
|
104
|
+
*/
|
|
105
|
+
cleanText(text) {
|
|
106
|
+
if (!text)
|
|
107
|
+
return '';
|
|
108
|
+
return text
|
|
109
|
+
.replace(/\s+/g, ' ')
|
|
110
|
+
.replace(/\n+/g, ' ')
|
|
111
|
+
.trim();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 从URL中提取文件名
|
|
115
|
+
*/
|
|
116
|
+
extractFilename(url, paperId, extension = 'pdf') {
|
|
117
|
+
const urlParts = url.split('/');
|
|
118
|
+
const lastPart = urlParts[urlParts.length - 1];
|
|
119
|
+
if (lastPart && lastPart.includes('.')) {
|
|
120
|
+
return lastPart;
|
|
121
|
+
}
|
|
122
|
+
return `${paperId}.${extension}`;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=PaperSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaperSource.js","sourceRoot":"","sources":["../../src/platforms/PaperSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PubMed E-utilities API集成模块
|
|
3
|
+
* 支持无API密钥的免费使用(3 req/s)和有API密钥的增强使用(10 req/s)
|
|
4
|
+
*/
|
|
5
|
+
import { Paper } from '../models/Paper.js';
|
|
6
|
+
import { PaperSource, SearchOptions, DownloadOptions, PlatformCapabilities } from './PaperSource.js';
|
|
7
|
+
interface PubMedSearchOptions extends SearchOptions {
|
|
8
|
+
/** 搜索字段 */
|
|
9
|
+
field?: string;
|
|
10
|
+
/** 出版状态 */
|
|
11
|
+
pubStatus?: string;
|
|
12
|
+
/** 文献类型 */
|
|
13
|
+
publicationType?: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare class PubMedSearcher extends PaperSource {
|
|
16
|
+
private readonly baseApiUrl;
|
|
17
|
+
private readonly rateLimiter;
|
|
18
|
+
private readonly retMax;
|
|
19
|
+
constructor(apiKey?: string);
|
|
20
|
+
getCapabilities(): PlatformCapabilities;
|
|
21
|
+
/**
|
|
22
|
+
* 搜索PubMed文献
|
|
23
|
+
*/
|
|
24
|
+
search(query: string, options?: PubMedSearchOptions): Promise<Paper[]>;
|
|
25
|
+
/**
|
|
26
|
+
* 搜索获取PMID列表
|
|
27
|
+
*/
|
|
28
|
+
private searchPMIDs;
|
|
29
|
+
/**
|
|
30
|
+
* 获取论文详细信息
|
|
31
|
+
*/
|
|
32
|
+
private fetchPaperDetails;
|
|
33
|
+
/**
|
|
34
|
+
* 构建搜索查询
|
|
35
|
+
*/
|
|
36
|
+
private buildSearchQuery;
|
|
37
|
+
/**
|
|
38
|
+
* 映射排序字段
|
|
39
|
+
*/
|
|
40
|
+
private mapSortField;
|
|
41
|
+
/**
|
|
42
|
+
* 解析XML响应
|
|
43
|
+
*/
|
|
44
|
+
private parseXmlResponse;
|
|
45
|
+
/**
|
|
46
|
+
* 解析PubMed文章列表
|
|
47
|
+
*/
|
|
48
|
+
private parsePubMedArticles;
|
|
49
|
+
/**
|
|
50
|
+
* 解析单个PubMed文章
|
|
51
|
+
*/
|
|
52
|
+
private parsePubMedArticle;
|
|
53
|
+
/**
|
|
54
|
+
* 提取作者信息
|
|
55
|
+
*/
|
|
56
|
+
private extractAuthors;
|
|
57
|
+
/**
|
|
58
|
+
* 提取摘要
|
|
59
|
+
*/
|
|
60
|
+
private extractAbstract;
|
|
61
|
+
/**
|
|
62
|
+
* 提取发布日期
|
|
63
|
+
*/
|
|
64
|
+
private extractPublishedDate;
|
|
65
|
+
/**
|
|
66
|
+
* 解析月份(支持英文和数字)
|
|
67
|
+
*/
|
|
68
|
+
private parseMonth;
|
|
69
|
+
/**
|
|
70
|
+
* 提取文章ID(DOI、PMC等)
|
|
71
|
+
*/
|
|
72
|
+
private extractArticleIds;
|
|
73
|
+
/**
|
|
74
|
+
* PubMed通常不支持直接PDF下载
|
|
75
|
+
*/
|
|
76
|
+
downloadPdf(paperId: string, options?: DownloadOptions): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* PubMed不提供全文内容
|
|
79
|
+
*/
|
|
80
|
+
readPaper(paperId: string, options?: DownloadOptions): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* 根据PMID获取论文信息
|
|
83
|
+
*/
|
|
84
|
+
getPaperByPmid(pmid: string): Promise<Paper | null>;
|
|
85
|
+
/**
|
|
86
|
+
* 根据DOI获取论文信息
|
|
87
|
+
*/
|
|
88
|
+
getPaperByDoi(doi: string): Promise<Paper | null>;
|
|
89
|
+
/**
|
|
90
|
+
* 获取速率限制器状态
|
|
91
|
+
*/
|
|
92
|
+
getRateLimiterStatus(): {
|
|
93
|
+
availableTokens: number;
|
|
94
|
+
maxTokens: number;
|
|
95
|
+
requestsPerSecond: number;
|
|
96
|
+
pendingRequests: number;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* 验证API密钥(如果提供)
|
|
100
|
+
*/
|
|
101
|
+
validateApiKey(): Promise<boolean>;
|
|
102
|
+
}
|
|
103
|
+
export {};
|
|
104
|
+
//# sourceMappingURL=PubMedSearcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PubMedSearcher.d.ts","sourceRoot":"","sources":["../../src/platforms/PubMedSearcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,EAAgB,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMrG,UAAU,mBAAoB,SAAQ,aAAa;IACjD,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AA2GD,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,MAAM,CAAC,EAAE,MAAM;IAa3B,eAAe,IAAI,oBAAoB;IAWvC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA0BhF;;OAEG;YACW,WAAW;IA+CzB;;OAEG;YACW,iBAAiB;IAmC/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+D1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAW9E;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5E;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUzD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUvD;;OAEG;IACH,oBAAoB;;;;;;IAIpB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAiBzC"}
|