mcpField
C
cnki-journal-toc

cnki-journal-toc

github.com/cookjohn生産性1.0k332 回インストール33 週間前に更新
リポジトリ

cnki-journal-toc について

CNKI で雑誌の各号を閲覧し、論文一覧を抽出するブラウザスキルです。号を指定すると、スキャン版の目次 PDF を開いてダウンロードすることもできます。

主な機能

  1. 01年と号を指定した目次の閲覧
  2. 02論文タイトル、著者、ページ範囲の抽出
  3. 03原版目次ビューアーを開く機能
  4. 04PDF ダウンロードの開始

活用シーン

  1. 01指定した雑誌の号に掲載された論文の確認
  2. 02論文の著者やページ範囲の検索
  3. 03スキャン版の目次 PDF のダウンロード

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cookjohn/cnki-skills --skill cnki-journal-toc

インストール後、Claude Code で/cnki-journal-tocを入力して読み込まれたか確認します。

詳細

CNKI ジャーナル目次(期刊目录浏览 + 原版目录下载)

ジャーナルの各号を閲覧し、論文一覧を抽出します。必要に応じて、原版の目次 PDF(表紙+目次のスキャン版)を開いたりダウンロードしたりできます。

引数

$ARGUMENTS には、閲覧する内容を指定します。

  • {journal name} — ジャーナル名
  • {year}(任意)— 年。省略した場合は最新の年が使用されます
  • {issue}(任意)— 号数
  • download(任意)— 指定すると、原版の目次 PDF をダウンロードします

例:

  • 计算机学报 2026 01期 — 2026 年第 1 号を閲覧
  • 计算机学报 2026 01期 download — 原版の目次 PDF をダウンロード
  • 计算机学报 — 最新号を表示(ネットワーク先行公開)

手順

1. ジャーナル詳細ページに移動する

ジャーナル詳細ページ(navi.cnki.net/knavi/detail)をすでに開いていない場合:

  • cnki-journal-search を使ってジャーナルを検索します
  • mcp__chrome-devtools__list_pages と mcp__chrome-devtools__select_page を使って、ジャーナル詳細タブに切り替えます(新しいタブで開きます)
2. 号を選択して論文を抽出する(単一の非同期 evaluate_script)

YEAR と ISSUE を実際の値(例:"2025"、"No.01")に置き換えます。 「刊期浏览」タブはデフォルトでアクティブになっているため、クリックする必要はありません。

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();

  // Wait for paper list to load
  await new Promise((r, j) => {
    let n = 0;
    const c = () => {
      const rows = document.querySelectorAll('#CataLogContent dd.row');
      if (rows.length > 0) r();
      else if (++n > 30) j('timeout');
      else setTimeout(c, 500);
    };
    setTimeout(c, 1000);
  });

  // Extract papers
  const rows = document.querySelectorAll('#CataLogContent dd.row');
  const papers = Array.from(rows).map((dd, i) => ({
    no: i + 1,
    title: dd.querySelector('span.name a')?.innerText?.trim(),
    authors: dd.querySelector('span.author')?.innerText?.trim()?.replace(/;$/, ''),
    pages: dd.querySelector('span.company')?.innerText?.trim()
  }));

  // Get 原版目录 URL
  const tocBtn = document.querySelector('a.btn-preview:not(.btn-back)');

  return {
    issueLabel: document.querySelector('span.date-list')?.innerText?.trim(),
    paperCount: papers.length,
    papers,
    tocUrl: tocBtn?.href || null,
    url: location.href
  };
}
3. 結果を提示する
## {journal_name} — {issueLabel}

共 {paperCount} 篇论文:

1. {title}  [pp. {pages}]
   作者:{authors}

2. {title}  [pp. {pages}]
   作者:{authors}
...
4. 原版の目次 PDF をダウンロードする(要求された場合)

ユーザーがダウンロードを要求した場合、または「原版目录」を求めた場合:

方法 A — 「原版目录浏览」をクリックしてリーダーを開き、その後ダウンロードする:

  1. スナップショット内で、テキストが「原版目录浏览」の link を探します(クラス btn-preview)
  2. クリックします。リーダーページ(kns.cnki.net/reader/report)が新しいタブで開きます
  3. mcp__chrome-devtools__list_pages を使って、新しいリーダータブを探します
  4. mcp__chrome-devtools__select_page を使って、そのタブに切り替えます
  5. mcp__chrome-devtools__wait_for を使い、テキスト ["下载"] が表示されるまで待ちます
  6. スナップショットを取得し、テキストが「下载」の link(リーダーのツールバーにあるダウンロードボタン)を探します
  7. ダウンロードリンクをクリックします。Chrome で PDF のダウンロードが開始されます

方法 B — リーダーページから直接ダウンロードする:

すでにリーダーページ(kns.cnki.net/reader/report)を開いている場合:

  1. スナップショットを取得します
  2. テキストが「下载」の link を探します
  3. クリックします

クリック後、ユーザーに次のように伝えます:

原版の目次 PDF のダウンロードが開始されました。Chrome のダウンロード管理画面をご確認ください。

ツール呼び出し

  • 号の閲覧:1 回(evaluate_script のみ)。ジャーナルページへの移動後に実行します
  • 目次のダウンロード:スナップショットの取得、クリック、タブ切り替えが必要です(新しいタブ)

確認済みのセレクター

ジャーナル詳細 — 刊期浏览
要素セレクター備考
刊期浏览タブテキストが「刊期浏览」の aデフォルトでアクティブ(li.on.cur)。クリック不要
年の領域#yearissue0 / .yearissuepage
年のグループdl.s-dataList#yearissue0 内
年のラベルdl.s-dataList dtテキストは「2026」「2025」など
号のリンクdl.s-dataList dd aテキストは「No.01」「No.12」など
号のラベルspan.date-listテキストは「2025年01期」
論文コンテナー#CataLogContent
論文エントリー#CataLogContent dd.row
論文タイトルdd.row span.name akcms2/article/abstract への href
論文著者dd.row span.authorセミコロン区切り
論文のページ範囲dd.row span.companyクラス名は「company」ですが、ページ範囲が格納されています
論文 IDdd.row b[name="encrypt"]「JSJX202512001」のような ID
原版目录浏览a.btn-preview:not(.btn-back)bar.cnki.net/bar/download/order への href
戻るa.btn-preview.btn-back
リーダーページ(kns.cnki.net/reader/report)
要素パターン
ページタイトルRootWebArea "期刊原版目录"
ダウンロードボタンテキストが「下载」の link。URL は bar.cnki.net/bar/download/order
現在のページtextbox の値(ページ番号)
総ページ数StaticText(例:「4」)
ナビゲーション説明が「上一页」/「下一页」の generic

重要な注意事項

  • 「原版目录浏览」は、特定の号を選択した場合にのみ表示されます(ネットワーク先行公開の画面には表示されません)。
  • リーダーページは新しいタブで開きます。
  • リーダーのダウンロードリンクを使用するには、ログインが必要です。ダウンロードできない場合は、ログインするようユーザーに伝えてください。
  • ダウンロード URL はセッションごとに異なるため、キャッシュしたり再利用したりしないでください。

コメント