云图书馆统一书号普通编目套录MARC信息脚本

实现统一书号部分书籍的MARC快捷编目(普通编目)

目前为 2021-05-06 提交的版本。查看 最新版本

// ==UserScript==
// @name         云图书馆统一书号普通编目套录MARC信息脚本
// @namespace    aaatk
// @version      1.0.7
// @description  实现统一书号部分书籍的MARC快捷编目(普通编目)
// @author       赵巍
// @match        https://b.ytsg.com/*
// @run-at       document-end
// @grant        GM_setClipboard
// ==/UserScript==
//************************************
//更新日志
//20210416 v1.0.2 增加功能:在非标准图书编目界面,点击解析marc时,把文献类型默认值“其他”改为“图书”
//20210418 v1.0.3 修改:第一第二责任人注释掉替换“著”、“编著”等信息
//************************************
//isbn号
//function str_010a(marc) {
//    var p1 = "010    |a";
//    var p2 = "|d";
//    var a = marc.indexOf(p1);
//    var b = marc.indexOf(p2, a);
//    var t = p1.length;
//    var c = marc.substring(a+t,b);
//    var d = marc.slice(a+t,b);
//    return d;
//    // 该函数返回isbn号
//}
//010定价
//function str_010d(marc) {
//    var p1 = "010    |a";
//    var p2 = " 1";
//    var a = marc.indexOf(p1);
//    var b = marc.indexOf(p2, a);
//    var t = p1.length;
//    var c = marc.substring(a+t,b);
//    var d = marc.slice(a+t,b);
//    //子marc
//    var p3 = "|d";
//    //var p4 = "";
//    var a1 = d.indexOf(p3);
//    //var b1 = d.indexOf(p4, a1);
//    var t1 = p3.length;

//    var c1 = d.substring(a1+t1);
//    //var d1 = d.slice(a1+t1,b1);
//    c1 = c1.replace('CNY', '')
//    return c1;
//    // 该函数返回010定价
//}
function showdate(){//当前日期函数
    var mydate = new Date();
    var year = mydate.getFullYear();
    var month = mydate.getMonth()+1;
    var date = mydate.getDate();
    var str = year+add0(month)+add0(date);
    return str;
}
function add0(m){//日期的月日补0
    return m<10?'0'+m:m
}
function marc_010(marc) {
    var p1 = "010    ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b)+"|";
    c = c.replace('¥', 'CNY')//整理010价格数据
    if (a<0){//如果没有找到010则返还空值
        c="";
    } else {return c;}
    // 该函数返回010
}
function marc_091(marc) {
    var p1 = "091    ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b)+"|";
    c = c.replace('¥', 'CNY')//整理091价格数据
    if (a<0){//如果没有找到091则返还空值
        c="";
    } else {return c;}

    // 该函数返回091
}
function marc_200(marc) {
    var p1 = "200 1  ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b)+"|";
    return c;
    // 该函数返回200
}
function marc_205(marc) {
    var p1 = "205    ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b)+"|";
    if (a<0||b<0){//如果没有找到225则返还空值
        c="";
    } else {return c;}
    // 该函数返回205
}
function marc_210(marc) {
    var p1 = "210    ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b)+"|";
    return c;
    // 该函数返回210
}
function marc_215(marc) {
    var p1 = "215    ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b)+"|";
    return c;
    // 该函数返回210
}
function marc_225(marc) {//丛书
    var p1 = "225 2  ";
    var p2 = "\n"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.slice(a+t,b)+"|";
    if (a<0||b<0){//如果没有找到225则返还空值
        c="";
    } else {return c;}
    // 该函数返回225
}
function marc_690a(marc) {
    var p1 = "690    |a";
    var p2 = "|v"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b);
    return c;
    // 该函数返回690a
}
//集体作者
function marc_711_02a(marc) {
    var p1 = "711 02 |a";
    var p2 = "|9"
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a);
    var t = p1.length;
    var c = marc.substring(a+t,b);
    if (a<0||b<0){//如果没有找到711_02a则返还空值
        c="";
    } else {return c;}
    // 该函数返回71102a
}

/////////////////////////////////////////////

