Greasy Fork

杏坛豆瓣书籍自动检索工具工具

已有的书籍名称通过豆瓣API获取信息,然后填充至各个信息区

当前为 2023-11-04 提交的版本,查看 最新版本

// ==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

// ==/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("找不到元素");
    }
    }
    
})();