gs-export について
Google Scholar の引用データを Zotero に書き出す Claude スキルです。検索結果の PDF 添付にも対応し、単一論文と一括処理を扱います。
主な機能
- 01Google Scholar から BibTeX を取得
- 02引用項目を解析して Zotero に登録
- 03検索結果の URL から PDF を追加
- 04論文の一括エクスポート
活用シーン
- 01Google Scholar の引用を Zotero に保存
- 02複数の論文を Zotero に取り込む
- 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 の
bibtexLinkURL(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: booktitle={...}→titleauthor={Last1, First1 and Last2, First2}→authors配列journal={...}→journalyear={...}→pubdatevolume={...}→volumenumber={...}→issuepages={...}→pagespublisher={...}→ (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 回の evaluate_script 呼び出しですべての BibTeX リンクを取得する(引用ダイアログをすべて取得)
- 各 BibTeX URL に 1 つずつ移動する
- すべての BibTeX エントリーを収集する
- すべてを一括で 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 のページに戻ります