Greasy Fork

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

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

// ==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     1.0
// @author      芜湖
// @description 打开指定网址:https://i.dmzj1.com//subscribe,登录动漫之家账号后,点击浏览器工具栏的用户脚本管理器图标,点击“开始导出动漫之家订阅”,或复制该脚本的所有内容,粘贴到浏览器控制台输入框,回车开始运行。
// ==/UserScript==

/*

导出动漫之家订阅漫画到[Tachiyomi漫画阅读器](https://tachiyomi.org/)
==
- 该脚本可在浏览器控制台或Violentmonkey、Tampermonkey等用户脚本管理器中运行。
- 用户脚本管理器:在用户脚本管理器内安装此脚本后,打开指定网址:https://i.dmzj1.com//subscribe,登录动漫之家账号后,点击浏览器工具栏的用户脚本管理器图标,点击“开始导出动漫之家订阅”即可运行此脚本。
- 控制台:打开指定网址:https://i.dmzj1.com//subscribe ,登录动漫之家账号后,复制该脚本的所有内容,粘贴到浏览器控制台输入框,回车开始运行。
- 导入tachiyomi:在 tachiyomi设置 → 备份 中点击“还原备份”,选择此脚本导出的JSON备份文件即可开始导入。

说明
--
- 一次性导出过多漫画到tachiyomi书架内会对你查找原有的书架条目带来不便,同时也会严重拖慢tachiyomi更新书架的速度,
    因此该脚本默认会把动漫之家导出的漫画放到名为"动漫之家备份"的书架分类下,你可以通过修改此脚本的代码来指定导出时使用的分类名称。
- 不需要提前在tachiyomi中创建该分类,导入时会自动创建。
- 导入tachiyomi后,建议在 tachiyomi设置 → 书架 中调整“默认分类”和“全局更新时包含的分类”:
    - 新加入书架的漫画会自动放入“默认分类”,不需要每次加入书架时手动选择。
    - “全局更新时包含的分类”,~~建议把“动漫之家备份”排除在外~~,请自行考虑,虽然漫画条目过多会严重拖慢更新书架的速度,但是导入JSON备份文件时会把原来就已经加入了书架,而且也存在于导出的JSON备份文件中的任何<strong>未分类的动漫之家漫画条目</strong>移到此脚本创建的"动漫之家备份"的书架分类下,如果你将“动漫之家备份”从“全局更新时包含的分类”中排除,那么你将需要每次都手动切换到“动漫之家备份”分类来更新这些漫画条目。
    - 当需要更新某个分类下的漫画条目时,在书架页面点击画面顶部的选择栏,选中某个分类后,在靠近屏幕中间做出下拉手势即可。

*/

(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);
    }
})();