关于 wos-search
wos-search 是一项通过浏览器搜索 Web of Science 的技能,可按数据库、馆藏版本和排序方式筛选结果,适用于文献检索并以表格呈现记录。
主要功能
- 01搜索多个 Web of Science 数据库
- 02筛选核心合集版本
- 03按相关度、日期、引用或使用量排序
- 04将检索词映射到字段
- 05单次最多获取 50 条记录
适用场景
- 01按主题、作者、DOI 或期刊查找论文
- 02将检索范围限定为 SCI 或 SSCI
- 03按引用次数或日期排序结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cookjohn/ wos-skills --skill wos-search安装后在 Claude Code 中输入/wos-search确认已加载。
详细介绍
WoS 搜索
通过内部 API 搜索 Web of Science。支持版本筛选、排序和多个数据库 — 只需一次 evaluate_script 调用即可完成。
重要:浏览器前置条件
浏览器必须打开任意一个 webofscience.com 页面(并已登录)。该技能通过 fetch 直接调用 WoS 内部 API,因此无需页面导航。
语言指南
WoS 数据库(尤其是 SCI/SSCI)主要收录英文文献。如果用户提供中文关键词,请翻译成英文(例如,“价值共创” → “value co-creation”)。请告知用户已进行翻译。
参数参考
数据库(product)
| 用户说 | product | 描述 |
|---|---|---|
| “核心合集” / 默认 | WOSCC | WoS 核心合集 |
| “所有数据库” | ALLDB | 所有数据库的合并结果 |
| “medline” | MEDLINE | 生物医学文献 |
| “preprint” | PPRN | Preprint Citation Index |
| “scielo” | SCIELO | SciELO Citation Index |
版本筛选(仅限 Core Collection)
| 用户说 | editions 值 |
|---|---|
| “SCI” / “science” | WOS.SCI |
| “SSCI” / “social science” | WOS.SSCI |
| “CPCI” / “conference” | WOS.CPCI-S、WOS.CPCI-SSH |
| “全部” / 默认 | 省略 editions 字段(或包含全部版本) |
可组合多个版本:["WOS.SCI", "WOS.SSCI"]
排序选项
| 用户说 | sort 值 |
|---|---|
| “引用次数” / “被引最多” | times-cited-descending |
| “最新” | date-descending |
| “最早” | date-ascending |
| “相关性” / 默认 | relevance |
| “使用量” | usage-count-last-180-days-descending |
字段映射(用于查询行)
| 用户说 | rowField |
|---|---|
| 主题 / 关键词 / 关于 | TS |
| 标题 | TI |
| 作者 | AU |
| DOI | DO |
| 期刊 / 来源 | SO |
| 年份 | PY |
| 隶属机构 / 机构 | OG |
| 摘要 | AB |
| 资助 | FO |
| 国家 | CU |
步骤
步骤 1:构建 API 请求正文
{
"product": "WOSCC",
"searchMode": "general",
"viewType": "search",
"serviceMode": "summary",
"search": {
"mode": "general",
"database": "WOSCC",
"query": [
{"rowField": "TS", "rowText": "USER_QUERY"}
],
"editions": ["WOS.SSCI"]
},
"retrieve": {
"count": 10,
"history": true,
"jcr": true,
"sort": "times-cited-descending",
"analyzes": [],
"locale": "en"
},
"eventMode": null
}
query:由{rowField, rowText}对象组成的数组。对于多个条件,在后续行添加rowBoolean(AND/OR/NOT)。editions:可选;省略时搜索所有版本。count:要检索的记录数(默认值为 10,最大值为 50)。sort:默认值为relevance。
步骤 2:通过 evaluate_script 执行 API 调用
只需调用一次工具 — 总计 1 次调用。
如果浏览器之前打开的是非 WoS 页面(例如,点击出版商链接后),SID 将丢失。此时,请先导航回任意一个 WoS 页面(使用 navigate_page 打开 https://www.webofscience.com/wos/woscc/basic-search)以重新建立会话,然后再运行 API 调用。这会增加 1 次工具调用(总计 2 次)。
或者,使用基于 URL 的回退方案(下方的步骤 2B),无论 SID 状态如何都能正常工作。
async () => {
// Extract SID from network history
const sid = performance.getEntriesByType('resource')
.filter(r => r.name.includes('SID='))
.map(r => r.name.match(/SID=([^&]+)/)?.[1])
.filter(Boolean)[0] || '';
if (!sid) return { status: 'no_session', message: 'SID lost (likely navigated to external site). Use Step 2B or navigate to any WoS page first.' };
const response = await fetch(`/api/wosnx/core/runQuerySearch?SID=${sid}`, {
method: 'POST',
headers: { 'Content-Type': 'text/plain;charset=UTF-8', 'Accept': 'application/x-ndjson' },
body: JSON.stringify({
"product": "{PRODUCT}",
"searchMode": "general",
"viewType": "search",
"serviceMode": "summary",
"search": {
"mode": "general",
"database": "{PRODUCT}",
"query": [{QUERY_ROWS}],
"editions": [{EDITIONS}]
},
"retrieve": {
"count": {COUNT},
"history": true,
"jcr": true,
"sort": "{SORT}",
"analyzes": [],
"locale": "en"
},
"eventMode": null
})
});
const text = await response.text();
const lines = text.trim().split('\n').map(line => {
try { return JSON.parse(line); } catch(e) { return null; }
}).filter(Boolean);
const searchInfo = lines.find(l => l.key === 'searchInfo')?.payload;
const recordsData = lines.find(l => l.key === 'records')?.payload;
let records = [];
if (recordsData) {
records = Object.entries(recordsData).map(([idx, rec]) => ({
idx: parseInt(idx),
wosId: rec.colluid,
title: rec.titles?.item?.en?.[0]?.title || '',
authors: rec.names?.author?.en?.filter(Boolean).map(a => a.wos_standard).join('; ') || '',
source: rec.titles?.source?.en?.[0]?.title || '',
year: rec.pub_info?.pubyear || '',
vol: rec.pub_info?.vol || '',
issue: rec.pub_info?.issue || '',
pages: rec.pub_info?.page_no || '',
doi: rec.doi || '',
citations: rec.citation_related?.counts?.WOSCC || 0,
citationsAll: rec.citation_related?.counts?.ALLDB || 0,
refCount: rec.ref_count || 0,
abstract: rec.abstract?.basic?.en?.abstract?.replace(/<[^>]*>/g, '')?.substring(0, 300) || '',
docType: rec.doctypes?.[0] || '',
oa: rec.oa || false
}));
}
return {
status: 'ok',
totalResults: searchInfo?.RecordsFound || 0,
recordsSearched: searchInfo?.RecordsSearched || 0,
queryId: searchInfo?.QueryID || '',
records
};
}
步骤 3:展示结果
以表格形式展示:
Found **{totalResults}** results in {database} ({edition}).
Sorted by: {sort}.
| # | Title | Authors | Source | Year | Cited | WoS ID |
|---|-------|---------|--------|------|-------|--------|
| 1 | {title} | {authors} | {source} | {year} | {citations} | {wosId} |
| ... |
提供后续操作:
- “使用
/wos-paper-detail {WoS ID}获取详细信息” - “使用
/wos-export导出结果” - 如需查看更多结果,请使用更大的
count值重新运行,或使用/wos-navigate-pages
步骤 2B:基于 URL 的回退方案(SID 丢失时)
如果 API 返回 no_session(例如,导航到外部出版商网站后),请回退到 URL 导航:
navigate_page({
url: "https://www.webofscience.com/wos/{db}/general-summary?queryJson={ENCODED_QUERY_JSON}",
initScript: "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
然后使用 DOM 选择器通过 evaluate_script 提取结果(参见 wos-parse-results 的模式 B),或重新尝试 API 调用(导航后 SID 将重新建立)。
适用场景:浏览器访问过外部网站(出版商网站、DOI 链接等),且 performance.getEntriesByType('resource') 不再包含 WoS SID 条目时。
注意事项
- 如果 SID 丢失,需要 1 次工具调用(API),或 2 次工具调用(导航 + API/DOM)
- API 返回 NDJSON(换行分隔的 JSON);请逐行解析
- SID 从浏览器的性能资源条目中提取
- SID 丢失:导航到外部网站会清除性能条目。先导航到任意 WoS 页面即可恢复,或使用基于 URL 的备用方案(步骤 2B)
editions字段采用WOS.SCI、WOS.SSCI、WOS.CPCI-S等格式- 在 SCI/SSCI 中使用中文关键词时,请先翻译成英文
- 每次请求最多返回 50 条记录;使用
retrieve.count控制数量 history: true会将搜索保存到 WoS 会话历史记录中