//*题名
function str_200_1a(marc) {
    var p1 = "|a";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    return c;
    // 该函数返回题名
}
//*副题名
function str_200_1e(marc) {
    var p1 = "|e";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到200_1e则返还空值
        d="";
    } else {return d;}
    // 该函数返回副题名
}
//*并列题名
function str_200_1d(marc) {
    var p1 = "|d";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到200_1d则返还空值
        d="";
    } else {return d;}
    // 该函数返回并列题名
}
//*第二题名
function str_200_1c(marc) {
    var p1 = "|c";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到200_1d则返还空值
        d="";
    } else {return d;}
    // 该函数返回并列题名
}
//*丛编题名
function str_225_2a(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|a";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到225_2a则返还空值
        d="";
    } else {return d;}
    // 该函数返回丛编题名
}
//*丛编作者
function str_225_2f(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|f";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到225_2f则返还空值
        d="";
    } else {return d;}
    // 该函数返回丛编作者
}
//*第一责任者
function str_200_1f(marc) {
    var p1 = "|f";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    //d = d.replace('主编', '');
    //d = d.replace('编选', '');
    //d = d.replace('编', '');
    //d = d.replace('著', '');
    //d = d.replace('译', '');
    return d;
    // 该函数返回第一责任者
}
//*第二责任者
function str_200_1g(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|g";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    //d = d.replace('主编', '');
    //d = d.replace('编选', '');
    //d = d.replace('编', '');
    //d = d.replace('著', '');
    //d = d.replace('译', '');
    if (a<0||b<0){//如果没有找到200_1g则返还空值
        d="";
    } else {return d;}
    // 该函数返回第二责任者
}
//*分辑号
function str_200_1h(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|h";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到200_1h则返还空值
        d="";
    } else {return d;}
    // 该函数返回分辑号
}
//*分辑名
function str_200_1i(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|i";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到200_1i则返还空值
        d="";
    } else {return d;}
    // 该函数返回分辑名
}
//*出版社
function str_210c(marc) {
    var p1 = "|c";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到210c则返还空值
        d="";
    } else {return d;}
    // 该函数返回出版社
}
//*出版地
function str_210a(marc) {
    var p1 = "|a";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到210a则返还空值
        d="";
    } else {return d;}
    // 该函数返回出版地
}
//*出版年
function str_210d(marc) {
    var p1 = "|d";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到210d则返还空值
        d="";
    } else {return d;}
    // 该函数返回出版年
}
//*版次
function str_205a(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|a";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到210d则返还空值
        d="";
    } else {return d;}
    // 该函数返回版次
}
//*开本尺寸
function str_215d(marc) {
    var p1 = "|d";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到215d则返还空值
        d="";
    } else {return d;}
    // 该函数返回开本尺寸
}
//*页数
function str_215a(marc) {
    var p1 = "|a";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    if (a<0||b<0){//如果没有找到215d则返还空值
        d="";
    } else {return d;}
    // 该函数返回开本尺寸
}
//*091定价
function str_091d(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|d";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    d = d.replace('CNY', '')
    if (a<0||b<0){//如果没有找到091d则返还空值
        d="";
    } else {return d;}
    // 该函数返回091定价
}
//*091书号
function str_091a(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|a";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    d = d.replace('·', '.')
    if (a<0||b<0){//如果没有找到091a则返还空值
        d="";
    } else {return d;}
    // 该函数返回091书号
}
//*010定价
function str_010d(marc) {
    if (marc==null){
        return "";
    }
    var p1 = "|d";
    var t1 = p1.length;
    var p2 = "|";
    var t2 = p2.length;
    var a = marc.indexOf(p1);
    var b = marc.indexOf(p2, a+t1);
    var c = marc.substring(a+t1,b);
    var d = marc.slice(a+t1,b);
    d = d.replace('CNY', '')
    if (a<0||b<0){//如果没有找到010d则返还空值
        d="";
    } else {return d;}
    // 该函数返回010定价
}


