ComicRead

为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、动漫之家(解锁隐藏漫画)、E-Hentai(关联 nhentai、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、PonpomuYuri、再漫画、明日方舟泰拉记事社、禁漫天堂、漫画柜(manhuagui)、漫画DB(manhuadb)、动漫屋(dm5)、绅士漫画(wnacg)、mangabz、komiic、MangaDex、無限動漫、新新漫画、熱辣漫畫、hitomi、SchaleNetwork、kemono、nekohouse、welovemanga

< ComicRead 피드백

리뷰: 좋음 - 잘 동작함

§
작성: 2023-11-20

请求增加ksk新站点
https://anchira.to/

hymbz개발자
§
작성: 2023-11-21

没法支持。。。网页图片全放到了关闭的 shadow DOM 里,直接断了前端的路。后端 API 则做了加密处理,在其他人找到解密手段并开源之前,我是无能为力了。

§
작성: 2024-01-31
let get = async () => {
    let urlArr = window.location.href.split("/");
    let galleryId = urlArr.at(-2);
    let galleryKey = urlArr.at(-1);
    let res = await fetch(`/api/v1/library/${galleryId}/${galleryKey}/data`, {
        "headers": {
            "x-requested-with": "XMLHttpRequest"
        }
    });
    if (res.status != 200) {
        console.log("觸發人機驗證");
    } else {
        let bSrc = document.querySelector("#gallery img").src;
        let imgOrigin = new URL(bSrc).origin;
        let json = await res.json();
        let gallerHash = json.hash;
        let gallerReadKey = json.key;
        let imgSrcs = json.names.map(name => imgOrigin + "/" + galleryId + "/" + gallerReadKey + "/" + gallerHash + "/b/" + name);
        console.log(imgSrcs);
    }
}
get();

需要在畫廊詳情頁使用

hymbz개발자
§
작성: 2024-01-31

@tony0809 非常感谢!不过问下 imgOrigin 一定要现场获取吗?我看 tachiyomi 是直接写死的

§
작성: 2024-01-31

@tony0809 非常感谢!不过问下 imgOrigin 一定要现场获取吗?我看 tachiyomi 是直接写死的

今天没事试了一下,看了控制台发现Read暴露了原始链结,比对了下缩略图和API,然后就成功取得了。
我也不确定imgOrigin会不会全部都是https://kisakisexo.xyz/,是的话就能直接写死。

hymbz개발자
§
작성: 2024-01-31

今天没事试了一下,看了控制台发现Read暴露了原始链结,比对了下缩略图和API,然后就成功取得了。我也不确定imgOrigin会不会全部都是https://kisakisexo.xyz/,是的话就能直接写死。

原来如此,那我就先写死好了,不然还要等元素渲染出来。

hymbz개발자
§
작성: 2024-02-01

已更新支持

§
작성: 2024-07-21

這網站改版了

https://koharu.to/

const get = () => {
    const [, , g_id, g_key] = location.pathname.split("/");
    const detailApi = `https://api.koharu.to/books/detail/${g_id}/${g_key}`;
    fetch(detailApi).then(res => res.json()).then(detailJson => {
        console.log("\ndetailJson\n", detailJson);
        const {
            created_at,
            updated_at,
            data,
            thumbnails
        } = detailJson;
        const {
            base,
            entries
        } = thumbnails;
        const thumbs = entries.map(e => base + e.path);
        console.log("\nthumbs\n", thumbs);
        const [maxSize] = Object.values(data).sort((a, b) => b.size - a.size);
        console.log("\nmaxSize\n", maxSize);
        const {
            id,
            public_key
        } = maxSize;
        const dataApi = `https://api.koharu.to/books/data/${g_id}/${g_key}/${id}/${public_key}?v=${updated_at ?? created_at}`;
        fetch(dataApi).then(res => res.json()).then(dataJson => {
            const {
                base,
                entries
            } = dataJson;
            console.log("\ndataJson\n", dataJson);
            const srcs = entries.map(async (e, i, arr) => {
                await new Promise(resolve => setTimeout(resolve, i * 500));
                return new Promise(async resolve => {
                    const xhr = new XMLHttpRequest;
                    xhr.responseType = "blob";
                    xhr.open("GET", base + e.path);
                    xhr.onload = () => {
                        resolve(URL.createObjectURL(xhr.response));
                    };
                    xhr.send();
                });
            });
            Promise.all(srcs).then(srcs => console.log("\nsrcs\n", srcs));
        });
    });
};
get();
hymbz개발자
§
작성: 2024-07-21

@tony0809 非常感谢!已更新支持

§
작성: 2024-07-27

又又改版了,最高品質加了限制,應該是需要登錄,xhr請求也要傳遞token。

遊客能用的代碼,會員的就懶得弄了。

const get = () => {
    const [, , g_id, g_key] = location.pathname.split("/");
    const detailApi = `https://api.koharu.to/books/detail/${g_id}/${g_key}`;
    fetch(detailApi).then(res => res.json()).then(detailJson => {
        console.log("\ndetailJson\n", detailJson);
        const {
            created_at,
            updated_at,
            data
        } = detailJson;
        const {
            id,
            public_key
        } = data["1280"];
        const dataApi = `https://api.koharu.to/books/data/${g_id}/${g_key}/${id}/${public_key}?v=${updated_at ?? created_at}&w=1280`;
        fetch(dataApi).then(res => res.json()).then(dataJson => {
            const {
                base,
                entries
            } = dataJson;
            console.log("\ndataJson\n", dataJson);
            const srcs = entries.map(async (e, i, arr) => {
                await new Promise(resolve => setTimeout(resolve, i * 500));
                return new Promise(async resolve => {
                    const xhr = new XMLHttpRequest;
                    xhr.responseType = "blob";
                    xhr.open("GET", base + e.path);
                    xhr.onload = () => {
                        resolve(URL.createObjectURL(xhr.response));
                    };
                    xhr.send();
                });
            });
            Promise.all(srcs).then(srcs => console.log("\nsrcs\n", srcs));
        });
    });
};
get();
hymbz개발자
§
작성: 2024-07-28
수정: 2024-07-28

@tony0809 现在限制好像没了?试了下只要给之前的代码补上 &w=xx 的参数也能正常运行

§
작성: 2024-07-28

@tony0809 现在限制好像没了?试了下只要给之前的代码补上 &w=xx 的参数也能正常运行

早上試了最高品質加&w=1600不行...,此時遊客取得json的data最高只有1280,1600不見了,這是又又又改了。
既然這樣就簡單多了,換用拿key的方式。

                const [maxKey] = Object.keys(data).sort((a, b) => b - a);
                const {
                    id,
                    public_key
                } = data[maxKey];
                const dataApi = `https://api.koharu.to/books/data/${g_id}/${g_key}/${id}/${public_key}?v=${updated_at ?? created_at}&w=${maxKey}`;

下周末再測試,網站大改版沒多久,最近應該會改動很頻繁。

hymbz개발자
§
작성: 2024-07-29

@tony0809 脚本已更新

hymbz개발자
§
작성: 2024-11-20

https://niyaniya.moe/wiki/mirrors 又挂了

感谢反馈,已更新支持新域名了。

§
작성: 2024-11-20

似乎没能使用简易模式成功加载

hymbz개발자
§
작성: 2024-11-21

似乎没能使用简易模式成功加载

奇怪,不应该触发简易模式的啊。可能是域名不对?目前脚本支持的是 shupogaki.moehoshino.oneniyaniya.moe 这三个。你点开 https://niyaniya.moe/g/24410/3f37324296e2 这个链接试试。

댓글 남기기

댓글을 남기려면 로그인하세요.