Add mangapub/mangapub.js

This commit is contained in:
aka paul 2025-11-30 20:26:17 +00:00
parent 12a8aea4a0
commit 68f09146a1

101
mangapub/mangapub.js Normal file
View file

@ -0,0 +1,101 @@
async function searchContent(keyword, page=0) {
const results = [];
try {
const response = await fetch("https://mangapub.com/api/book/search?q=" + encodeURIComponent(keyword));
const html = await response.text();
const regex = /<a[^>]*href="([^"]*)"[^>]*>[\s\S]*?<img[^>]*src="([^"]*)"[\s\S]*?<h3[^>]*>[\s\S]*?<a[^>]*>([\s\S]*?)<\/a>[\s\S]*?<\/h3>/g;
let match;
while ((match = regex.exec(html)) !== null) {
results.push({
id: "https://mangapub.com" + match[1].trim(),
imageURL: match[2].trim(),
title: match[3].replace(/<[^>]+>/g, '').trim()
});
}
return results;
} catch (err) {
return [];
}
}
async function getContentData(url) {
try {
const response = await fetch(url);
const html = await response.text();
const descRegex = /<meta name="description" content="([^"]+)"/i;
const descMatch = descRegex.exec(html);
const description = descMatch ? descMatch[1].trim() : "";
return {
description: description.replace(" - not found...", "").trim(),
tags: []
};
} catch (err) {
return {
description: "Error",
tags: []
};
}
}
async function getChapters(url) {
const results = [];
try {
const response = await fetch(url);
const html = await response.text();
const idRegex = /var bookId = "([^"]+)"/;
const idMatch = idRegex.exec(html);
if (!idMatch) return { en: [] };
const manga_id = idMatch[1];
const chapUrl = `https://mangapub.com/api/book/${manga_id}/chapters?source=detail`;
const chapResponse = await fetch(chapUrl, { headers: { "Referer": "https://mangapub.com/" } });
const chapHtml = await chapResponse.text();
const regex = /<li[^>]*>\s*<a href="([^"]*)"[^>]*>\s*<div>\s*<strong class="chapter-title">(Chapter [^\s<]+)<\/strong>/g;
let match;
while ((match = regex.exec(chapHtml)) !== null) {
const chapterUrl = "https://mangapub.com" + match[1];
const chapterTitle = match[2];
const chapterNum = chapterTitle.replace('Chapter ', '');
results.push([
chapterNum,
[{
id: chapterUrl,
title: chapterTitle,
chapter: parseFloat(chapterNum),
scanlation_group: chapterTitle
}]
]);
}
return { en: results };
} catch (err) {
return { en: [] };
}
}
async function getChapterImages(url) {
const results = [];
try {
const response = await fetch(url);
const html = await response.text();
const regex = /indicators = "([^"]*)"/;
const match = regex.exec(html);
if (match) {
const images = match[1].split(',');
const processedImages = images.map(img => img.trim()).filter(img => img.length > 0);
results.push(...processedImages);
}
return results;
} catch (err) {
return [];
}
}