Skills

Cnki Journal Toc

Browse journal issues, view table of contents, and download original TOC PDF from CNKI.

Install

npx skills add cookjohn/cnki-skills --skill cnki-journal-toc -g -a claude-code -y
Category
Documents
Updated
8mo ago
License
See repository
Context cost
Lightabout 1,442 tokens
Runs scripts
No, instructions only

What it does

Browse journal issues, view table of contents, and download original TOC PDF from CNKI. Use when user wants to see papers in a specific journal issue or download the original cover/TOC pages.

CNKI Journal Table of Contents (期刊目录浏览 + 原版目录下载)

Browse journal issues, extract the paper list, and optionally open/download the original TOC PDF (封面+目录扫描版).

Arguments

$ARGUMENTS describes what to browse:

  • {journal name}, which journal
  • {year} (optional), which year, defaults to latest
  • {issue} (optional), which issue number
  • download (optional), if included, download the original TOC PDF

Examples:

  • 计算机学报 2026 01期, browse 2026 issue 1
  • 计算机学报 2026 01期 download, download original TOC PDF
  • 计算机学报, shows latest (网络首发)

Steps

1. Navigate to journal detail page

If not already on a journal detail page (navi.cnki.net/knavi/detail):

  • Use cnki-journal-search to find the journal
  • Use mcp__chrome-devtools__list_pages + mcp__chrome-devtools__select_page to switch to the journal detail tab (opens in new tab)

2. Select issue + extract papers (single async evaluate_script)

Replace YEAR and ISSUE with actual values (e.g., "2025", "No.01"). The "刊期浏览" tab is the default active view, no need to click it.

async () => {
  const year = "YEAR";
  const issue = "ISSUE"; // Format: "No.01", "No.12", etc.

  const dls = document.querySelectorAll('#yearissue0 dl.s-dataList');
  let target = null;
  for (const dl of dls) {
    if (dl.querySelector('dt')?.innerText?.trim() === year) {
      target = Array.from(dl.querySelectorAll('dd a')).find(a => a.innerText.trim() === issue);
      break;
    }
  }
  if (!target) {
    // Return available years and issues for the requested year
    const available = Array.from(dls).map(dl => ({
      year: dl.querySelector('dt')?.innerText?.trim(),
      issues: Array.from(dl.querySelectorAll('dd a')).map(a => a.innerText.trim())
    })).filter(y => y.year);
    return { error: 'issue_not_found', year, issue, available: available.slice(0, 5) };
  }

  target.click();
Read the whole SKILL.md on GitHub

More in Documents