CNKI Wikipedia Citation Generator

访问中国知网(cnki.net)的论文信息页面时,生成一个引用按钮,引用为维基百科Cite系列模板格式。Generate a citation button with Wikipedia Cite Template style when visiting the thesis detail page in cnki.net

目前为 2022-10-11 提交的版本。查看 最新版本

// ==UserScript==
// @name         CNKI Wikipedia Citation Generator
// @version      0.1
// @description  访问中国知网(cnki.net)的论文信息页面时,生成一个引用按钮,引用为维基百科Cite系列模板格式。Generate a citation button with Wikipedia Cite Template style when visiting the thesis detail page in cnki.net
// @author       Wikipedia User:瑞丽江的河水
// @license      MIT
// @match        https://kns.cnki.net/kcms/detail/detail.aspx?*
// @namespace https://gf.qytechs.cn/users/968912
// ==/UserScript==

(function() {
    'use strict';
    var details = getDetails();
    var reference = generateCitation(details);
    generateButton(reference);
    var copy_btn = document.getElementById('cite_wikipedia');
    copy_btn.onclick = function () {
        var cite_text = document.getElementById('wikipedia_template');
        cite_text.select();
        document.execCommand('copy');
        alert("复制成功");
    }
})();

function getDetails() {
    var title = document.getElementsByTagName("h1")[0].innerHTML;
    var i = 0;
    var temp;

    var author_part = document.getElementById("authorpart");
    var authors = [];
    if(author_part !== undefined) {
        var author_nums = author_part.getElementsByTagName("span").length;
        for (i = 0; i < author_nums; i++) {
            temp = author_part.getElementsByTagName("span")[i];
            if(temp.getElementsByTagName("a").length !== 0) {
                authors[i] = temp.getElementsByTagName("a")[0].innerHTML;
                if(authors[i].includes("<sup>")) {
                    authors[i] = authors[i].substring(0, authors[i].indexOf("<sup>"));
                }
            } else {
                authors[i] = temp.innerHTML;
            }
        }
    }

    var publication_pre = document.getElementsByClassName("top-tip")[0];
    if(publication_pre !== undefined) {
        var publication = publication_pre.getElementsByTagName("span")[0];
        var journal = "";
        var year = "";
        var volume = "";
        var issue = "";
        if(publication !== undefined) {
            var journal_part = publication.getElementsByTagName("a")[0];
            if(journal_part !== undefined) {
                journal = journal_part.innerHTML;
            }
            var issue_part = publication.getElementsByTagName("a")[1];
            if(issue_part !== undefined) {
                issue_part = issue_part.innerHTML;
                year = issue_part.substring(0, issue_part.indexOf(","));
                volume = issue_part.substring(issue_part.indexOf(",") + 1, issue_part.indexOf("("));
                issue = issue_part.substring(issue_part.indexOf("(") + 1, issue_part.indexOf(")"));
                if(issue.startsWith("0")) {
                    issue = issue.substring(1, issue.length);
                }
            }
        }
    }

    var pages = "";
    var total_info = document.getElementsByClassName("total-inform")[0];
    if(total_info !== undefined) {
        var info_nums = total_info.getElementsByTagName("span").length;
        for(i = 0; i < info_nums; i++) {
            temp = total_info.getElementsByTagName("span")[i].innerHTML;
            if(temp.includes("页码:")) {
                pages = temp.substring(temp.indexOf("页码:") + "页码:".length, temp.length);
                break;
            }
        }
    }

    var doi = "";
    var main_info_length = document.getElementsByClassName("top-space").length;
    if(main_info_length !== 0) {
        for(i = 0; i < main_info_length; i++) {
            temp = document.getElementsByClassName("top-space")[i].getElementsByTagName("span")[0].innerHTML;
            if(temp.includes("DOI:")) {
                doi = document.getElementsByClassName("top-space")[i].getElementsByTagName("p")[0].innerHTML;
                break;
            }
        }
    }
    return [authors, title, journal, year, volume, issue, pages, doi];
}

