Greasy Fork

新志数据共享

把页面上的部分信息抽取成JSON并放入剪切板!

// ==UserScript==
// @name         新志数据共享
// @namespace    http://tampermonkey.net/
// @version      1.0.14
// @description  把页面上的部分信息抽取成JSON并放入剪切板!
// @author       Ade
// @license      MIT
// @match        https://fz.wanfangdata.com.cn/details/*.do?*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_setClipboard
// @require      https://code.jquery.com/jquery-1.11.min.js
// ==/UserScript==

(function() {
    //'use strict';

    // Your code here...
    let _data = {
      chronclesAuthor:'',
      chronclesUnit:'',
      word:'',
      menuList:[],
      remark:''
    }

    initButton();
    /** 创建按钮 */
    function initButton() {
    $(".content").append("<button class='cjwk_btn cjwk_btn_arr'>复制全部</button>");
        const _all_btn = `
                        <button class='cjwk_btn cjwk_btn_all_intro'>复制内容简介</button>
                        <button class='cjwk_btn cjwk_btn_all_personnel'>复制编纂人员</button>
                        <button class='cjwk_btn cjwk_btn_all_unit'>复制编纂单位</button>
                        <button class='cjwk_btn cjwk_btn_all_time'>复制内容时限</button>
                      `
    $(".mod-topbar").append(`<button class='cjwk_btn cjwk_btn_all_catalogue'>复制目录</button>`);
    $(".mod-cover").append(`<div class="cjwk_all_btn_warp">${_all_btn}</div>`);
    $('.cjwk_btn').css({
        "background-color": "#f98c51",
        "display": "inline-block",
        "height": "32px",
        "width": "auto",
        "padding": "0 10px",
        "font-size": "14px",
        "text-indent": "0",
        "text-align": "center",
        "color": "#fff",
        "line-height": "32px",
        "font-family": "Microsoft Yahei,serif",
        "border-radius": "4px",
        "overflow": "visible",
    });
    $(".cjwk_btn_arr").css({
        "position": "fixed",
        "top": "100px",
        "right": "14%",
        "z-index": "99",
    });
    $(".cjwk_all_btn_warp").css({
        "display": "fixe",
    });
    $(".cjwk_all_btn_warp button").css({
        "margin-right": "5px",
    });
  }


    class GetWanfangdata{
        constructor() {
            this.modCoverpText = $('.mod-cover p')//获取所有内容及标题
            this.intro = $(".mod-cover p:eq(0)").text()//内容简介
            this.personnel = $('.mod-cover p:eq(1)').text()//编纂人员
            this.unitText = $('.mod-cover p:eq(2) strong').text()//编纂人员
            this.unit = $('.mod-cover p:eq(2)').text()//编纂单位
            this.timelimit = $('.mod-cover p:eq(3)').text()//内容时限
            this.qukg = /\s+/mg, ''
            this.tihuan = /\d+\.(\S+?)(?=\d+\.|$)/mg

            this.titleText_0 = $('.mod-cover p:eq(0) strong').text()//判断是否有内容简介
            this.titleText_1 = $('.mod-cover p:eq(1) strong').text()//判断是否有编纂人员
            this.titleText_2 = $('.mod-cover p:eq(2) strong').text()//判断是否有编纂单位
            this.titleText_3 = $('.mod-cover p:eq(3) strong').text()//判断是否有内容时限
        }
        switchTitle(text){//判断标题内容
            let _text = '';
             for(let i=0;i<this.modCoverpText.length;i++){
                 let li = this.modCoverpText[i].innerText
                 if(li.indexOf(text)>-1){
                    _text = li
                      console.log(i,li)
                    break;
                 }
            }
            return _text
        }
        getintro() {//内容简介
            let _text = this.switchTitle('内容简介:')
            return _text?.substring(5,_text.length)||'暂无简介';
        }
        getpersonnel() {//编纂人员
            let _text = this.switchTitle('编纂人员:')
            return _text?.substring(5,_text.length)||'暂无人员';
        }
        getunit() {//编纂单位
            let _text = this.switchTitle('编纂单位:')
            return _text?.substring(5,_text.length)||'暂无单位';
        }
        gettimelimit() {//内容时限
            let _text = this.switchTitle('内容时限:')
            return _text?.substring(5,_text.length)||'暂无时间';
        }
        getcatalogue() {//获取目录
            let _menuList = [];
            return this.setDataString('list').arr;
        }
        setDataString(listDom) {
            let _list = document.getElementById(listDom).children;
            let _listData = [], _listDataString = '';
            for (let i = 0; i < _list.length; i++) {
                if (!_list[i].children[2]) break;
                let _noeData = _list[i].children[2].children; //一级子数据集合
                if (!_noeData.length) { //只有一级目录--判断是否有子级,没有子级添加一级
                    let _oneText = {
                        label: _list[i].children[1].innerText,
                        children: [],
                        level:1
                    };
                    _listData.push(_oneText);//保存一级菜单
                    _listDataString += _list[i].children[1].innerText + '\n';
                    delete _noeData[i]
                } else {
                    let _towText = {
                        label: _list[i].children[1].innerText,
                        children: [],
                        level:1
                    };
                    for (let j = 0; j < _noeData.length; j++) {
                        let _towData = _noeData[j].children[1]; //二级子数据集合
                        if (!_towData.children.length) {
                            _towText.children.push({
                                label: _noeData[j].children[0].innerText,
                                children: [],
                                level:2
                            });
                            delete _towData[j];
                        } else {
                            let _threeText = {
                                label: _noeData[j].children[0].innerText,
                                children: [],
                                level:2
                            };
                            for (let k = 0; k < _towData.children.length; k++) {
                                let _three = _towData.children[k].children[0].innerText; //第三级单个目录
                                _threeText.children.push({
                                    label: _three,
                                    children: [],
                                    level:3
                                });
                            };
                            _towText.children.push(_threeText);//保存三级菜单
                        }
                      //  _towText.text += '\n   ' + _noeData[j].children[0].innerText;//设置二级字符串,若保存正常集合 需要把这行注释
                    }
                    _listData.push(_towText);//保存二级菜单
                    _listDataString += _towText.text + '\n';
                };
            };
            return {
                arr: _listData,//输出数组集合
                str: _listDataString//输出字符串
            };
        };
        cleardata(){
           _data = {
               chronclesAuthor:'',
               chronclesUnit:'',
               word:'',
               menuList:[],
               remark:''
           }
        }
    }
    let _getData = new GetWanfangdata();
    $('.content').on('click','.cjwk_btn_arr',()=>{
      _data.word = _getData.getintro();
      _data.chronclesAuthor = _getData.getpersonnel();
      _data.chronclesUnit = _getData.getunit();
      _data.menuList = _getData.getcatalogue();
      _data.remark = _getData.gettimelimit();
         GM_setClipboard(JSON.stringify(_data), 'text');
        console.log(_data)
         alert('全部信息获取成功,已复制')
    })
    $('.mod-cover').on('click','.cjwk_btn_all_intro',()=>{
       _getData.cleardata();
      _data.word = _getData.getintro();
         GM_setClipboard(JSON.stringify(_data), 'text');
        console.log(_data)
        alert('内容简介信息获取成功,已复制')
    })
    $('.mod-cover').on('click','.cjwk_btn_all_personnel',()=>{
       _getData.cleardata();
      _data.chronclesAuthor = _getData.getpersonnel();
        console.log(_data)
         GM_setClipboard(JSON.stringify(_data), 'text');
         alert('编纂人员信息获取成功,已复制')
    })
    $('.mod-cover').on('click','.cjwk_btn_all_unit',()=>{
       _getData.cleardata();
      _data.chronclesUnit = _getData.getunit();
        console.log(_data)
         GM_setClipboard(JSON.stringify(_data), 'text');
        alert('编纂单位信息获取成功,已复制')
    })
    $('.mod-cover').on('click','.cjwk_btn_all_time',()=>{
       _getData.cleardata();
      _data.remark = _getData.gettimelimit();
        console.log(_data)
         GM_setClipboard(JSON.stringify(_data), 'text');
        alert('内容时限信息获取成功,已复制')
    })
    $('.mod-topbar').on('click','.cjwk_btn_all_catalogue',()=>{
       _getData.cleardata();
      _data.menuList = _getData.getcatalogue()
        console.log(_data)
         GM_setClipboard(JSON.stringify(_data), 'text');
        alert('目录信息获取成功,已复制')
    })

})();