Greasy Fork

Greasy Fork is available in English.

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

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

当前为 2021-02-20 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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.3
// @author      芜湖
// @description 2/5/2021, 10:00:00 AM
// ==/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);
    }
})();