// ==UserScript== // @name 杏坛豆瓣书籍自动检索工具工具 // @namespace zhoubanxian // @version 1.0 // @description 已有的书籍名称通过豆瓣API获取信息,然后填充至各个信息区 // @author 周半仙 // @match https://xingtan.one/edit.php* // @icon https://www.google.com/s2/favicons?sz=64&domain=xingtan.one // @grant GM_xmlhttpRequest // @grant GM_download // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 弹出确认对话框 var confirmed = confirm("是否使用自动检索脚本?"); if (confirmed) { // 获取编辑页面标题的值 const titleXpath = "/html/body/table[2]/tbody/tr[2]/td/div/font/form/table/tbody/tr[2]/td[2]/input"; // 使用XPath获取元素 const element = document.evaluate(titleXpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; // 检查元素是否存在并输出值 if (element) { // console.log("获取到标题是: ", element.value); var searchTitle = element.value const url = `https://api.douban.com/v2/book/search?q=${encodeURIComponent(element.value)}&apikey=0ac44ae016490db2204ce0a042db2916`; GM_xmlhttpRequest({ method: "GET", url: url, onload: function(response) { var data = JSON.parse(response.responseText); // 解析返回值为JSON格式 var books = data.books; // 获取books数据数组 // 循环遍历books数据,只显示前五条,然后自动匹配 for (var i = 0; i < books.length; i++) { var book = books[i]; // 获取当前书籍数据 if(searchTitle.includes(book.title)){ console.log("匹配到豆瓣书籍:"+book.title); var author = ''; // 获取作者 for (var j = 0; j < book.author.length; j++) { author += book.author[j] +'&'; } author = author.slice(0, -1); var pubdate = book.pubdate.split('-')[0]; // 获取出版年份 var publisher = book.publisher; // 获取出版社 var small_descr = "作者:" + author +"/" + publisher +"/" + pubdate +"【格式】"; document.querySelector('input[name="small_descr"]').value = small_descr; document.querySelector('input[name="pt_gen"]').value = "https://book.douban.com/subject/"+book.id; // 下载图片 GM_download({ url: book.images.large, name: book.title+"封面图.jpg", onload: function() { console.log("图片下载完成!"); }, onerror: function(error) { console.error("图片下载失败:", error); } }); // 构建textarea的值 var value = "图片地址:"+book.images.large+"(已自动下载,请手动上传至图床)\n"; if (author) { value += "作者: " + author + "\n"; } if(publisher){ value += "出版社: " + publisher + "\n"; } if(book.subtitle){ value += "副标题: " + book.subtitle + "\n"; } if(pubdate){ value += "出版年: " + pubdate + "\n"; } if(book.pages){ value += "页数: " + book.pages + "\n"; } if(book.price){ value += "定价: " + book.price + "\n"; } if(book.binding){ value += "装帧: " + book.binding + "\n"; } if(book.isbn13){ value += "ISBN: " + book.isbn13 + "\n\n"; } if(book.summary){ value += "内容简介: \n " + book.summary + "\n\n"; } if(book.author_intro){ value += "作者简介: \n " + book.author_intro + "\n"; } document.querySelector('textarea[name="descr"]').value = value; break } } // 备用手动检索模式 // for (var i = 0; i < 5; i++) { // var book = books[i]; // 获取当前书籍数据 // var author = book.author[0]; // 获取作者 // var pubdate = book.pubdate.split('-')[0]; // 获取出版年份 // var publisher = book.publisher; // 获取出版社 // var result = "作者:" + author +"/" + publisher +"/" + pubdate +"【对应格式】"; // console.log(book.title) // console.log(result); // 输出拼接后的结果 // console.log("https://book.douban.com/subject/"+book.id) //输出豆瓣连接 // } }, onerror: function(error) { console.error(error); } }); } else { console.log("找不到元素"); } } })();