您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
从豆瓣读书网页中提取元数据并生成BibTeX引用
// ==UserScript== // @name 豆瓣读书生成BibTeX引用 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 从豆瓣读书网页中提取元数据并生成BibTeX引用 // @author entr0pia // @match https://book.douban.com/* // @grant GM_setClipboard // @license MIT // ==/UserScript== (function () { 'use strict'; var title = document.querySelector("#wrapper > h1 > span").textContent; var subtitle, author1st, authors, publisher, year, pages, translators=''; function catSpan(n) { var key = n.textContent.trim().split(':')[0]; var ast; switch (key) { case '作者': author1st = n.querySelectorAll('a')[0].textContent; var authorsList = Array.from(n.querySelectorAll('a')) .map(a => a.textContent); authors = authorsList.join(' and '); ast = authors.split(/[,、]/); if (ast.length > 1) { author1st = ast[0] authors = ast.join(' and '); } console.log('一作:'+author1st); break; case '出版社': publisher = n.nextElementSibling.textContent; break; case '副标题': subtitle = n.nextSibling.textContent.trim(); console.log('副标题:' + subtitle); break; case '出版年': year = n.nextSibling.textContent.split("-")[0].trim(); break; case '页数': pages = n.nextSibling.textContent.trim(); break; case '译者': translators = Array.from(n.querySelectorAll('a')) .map(a => a.textContent) .join(' and '); ast = authors.split(/[,、]/) if (ast.length > 1) { translators = ast.join(' and '); } console.log('译者:' + translators); break; } } // 提取元数据 Array.from(document.querySelectorAll('#info > span')) .map(n => catSpan(n)); var citekey=`${author1st}${year}${title}`; if (subtitle != null){ title = `${title}:${subtitle}`; } // 格式化为BibTeX文本 var bibtex = `@book{${citekey}, title = {${title}}, author = {${authors}}, publisher = {${publisher}}, year = {${year}}, pages = {${pages}}, translator = {${translators}} }`; // 添加一个按钮,点击后将BibTeX文本复制到剪贴板 const bibButton = document.createElement('button'); bibButton.textContent = '复制BibTeX引用'; bibButton.className = 'j a_show_login lnk-sharing lnk-douban-sharing'; bibButton.type = 'button'; const container = document.querySelector("#content > div > div.article > div.indent > div.rec-sec"); if (container != null) { container.appendChild(bibButton); } bibButton.addEventListener('click', () => { GM_setClipboard(bibtex); alert('复制成功,请手动填写页码'); }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址