function generateCitation(details){
    var url = window.location.href;
    var reference = "";
    var i, cnki_id, brief_num, temp, date;

    // 期刊
    if(url.includes("dbcode=CJFD")) {
        // Header
        if(details[0] !== []) {
            reference = "<ref name=\"" + details[0][0] + "\">{{cite journal";
        } else {
            reference = "<ref>{{cite journal";
        }
        // Author
        if(details[0] !== []) {
            if(details[0].length > 1) {
                for(i = 0; i < details[0].length; i++) {
                    reference = reference + " |author" + (i + 1) + "=" + details[0][i];
                }
            } else {
                reference = reference + " |author=" + details[0][0];
            }
        }
        // Title
        reference = reference + " |title=" + details[1];
        // Journal
        reference = reference + " |journal=" + details[2];
        // Year
        if(details[3] !== "") {
            reference = reference + " |year=" + details[3];
        }
        // volume
        if(details[4] !== "") {
            reference = reference + " |volume=" + details[4];
        }
        // issue
        if(details[5] !== "") {
            reference = reference + " |issue=" + details[5];
        }
        // pages
        if(details[6] !== "") {
            reference = reference + " |pages=" + details[6];
        }
        // doi
        if(details[7] !== "") {
            reference = reference + " |doi=" + details[7];
        }
        // cnki
        cnki_id = url.substring(url.indexOf("filename="), url.length);
        cnki_id = cnki_id.substring("filename=".length, cnki_id.indexOf("&"));
        reference = reference + " |id={{CNKI|" + cnki_id +"}}";
        // Footer
        reference = reference + " }}</ref>";
    }

    // 辑刊,根据 (李伟,王磊,郭伟.引用辑刊的参考文献著录建议[J].编辑学报,2021,33(04):397-399.) 辑刊引用参照书籍引用,使用cite book模板
    else if(url.includes("dbcode=CCJD")) {
        // Header
        if(details[0] !== []) {
            reference = "<ref name=\"" + details[0][0] + ">{{cite book";
        } else {
            reference = "<ref>{{cite book";
        }
        // Author
        if(details[0] !== []) {
            if(details[0].length > 1) {
                for(i = 0; i < details[0].length; i++) {
                    reference = reference + " |author" + (i + 1) + "=" + details[0][i];
                }
            } else {
                reference = reference + " |author=" + details[0][0];
            }
        }
        // Chapter
        reference = reference + " |chapter=" + details[1];
        // Title
        reference = reference + " |title=" + details[2];
        if(details[4] !== "") {
            reference = reference + " 第" + details[4] + "辑";
        }
        // Year
        if(details[3] !== "") {
            reference = reference + " |year=" + details[3];
        }
        // pages
        if(details[6] !== "") {
            reference = reference + " |pages=" + details[6];
        }
        // isbn
        reference = reference + " |isbn=<!--建议从第三方查找辑刊ISBN号-->";
        // doi
        if(details[7] !== "") {
            reference = reference + " |doi=" + details[7];
        }
        // Footer
        reference = reference + " }}</ref>";
    }

    // 博硕
    else if(url.includes("dbcode=CMFD") || url.includes("dbcode=CDFD")) {
        // Header
        reference = "<ref name=\"" + details[0][0] + ">{{cite thesis";
        // Author
        reference = reference + " |author=" + details[0][0];
        // Title
        reference = reference + " |title=" + details[1];
        // Degree + Year
        if(url.includes("dbcode=CMFD")) {
            reference = reference + " |degree=硕士 |year=<!--请手动填写-->";
        } else {
            reference = reference + " |degree=博士 |year=<!--请手动填写-->";
        }
        // Publisher
        reference = reference + " |publisher=" + details[2];
        // Footer
        reference = reference + " }}</ref>";
    }

    // 会议
    else if(url.includes("dbcode=CPFD")) {
        // Header
        reference = "<ref name=\"" + details[0][0] + ">{{cite conference";
        // Author
        if(details[0] !== []) {
            if(details[0].length > 1) {
                for(i = 0; i < details[0].length; i++) {
                    reference = reference + " |author" + (i + 1) + "=" + details[0][i];
                }
            } else {
                reference = reference + " |author=" + details[0][0];
            }
        }
        // Title
        reference = reference + " |title=" + details[1];
        // Date
        brief_num = document.getElementsByClassName("rowtit").length;
        for(i = 0; i < brief_num; i++) {
            temp = document.getElementsByClassName("rowtit")[i].innerHTML;
            if(temp.includes("会议时间:")) {
                date = document.getElementsByClassName("rowtit")[i].nextElementSibling.innerHTML;
                reference = reference + " |date=" + date;
            }
        }
        // Book Title + Publisher
        reference = reference + " |book-title=<!--请手动填写--> |publisher=<!--请手动填写-->";
        // pages
        if(details[6] !== "") {
            reference = reference + " |pages=" + details[6];
        }
        // Footer
        reference = reference + " }}</ref>";
    }
    else if(url.includes("dbcode=CCND")) {
        // Header
        reference = "<ref name=\"" + details[0][0] + ">{{cite news";
        // Author
        if(details[0] !== []) {
            if(details[0].length > 1) {
                for(i = 0; i < details[0].length; i++) {
                    reference = reference + " |author" + (i + 1) + "=" + details[0][i];
                }
            } else {
                reference = reference + " |author=" + details[0][0];
            }
        }
        // Title
        reference = reference + " |title=" + details[1];
        // Newspaper
        reference = reference + " |newspaper=<!--请手动填写-->" + details[2];
        // Date
        brief_num = document.getElementsByClassName("rowtit").length;
        for(i = 0; i < brief_num; i++) {
            temp = document.getElementsByClassName("rowtit")[i].innerHTML;
            if(temp.includes("报纸日期:")) {
                date = document.getElementsByClassName("rowtit")[i].nextElementSibling.innerHTML;
                reference = reference + " |date=" + date;
            }
        }
        // Footer
        reference = reference + " }}</ref>";
    }
    else {
        reference = "本文献暂不支持";
    }
    return reference;
}

function generateButton(reference) {
    var content_body = document.getElementsByClassName("wx-tit")[0].innerHTML;
    var info = "<div style='margin-top: 10px; margin-left: 10%; text-align: left;'><b>引用为维基百科Cite模板格式:</b></div>";
    var textarea = "<div style='margin-top: 5px;'><textarea style='padding: 3px; min-width: 80%; height: 38px; border: 2px solid #ccc; border-radius: 4px; background-color: #f8f8f8; resize:none;' id='wikipedia_template' readonly>" + reference + "</textarea></div>";
    var button = "<div style='margin-top: -35px; margin-left: 87%;'><button id='cite_wikipedia' style='padding-top: 3px; padding-bottom: 3px; padding-left: 7px; padding-right: 7px; cursor: pointer;'>复制</button></div>";
    document.getElementsByClassName("wx-tit")[0].innerHTML = info + textarea + button + content_body;
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址