بنقرة واحدة
wos-navigate-pages
// Navigate to a specific page of WoS search results, or load more results from the last search.
// Navigate to a specific page of WoS search results, or load more results from the last search.
Download PDF full text for a WoS paper via publisher links.
Export WoS records to Zotero, RIS, BibTeX, or Excel.
Get detailed information for a paper by WoS ID (e.g., WOS:000779183600001).
Parse search results from the current WoS results page or API response. Internal skill used by other skills.
Search Web of Science by topic, author, title, DOI, or advanced query. Supports edition/database filtering and sort.
| name | wos-navigate-pages |
| description | Navigate to a specific page of WoS search results, or load more results from the last search. |
| argument-hint | [page number or 'next'/'prev'] |
| user-invocable | true |
| disable-model-invocation | false |
Load a specific page of results from the current WoS search.
The results URL follows the pattern:
/wos/woscc/summary/{session-uuid}/{sort}/{page-number}
Modify the page number in the URL and navigate. Then extract via evaluate_script with DOM selectors. Uses 2 tool calls.
Re-run the search API with retrieve.first offset:
async () => {
const sid = performance.getEntriesByType('resource')
.filter(r => r.name.includes('SID='))
.map(r => r.name.match(/SID=([^&]+)/)?.[1])
.filter(Boolean)[0] || '';
const page = {TARGET_PAGE}; // 1-based
const perPage = 50;
const first = (page - 1) * perPage + 1;
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": "WOSCC",
"searchMode": "general",
"viewType": "search",
"serviceMode": "summary",
"search": {
"mode": "general",
"database": "WOSCC",
"query": [{SAME_QUERY_AS_ORIGINAL_SEARCH}],
"editions": [{SAME_EDITIONS}]
},
"retrieve": {
"first": first,
"count": perPage,
"history": false,
"jcr": true,
"sort": "{SAME_SORT}",
"analyzes": [],
"locale": "en"
},
"eventMode": null
})
});
const text = await response.text();
const lines = text.trim().split('\n').map(l => { try { return JSON.parse(l); } 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: first + parseInt(idx) - 1,
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 || '',
doi: rec.doi || '',
citations: rec.citation_related?.counts?.WOSCC || 0
}));
}
return { status: 'ok', page, totalResults: searchInfo?.RecordsFound || 0, records };
}
wos-search callretrieve.first is 1-based record offset (1 = first record, 51 = page 2, etc.)