feat: new site 18av

This commit is contained in:
mrbunker
2023-07-29 16:23:09 +08:00
parent 35e0646f7f
commit 59a83bdb12
3 changed files with 21 additions and 10 deletions

View File

@@ -4,9 +4,16 @@ import { type LibItem } from "./libSites";
const isCaseInsensitiveEqual = (str1: string, str2: string) => { const isCaseInsensitiveEqual = (str1: string, str2: string) => {
return str1.toLowerCase() === str2.toLowerCase(); return str1.toLowerCase() === str2.toLowerCase();
}; };
const isErrorCode = (resCode: number) => { const isErrorCode = (resCode: number) => {
return [404, 403].includes(resCode); return [404, 403].includes(resCode);
}; };
const regEnum = {
subtitle: /(中文|字幕|subtitle)/,
leakage: /(无码|無碼|泄漏|Uncensored)/,
};
const getCode = (libItem: LibItem): string => { const getCode = (libItem: LibItem): string => {
const { codeQueryStr } = libItem.querys; const { codeQueryStr } = libItem.querys;
const codeNode = document.querySelector<HTMLElement>(codeQueryStr); const codeNode = document.querySelector<HTMLElement>(codeQueryStr);
@@ -43,4 +50,4 @@ const gmFetch = ({ url }: { url: string }): Promise<TResponse> => {
}); });
}; };
export { isCaseInsensitiveEqual, isErrorCode, getCode, gmFetch }; export { isCaseInsensitiveEqual, isErrorCode, getCode, gmFetch, regEnum as regEnum };

View File

@@ -281,6 +281,14 @@ export const siteList: SiteItem[] = [
domQuery: { linkQuery: ".well>a[href]", titleQuery: ".well>a[href]>span.video-title" }, domQuery: { linkQuery: ".well>a[href]", titleQuery: ".well>a[href]>span.video-title" },
method: print, method: print,
}, },
{
name: "18av",
hostname: "18av.mm-cg.com",
url: "https://18av.mm-cg.com/zh/fc_search/all/{{code}}/1.html",
fetcher: "parser",
domQuery: { linkQuery: ".posts h3>a[href]", titleQuery: ".posts h3>a[href]" },
method: print,
},
{ {
name: "JavBus", name: "JavBus",
disableLibItemName: "javbus", disableLibItemName: "javbus",

View File

@@ -1,4 +1,4 @@
import { gmFetch, isCaseInsensitiveEqual, isErrorCode } from "@/utils"; import { gmFetch, isCaseInsensitiveEqual, isErrorCode, regEnum } from "@/utils";
import type { DomQuery_get, DomQuery_parser, SiteItem } from "./siteList"; import type { DomQuery_get, DomQuery_parser, SiteItem } from "./siteList";
export type FetchResult = { export type FetchResult = {
@@ -9,8 +9,6 @@ export type FetchResult = {
msg: string; msg: string;
}; };
const leakReg = /(无码|無碼|泄漏|Uncensored)/;
/** 针对视频播放页进行解析,寻找字幕等信息 */ /** 针对视频播放页进行解析,寻找字幕等信息 */
function videoPageParser(responseText: string, { subQuery, leakQuery, videoQuery }: DomQuery_get) { function videoPageParser(responseText: string, { subQuery, leakQuery, videoQuery }: DomQuery_get) {
const doc = new DOMParser().parseFromString(responseText, "text/html"); const doc = new DOMParser().parseFromString(responseText, "text/html");
@@ -26,8 +24,8 @@ function videoPageParser(responseText: string, { subQuery, leakQuery, videoQuery
const videoNode = videoQuery ? doc.querySelector<HTMLElement>(videoQuery) : true; const videoNode = videoQuery ? doc.querySelector<HTMLElement>(videoQuery) : true;
return { return {
isSuccess: !!videoNode, isSuccess: !!videoNode,
hasSubtitle: subNodeText.includes("字幕") || subNodeText.includes("subtitle"), hasSubtitle: regEnum.subtitle.test(subNodeText),
hasLeakage: leakReg.test(linkNodeText), hasLeakage: regEnum.leakage.test(linkNodeText),
}; };
} }
@@ -55,13 +53,11 @@ function serachPageParser(
if (isSuccess) { if (isSuccess) {
const targetLinkText = linkNode.href.replace(linkNode.hostname, siteHostName); const targetLinkText = linkNode.href.replace(linkNode.hostname, siteHostName);
const hasSubtitle = titleNodeText.includes("字幕") || titleNodeText.includes("subtitle");
return { return {
isSuccess: true, isSuccess: true,
targetLink: targetLinkText, targetLink: targetLinkText,
hasLeakage: leakReg.test(titleNodeText), hasLeakage: regEnum.leakage.test(titleNodeText),
hasSubtitle, hasSubtitle: regEnum.subtitle.test(titleNodeText),
}; };
} else { } else {
return { targetLink: "", isSuccess: false, hasSubtitle: false, hasLeakage: false }; return { targetLink: "", isSuccess: false, hasSubtitle: false, hasLeakage: false };