feat: new site 18av
This commit is contained in:
@@ -4,9 +4,16 @@ import { type LibItem } from "./libSites";
|
||||
const isCaseInsensitiveEqual = (str1: string, str2: string) => {
|
||||
return str1.toLowerCase() === str2.toLowerCase();
|
||||
};
|
||||
|
||||
const isErrorCode = (resCode: number) => {
|
||||
return [404, 403].includes(resCode);
|
||||
};
|
||||
|
||||
const regEnum = {
|
||||
subtitle: /(中文|字幕|subtitle)/,
|
||||
leakage: /(无码|無碼|泄漏|Uncensored)/,
|
||||
};
|
||||
|
||||
const getCode = (libItem: LibItem): string => {
|
||||
const { codeQueryStr } = libItem.querys;
|
||||
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 };
|
||||
|
||||
@@ -281,6 +281,14 @@ export const siteList: SiteItem[] = [
|
||||
domQuery: { linkQuery: ".well>a[href]", titleQuery: ".well>a[href]>span.video-title" },
|
||||
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",
|
||||
disableLibItemName: "javbus",
|
||||
|
||||
@@ -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";
|
||||
|
||||
export type FetchResult = {
|
||||
@@ -9,8 +9,6 @@ export type FetchResult = {
|
||||
msg: string;
|
||||
};
|
||||
|
||||
const leakReg = /(无码|無碼|泄漏|Uncensored)/;
|
||||
|
||||
/** 针对视频播放页进行解析,寻找字幕等信息 */
|
||||
function videoPageParser(responseText: string, { subQuery, leakQuery, videoQuery }: DomQuery_get) {
|
||||
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;
|
||||
return {
|
||||
isSuccess: !!videoNode,
|
||||
hasSubtitle: subNodeText.includes("字幕") || subNodeText.includes("subtitle"),
|
||||
hasLeakage: leakReg.test(linkNodeText),
|
||||
hasSubtitle: regEnum.subtitle.test(subNodeText),
|
||||
hasLeakage: regEnum.leakage.test(linkNodeText),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -55,13 +53,11 @@ function serachPageParser(
|
||||
|
||||
if (isSuccess) {
|
||||
const targetLinkText = linkNode.href.replace(linkNode.hostname, siteHostName);
|
||||
|
||||
const hasSubtitle = titleNodeText.includes("字幕") || titleNodeText.includes("subtitle");
|
||||
return {
|
||||
isSuccess: true,
|
||||
targetLink: targetLinkText,
|
||||
hasLeakage: leakReg.test(titleNodeText),
|
||||
hasSubtitle,
|
||||
hasLeakage: regEnum.leakage.test(titleNodeText),
|
||||
hasSubtitle: regEnum.subtitle.test(titleNodeText),
|
||||
};
|
||||
} else {
|
||||
return { targetLink: "", isSuccess: false, hasSubtitle: false, hasLeakage: false };
|
||||
|
||||
Reference in New Issue
Block a user