Greasy Fork

导出动漫之家订阅漫画到Tachiyomi漫画阅读器

2/5/2021, 10:00:00 AM

目前为 2021-02-09 提交的版本。查看 最新版本

// ==UserScript==
// @name        导出动漫之家订阅漫画到Tachiyomi漫画阅读器
// @namespace   https://i.dmzj1.com//subscribe
// @match       https://i.dmzj.com//subscribe
// @match       https://i.dmzj1.com//subscribe
// @grant       GM_registerMenuCommand
// @run-at      document-end
// @version     0.2
// @author      芜湖
// @description 2/5/2021, 10:00:00 AM
// ==/UserScript==

/* 
  *该脚本可在浏览器控制台或Violentmonkey、Tampermonkey等用户脚本管理器中运行。
    *用户脚本管理器:在用户脚本管理器内安装此脚本后,指定网址:https://i.dmzj1.com//subscribe ,登录动漫之家账号后
     点击浏览器工具栏的用户脚本管理器图标,点击“开始导出动漫之家订阅”即可运行此脚本。
 
    *控制台:打开指定网址:https://i.dmzj1.com//subscribe ,登录动漫之家账号后,复制该脚本的所有内容,粘贴到浏览器控制台输入框,
     回车开始运行。

  *导入tachiyomi:在 <tachiyomi设置> → <备份> 中点击“还原备份”,选择此脚本导出的JSON文件即可开始导入。

  --说明--------------------------------------
  *一次性导出过多漫画到tachiyomi书架内会对你查找原有的书架条目带来不便,同时也会严重拖慢tachiyomi更新书架的速度,
   因此该脚本默认会把动漫之家导出的漫画放到名为"动漫之家备份"的书架分类下,你可以自行修改分类名称。
  
  *不需要提前在tachiyomi中创建该分类,导入时会自动创建。

  *导入tachiyomi后,建议在 <tachiyomi设置> → <书架> 中调整“默认分类”和“全局更新时包含的分类”:
    - 新加入书架的漫画会自动放入“默认分类”,不需要每次加入书架时手动选择。
    - “全局更新时包含的分类”,建议把“动漫之家备份”排除在外,避免条目过多而严重拖慢更新书架的速度。
    - 当需要更新某个特定分类下的条目时,在书架页面点击画面顶部的选择栏,选中特定分类后,在靠近屏幕中间做出下拉手势即可。

  *一个漫画可以存在于多个tachiyomi分类中,因此原先就加入了默认分类的动漫之家漫画依旧可以跟随全局更新。
  --------------------------------------------
*/

(function () {
    try {
        if (GM_registerMenuCommand) {
            GM_registerMenuCommand("开始导出动漫之家订阅", exportToTachiyomi);
        }
    } catch (error) {
        exportToTachiyomi();
    }

    function exportToTachiyomi() {
        //--可自行修改---------------------------------------
        let categorieName = "动漫之家备份"; //指定分类名称,漫画会导出到这个分类下
        //-------------------------------------------------

        if (!(window.location.host.startsWith("i.dmzj"))) {
            console.log("网址错误:" + window.location.href);
            return;
        }

        // replaceAll 兼容性补丁
        if (!String.prototype.replaceAll) {
            String.prototype.replaceAll = function (str, newStr) {
                // If a regex pattern
                if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') {
                    return this.replace(str, newStr);
                }
                // If a string
                return this.replace(new RegExp(str, 'g'), newStr);
            };
        }

        let mangaList = new Map();
        let nodelist = document.querySelectorAll("#my_subscribe_id .dy_content_li");
        nodelist.forEach(element => {
            let name = element.querySelector("h3").textContent;
            let cid = element.querySelector("a.qx").getAttribute("value");
            mangaList.set(cid, name);
        });
        console.log("找到" + mangaList.size + "个订阅");

        class TachiyomiManga {
            constructor(name, cid) {
                this.manga = [
                    "/comic/comic_" + cid + ".json?version\u003d2.7.019",   //网址
                    name,                                                   //漫画名
                    "2884190037559093788",                                  //动漫之家插件识别ID
                    0,
                    0
                ]
                this.categories = [
                    categorieName,                                          //导出到特定分类
                ]
            }
        }

        let tachiyomiMangaList = {
            "version": 2,
            "mangas": [],
            "categories": [
                [
                    categorieName,
                    0
                ]
            ],
            "extensions": [
                "2884190037559093788:动漫之家"
            ]
        }

        mangaList.forEach((value, key, map) => {
            const m = new TachiyomiManga(value, key);
            tachiyomiMangaList.mangas.push(m);
        })
        let json = JSON.stringify(tachiyomiMangaList);
        json = json.replaceAll('"2884190037559093788"', '2884190037559093788');

        //保存成文件
        let elementA = document.createElement('a');
        elementA.download = "dmzj_export_to_tachiyomi_" + (new Date().toLocaleString()) + ".json";
        elementA.style.display = 'none';

        let blob = new Blob([json]);
        elementA.href = URL.createObjectURL(blob);
        document.body.appendChild(elementA);
        elementA.click();
        document.body.removeChild(elementA);
    }
})();