rsshub
Version:
Make RSS Great Again!
79 lines (78 loc) • 3.55 kB
JavaScript
import { t as config } from "./config-CCmw1BNE.mjs";
import { t as logger } from "./logger-BKy98Y8B.mjs";
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { t as ConfigNotFoundError } from "./config-not-found-fQ5mxvDU.mjs";
import { t as getPlaywrightPage } from "./playwright-o20DiLNh.mjs";
import { load } from "cheerio";
//#region lib/routes/javdb/utils.ts
const allowDomain = /* @__PURE__ */ new Set([
"javdb.com",
"javdb571.com",
"javdb36.com",
"javdb007.com",
"javdb521.com"
]);
const ProcessItems = async (ctx, currentUrl, title) => {
const domain = ctx.req.query("domain") ?? "javdb.com";
const url = new URL(currentUrl, `https://${domain}`);
if (!config.feature.allow_user_supply_unsafe_domain && !allowDomain.has(url.hostname)) throw new ConfigNotFoundError(`This RSS is disabled unless 'ALLOW_USER_SUPPLY_UNSAFE_DOMAIN' is set to 'true'.`);
const rootUrl = `https://${domain}`;
const { page, destroy, context } = await getPlaywrightPage(url.href, { onBeforeLoad: async (page) => {
if (config.javdb.session) await page.context().addCookies([{
name: "_jdb_session",
value: config.javdb.session,
domain,
path: "/"
}]);
await page.route("**/*", (route) => {
route.request().resourceType() === "document" ? route.continue() : route.abort();
});
} });
const response = await page.content();
await page.close();
const $ = load(response);
$(".tags, .tag-can-play, .over18-modal").remove();
let items = $("div.item").slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 20).toArray().map((item) => {
const element = $(item);
return {
title: element.find(".video-title").text(),
link: `${rootUrl}${element.find(".box").attr("href")}`,
pubDate: parseDate(element.find(".meta").text())
};
});
items = await Promise.all(items.map((item) => cache_default.tryGet(item.link, async () => {
const page = await context.newPage();
await page.route("**/*", (route) => {
route.request().resourceType() === "document" ? route.continue() : route.abort();
});
logger.http(`Requesting ${item.link}`);
await page.goto(item.link, { waitUntil: "domcontentloaded" });
const content = load(await page.content());
item.enclosure_type = "application/x-bittorrent";
item.enclosure_url = content("#magnets-content button[data-clipboard-text]").first().attr("data-clipboard-text");
content("icon").remove();
content("#modal-review-watched, #modal-comment-warning, #modal-save-list").remove();
content(".review-buttons, .copy-to-clipboard, .preview-video-container, .play-button").remove();
content(".preview-images img").each((_, el) => {
content(el).removeAttr("data-src");
content(el).attr("src", content(el).parent().attr("href"));
});
item.category = content(".panel-block .value a").toArray().map((v) => content(v).text());
item.author = content(".panel-block .value").last().parent().find(".value a").first().text();
item.description = content(".cover-container, .column-video-cover").html() + content(".movie-panel-info").html() + content("#magnets-content").html() + content(".preview-images").html();
await page.close();
return item;
})));
const htmlTitle = $("title").text();
const subject = htmlTitle.includes("|") ? htmlTitle.split("|", 1)[0] : "";
await destroy();
return {
title: subject === "" ? title : `${subject} - ${title}`,
link: url.href,
item: items
};
};
var utils_default = { ProcessItems };
//#endregion
export { utils_default as t };