(function() {
    'use strict';
    //模拟按下回车键
    //
    //$(".footer").hide();//隐藏页脚div,厂家广告
    $(".footer").remove();//删除页脚div,厂家广告
    var jqueryScriptBlock = document.createElement('style');
    jqueryScriptBlock.type = 'text/css';
    jqueryScriptBlock.innerHTML = "#readmarc{position:fixed;top:21%;left:20px;border:1px solid gray;padding:3px;width:120px;font-size:12px;cursor:pointer;border-radius: 3px;}#marc{position:fixed;top:14%;resize:none;left:20px;border:1px solid gray;padding:3px;width:120px;height:40px;font-size:14px;cursor:pointer;border-radius: 3px;}";
    document.getElementsByTagName('head')[0].appendChild(jqueryScriptBlock);
    console.log('我的脚本加载了');
    //<input id='marc' type='text' autocomplete='off' spellcheck='false' class='ime'>
    $(document.body).append("<textarea id='marc' rows='3' cols='20'></textarea>");
    $(document.body).append("<input id='readmarc' type='button' value='解析MARC' class='btn'>");
    var marc
    $('#readmarc').click(function () {
        var mode=$(".ISBN dt:first").text();
        if (mode=="*书号" && $(".titleName").text()=="普通编目") {//仅在非标准图书的普通编目开启
            //触发文献类型,改为图书
            // $("#page > div.contentWrapper > div.shit > div > div > div > dl.classify > dd > div > div > div.keyWord").text("图书");$("#page > div.contentWrapper > div.shit > div > div > div > dl.classify > dd > div > div > div.keyWord")[0].dispatchEvent(new Event('change'));
            // $("#page > div.contentWrapper > div.shit > div > div > div > dl.classify > dd > div > div").attr("title","图书");$("#page > div.contentWrapper > div.shit > div > div > div > dl.classify > dd > div > div")[0].dispatchEvent(new Event('change'));
            //
            marc=document.getElementById("marc").value;
            //写入编目文本框
            //写入处理后的书号;触发v-mode更新
            //$(".ISBN input:first").val(str_091a(marc_091(marc)));$(".ISBN input:first")[0].dispatchEvent(new Event('input'));
            //替换isbn书号里面的点,书号不从marc中提取
            $(".ISBN input:first").val(function(i, v) { //index, current value
                return v.replace(".","·");
            });$(".ISBN input:first")[0].dispatchEvent(new Event('input'));
            //制作日期;触发v-mode更新
            $(".date input:first").val(showdate());$(".date input:first")[0].dispatchEvent(new Event('input'));
            //题名;触发v-mode更新
            $(".zhengtiming input:first").val(str_200_1a(marc_200(marc)));$(".zhengtiming input:first")[0].dispatchEvent(new Event('input'));
            //副题名;触发v-mode更新
            $(".futiming input:first").val(str_200_1e(marc_200(marc)));$(".futiming input:first")[0].dispatchEvent(new Event('input'));
            //并列题名;触发v-mode更新
            $(".binlietiming input:first").val(str_200_1d(marc_200(marc)));$(".binlietiming input:first")[0].dispatchEvent(new Event('input'));
            //第二题名;触发v-mode更新
            $(".binlietiming input:first").val(str_200_1c(marc_200(marc)));$(".binlietiming input:first")[0].dispatchEvent(new Event('input'));
            //丛编题名;触发v-mode更新
            $(".conbiantiming input:first").val(str_225_2a(marc_225(marc)));$(".conbiantiming input:first")[0].dispatchEvent(new Event('input'));
            //第一责任者;触发v-mode更新
            $(".firstDuty input:first").val(str_200_1f(marc_200(marc)));$(".firstDuty input:first")[0].dispatchEvent(new Event('input'));
            //第二责任者;触发v-mode更新
            $(".secondDuty input:first").val(str_200_1g(marc_200(marc)));$(".secondDuty input:first")[0].dispatchEvent(new Event('input'));
            //集体作者;触发v-mode更新
            $(".allAuthor input:first").val(marc_711_02a(marc));$(".allAuthor input:first")[0].dispatchEvent(new Event('input'));
            //丛编作者;触发v-mode更新
            $(".author input:first").val(str_225_2f(marc_225(marc)));$(".author input:first")[0].dispatchEvent(new Event('input'));
            //分辑号;触发v-mode更新
            $(".sectionNo input:first").val(str_200_1h(marc_200(marc)));$(".sectionNo input:first")[0].dispatchEvent(new Event('input'));
            //分辑名;触发v-mode更新
            $(".sectionTitle input:first").val(str_200_1i(marc_200(marc)));$(".sectionTitle input:first")[0].dispatchEvent(new Event('input'));
            //出版社;触发v-mode更新
            $(".public input:first").val(str_210c(marc_210(marc)));$(".public input:first")[0].dispatchEvent(new Event('input'));
            //出版地;触发v-mode更新
            $(".publicArea input:first").val(str_210a(marc_210(marc)));$(".publicArea input:first")[0].dispatchEvent(new Event('input'));
            //出版年;触发v-mode更新
            $(".year input:first").val(str_210d(marc_210(marc)));$(".year input:first")[0].dispatchEvent(new Event('input'));
            //版次;触发v-mode更新
            $(".publicNo input:first").val(str_205a(marc_205(marc)));$(".publicNo input:first")[0].dispatchEvent(new Event('input'));
            //开本尺寸;触发v-mode更新
            $(".size input:first").val(str_215d(marc_215(marc)));$(".size input:first")[0].dispatchEvent(new Event('input'));
            //页数;触发v-mode更新
            $(".pageSize input:first").val(str_215a(marc_215(marc)));$(".pageSize input:first")[0].dispatchEvent(new Event('input'));
            //分类号;触发v-mode更新
            $(".classifyNo input:first").val(marc_690a(marc));$(".classifyNo input:first")[0].dispatchEvent(new Event('input'));
            //排架号;触发v-mode更新生成,不可使用
            //$(".shelf input:first")[0].dispatchEvent(new Event('enter'));
            //定价;触发v-mode更新
            var s_price//定义定价,091和010都有可能有定价
            if (str_010d(marc_010(marc))==""){
                s_price = str_091d(marc_091(marc));
            }else{
                s_price = str_010d(marc_010(marc));
            }
            $(".price input:first").val(s_price);$(".price input:first")[0].dispatchEvent(new Event('input'));

            //清空marc文本框
            document.getElementById("marc").value="";
            $(".price input:first").focus();//焦点切换到分类号上
            //如果文献类型是“其他”会提示
            var wxlx=$("#page > div.contentWrapper > div.shit > div > div > div > dl.classify > dd > div > div > div.keyWord").text();
            if (wxlx=="其他"){
                alert("请把【文献类型】改成【图书】");
            }
            //结束
        }else{//不是普通编目的非标准图书页面执行以下内容
            //
            //
            document.getElementById("marc").value="";
            alert("当前页面不是“普通编目-非标准图书”");
        };
        //解析marc按钮执行结束
    });
    //
    //


    //执行时调试信息
    //console.log($(".titleName").text())
})();