mcpField
G
gs-export

gs-export

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

gs-export について

Google Scholar の引用データを Zotero に書き出す Claude スキルです。検索結果の PDF 添付にも対応し、単一論文と一括処理を扱います。

主な機能

  1. 01Google Scholar から BibTeX を取得
  2. 02引用項目を解析して Zotero に登録
  3. 03検索結果の URL から PDF を追加
  4. 04論文の一括エクスポート

活用シーン

  1. 01Google Scholar の引用を Zotero に保存
  2. 02複数の論文を Zotero に取り込む
  3. 03取得可能な論文 PDF を添付

MCP 対応

Chrome DevTools MCP ツールで BibTeX の取得と Google Scholar のページ移動を行い、その後 Python スクリプトで Zotero にレコードを送信します。

インストール

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

$npx skills add https://github.com/cookjohn/gs-skills --skill gs-export

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

同梱ファイルscripts/push_to_zotero.py

詳細

Google Scholar から Zotero へのエクスポート

BibTeX の抽出を通じて Google Scholar の論文引用データをエクスポートし、Zotero デスクトップに送信します。

引数

$ARGUMENTS には、1 つ以上の data-cid(スペース区切り)が含まれます。例:

  • TFS2GgoGiNUJ — 1 件の論文
  • TFS2GgoGiNUJ abc123XYZ def456UVW — 一括エクスポート

手順

ステップ 1:各論文の BibTeX を取得する

CORS を回避するため、各 data-cid についてツールを 3 回呼び出します。

1a. BibTeX リンクを取得するために引用ダイアログを取得(evaluate_script)
async () => {
  const cid = "DATA_CID_HERE";
  const resp = await fetch(
    `https://scholar.google.com/scholar?q=info:${cid}:scholar.google.com/&output=cite`,
    { credentials: 'include' }
  );
  const html = await resp.text();
  const doc = new DOMParser().parseFromString(html, 'text/html');

  // Extract export links
  const links = Array.from(doc.querySelectorAll('#gs_citi a')).map(a => ({
    format: a.textContent.trim(),
    url: a.href
  }));

  // Extract citation format texts
  const citations = Array.from(doc.querySelectorAll('#gs_citt tr')).map(tr => {
    const cells = tr.querySelectorAll('td');
    return {
      style: cells[0]?.textContent?.trim() || '',
      text: cells[1]?.textContent?.trim() || ''
    };
  });

  const bibtexLink = links.find(l => l.format === 'BibTeX');
  return { cid, bibtexLink: bibtexLink?.url || '', links, citations };
}
1b. BibTeX URL に移動する(navigate_page)

mcp__chrome-devtools__navigate_page を使用します。

  • url:ステップ 1a の bibtexLink URL(scholar.googleusercontent.com 上)

これにより、googleusercontent.com への fetch() をブロックする CORS 制限を回避します。

1c. BibTeX の内容を読み取る(evaluate_script)
async () => {
  return { bibtex: document.body.innerText || document.body.textContent || '' };
}
ステップ 2:BibTeX を解析して Zotero に送信する

BibTeX データを JSON として保存し、プッシュスクリプトを呼び出します。

python "E:/gscholar-skills/.claude/skills/gs-export/scripts/push_to_zotero.py" /tmp/gs_papers.json

スクリプトを呼び出す前に、BibTeX から解析した論文データを含む JSON ファイルを /tmp/gs_papers.json に作成します。BibTeX を自分で解析し、JSON 配列を作成してください。

[
  {
    "pmid": "",
    "title": "The title from BibTeX",
    "authors": [
      {"lastName": "Smith", "firstName": "John"}
    ],
    "journal": "Journal Name",
    "journalAbbr": "",
    "pubdate": "2022",
    "volume": "14",
    "issue": "4",
    "pages": "1054",
    "doi": "",
    "pdfUrl": "https://example.com/paper.pdf",
    "abstract": "",
    "keywords": [],
    "language": "en",
    "pubtype": ["Journal Article"]
  }
]

重要:pdfUrl には、検索結果の fullTextUrl フィールド(gs-search が抽出した PDF リンク)を設定してください。Python スクリプトは PDF をダウンロードし、/connector/saveAttachment 経由で Zotero にアップロードします(Zotero 7.x は saveItems 内の添付ファイルを無視します)。出版社によっては PDF のダウンロードに失敗する場合があります(403、JavaScript リダイレクト)。その場合は「PDF skip」として報告されます。

BibTeX フィールドの対応関係:

  • @article{key, → itemType: journalArticle
  • @inproceedings{key, → itemType: conferencePaper
  • @book{key, → itemType: book
  • title={...} → title
  • author={Last1, First1 and Last2, First2} → authors 配列
  • journal={...} → journal
  • year={...} → pubdate
  • volume={...} → volume
  • number={...} → issue
  • pages={...} → pages
  • publisher={...} → (extra または publisher フィールドに含める)
ステップ 3:報告する

1 件の論文:

Exported to Zotero from Google Scholar:
  Title: {title}
  Authors: {authors}
  Journal: {journal} ({year})
  Data-CID: {dataCid}

一括:

Exported {count} papers to Zotero from Google Scholar:
  1. {title1} ({journal1}, {year1})
  2. {title2} ({journal2}, {year2})
  ...

一括エクスポートの最適化

複数の論文を処理する場合は、CAPTCHA を避けるため、順番に処理します。

  1. 1 回の evaluate_script 呼び出しですべての BibTeX リンクを取得する(引用ダイアログをすべて取得)
  2. 各 BibTeX URL に 1 つずつ移動する
  3. すべての BibTeX エントリーを収集する
  4. すべてを一括で Zotero に送信する

注意事項

  • 1 件の論文のエクスポートには、3~4 回のツール呼び出しが必要です:evaluate_script(引用ダイアログ)+ navigate_page(BibTeX URL)+ evaluate_script(BibTeX の読み取り)+ bash python(Zotero への送信)
  • 一括エクスポート:2N+1 回のツール呼び出し(N 件の論文:N 回の navigate + N 回の evaluate + 1 回の bash)
  • BibTeX リンクは scholar.googleusercontent.com 上にあります。CORS が fetch() をブロックするため、回避策として navigate_page を使用します
  • Zotero Connector API との通信には、既存の push_to_zotero.py を再利用します
  • Google Scholar の BibTeX には抄録や DOI が含まれないため、Zotero ではこれらのフィールドは空欄になります
  • エクスポート後、type を back に指定した navigate_page で Google Scholar のページに戻ります

コメント