TV-BOX/tvbox/瑟瑟/drpy_js/missav.user.js
yuanwangokk-1 7f1f31e07d main
2025-09-25 22:41:24 +08:00

272 lines
No EOL
11 KiB
JavaScript

// ==UserScript==
// @name MissAV
// @namespace gmspider
// @version 2024.12.03
// @description MissAV GMSpider
// @author Luomo
// @match https://missav.*/*
// @require https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.slim.min.js
// @grant unsafeWindow
// ==/UserScript==
console.log(JSON.stringify(GM_info));
(function () {
const GMSpiderArgs = {};
if (typeof GmSpiderInject !== 'undefined') {
let args = JSON.parse(GmSpiderInject.GetSpiderArgs());
GMSpiderArgs.fName = args.shift();
GMSpiderArgs.fArgs = args;
} else {
GMSpiderArgs.fName = "detailContent";
GMSpiderArgs.fArgs = [true];
}
Object.freeze(GMSpiderArgs);
const GmSpider = (function () {
const filter = {
key: "filter",
name: "过滤",
value: [{
n: "所有",
v: ""
}, {
n: "单人作品",
v: "&filters=individual"
}, {
n: "多人作品",
v: "&filters=multiple"
}, {
n: "中文字幕",
v: "&filters=chinese-subtitle"
}]
};
const filterWithoutSort = [
filter
];
const defaultFilter = [
filter,
{
key: "sort",
name: "排序方式",
value: [
{
n: "发行日期",
v: "&sort=released_at"
},
{
n: "最近更新",
v: "&sort=published_at"
},
{
n: "收藏数",
v: "&sort=saved"
},
{
n: "今日浏览数",
v: "&sort=today_views"
},
{
n: "本周浏览数",
v: "&sort=weekly_views"
},
{
n: "本月浏览数",
v: "&sort=monthly_views"
},
{
n: "总浏览数",
v: "&sort=views"
}
]
}];
function pageList(result) {
result.pagecount = parseInt($("#price-currency").text().replace(/[^0-9]/ig, ""));
result.total = result.pagecount * result.limit;
$(".gap-5 .thumbnail").each(function (i) {
result.list.push({
vod_id: $(this).find(".text-secondary").attr("alt"),
vod_name: $(this).find(".text-secondary").text().trim(),
vod_pic: $(this).find("img").data("src"),
vod_year: $(this).find(".right-1").text().trim(),
vod_remarks: $(this).find(".left-1").text().trim(),
})
});
return result;
}
function categoryList(result) {
$(".gap-4 div").each(function () {
result.list.push({
vod_id: getCategoryFromUrl($(this).find(".text-nord13").attr("href")),
vod_name: $(this).find(".text-nord13").text().trim(),
vod_remarks: $(this).find(".text-nord10 a").text().trim(),
vod_tag: "folder",
style: {
"type": "rect",
"ratio": 2
}
})
});
result.limit = 36;
result.pagecount = parseInt($("#price-currency").text().replace(/[^0-9]/ig, ""));
result.total = result.pagecount * result.limit;
return result;
}
function getCategoryFromUrl(url) {
return url.split('/cn/').at(1);
}
function formatDetail(detail, ...keys) {
let format = "";
for (let key of keys) {
format += key in detail ? (Array.isArray(detail[key]) ? detail[key].join(" ") : detail[key]) : "";
}
return format;
}
return {
homeContent: function (filter) {
let result = {
class: [
{type_id: "new", type_name: "所有影片"},
{type_id: "madou", type_name: "麻豆传媒"},
{type_id: "chinese-subtitle", type_name: "中文字幕"},
{type_id: "uncensored-leak", type_name: "无码流出"},
{type_id: "actresses/ranking", type_name: "热门女优"},
{type_id: "makers", type_name: "发行商"},
{type_id: "genres", type_name: "类型"},
],
filters: {
"new": defaultFilter,
"madou": defaultFilter,
"chinese-subtitle": defaultFilter,
"uncensored-leak": defaultFilter,
"actresses/ranking": defaultFilter,
"makers": defaultFilter,
"genres": defaultFilter
},
list: []
};
$(".gap-5:eq(5) .thumbnail").each(function () {
result.list.push({
vod_id: $(this).find(".text-secondary").attr("alt"),
vod_name: $(this).find(".text-secondary").text().trim(),
vod_pic: $(this).find("img").data("src"),
vod_year: $(this).find(".absolute").text().trim()
})
});
console.log(result);
return result;
},
categoryContent: function (tid, pg, filter, extend) {
let result = {
list: [],
limit: 12,
total: 0,
page: pg,
pagecount: 0
};
if (tid === "actresses/ranking") {
$(".gap-4 .space-y-4").each(function () {
result.list.push({
vod_id: getCategoryFromUrl($(this).find(".space-y-2 a").attr("href")),
vod_name: $(this).find(".truncate").text().trim(),
vod_pic: $(this).find("img").length > 0 ? $(this).find("img").attr("src") : "",
vod_remarks: $(this).find(".text-sm").text().trim(),
vod_tag: "folder",
style: {
"type": "rect",
"ratio": 1
}
})
});
result.limit = 100;
result.total = 100;
result.pagecount = 1;
} else if (tid === "makers") {
function getNavs(name) {
$("nav.hidden .relative a.group span:contains('" + name + "')").parents(".relative:first").find(".py-1 a").each(function () {
result.list.push({
vod_id: getCategoryFromUrl($(this).attr("href")),
vod_name: $(this).text().trim(),
vod_remarks: name,
vod_tag: "folder",
style: {
"type": "rect",
"ratio": 2
}
})
})
}
if (pg == 1) {
getNavs("国产 AV");
getNavs("无码影片");
getNavs("素人");
}
result = categoryList(result)
} else if (tid === "genres") {
result = categoryList(result)
} else {
result = pageList(result);
}
return result;
},
detailContent: function (ids) {
let detail = {};
$(".space-y-2:not(.list-disc) .text-secondary").each(function () {
const key = $(this).find("span:first").text().replace(":", "");
if ($(this).find("a").length === 0) {
detail[key] = $(this).find("span:first").remove().end().text().trim();
} else {
detail[key] = [];
$(this).find("a").each(function () {
const id = getCategoryFromUrl($(this).attr("href"));
const name = $(this).text();
detail[key].push(`[a=cr:{"id":"${id}","name":"${name}"}/]${name}[/a]`);
})
}
});
console.log($('a.items-center:contains("显示更多")'));
const vod = {
vod_id: ids[0],
vod_name: ids[0].toUpperCase(),
vod_pic: $("head link[as=image]").attr("href"),
vod_year: $("#space-y-2 time").text(),
vod_remarks: formatDetail(detail, "类型"),
vod_actor: formatDetail(detail, "女优"),
vod_content: $('a.items-center:contains("显示更多")').length > 0 ? $("head meta[name=description]").attr("content") : $("head meta[property='og:title']").attr("content"),
vod_play_from: "老僧酿酒",
vod_play_url: "名妓读经$" + hls.url,
};
console.log({list: [vod]})
return {list: [vod]};
},
searchContent: function (key, quick, pg) {
let result = {
list: [],
limit: 12,
total: 0,
page: pg,
pagecount: 0
};
result = pageList(result);
return result;
}
};
})();
$(document).ready(function () {
let result = "";
if ($("#cf-wrapper").length > 0) {
console.log("源站不可用:" + $('title').text());
GM_toastLong("源站不可用:" + $('title').text());
} else {
result = GmSpider[GMSpiderArgs.fName](...GMSpiderArgs.fArgs);
}
console.log(result);
if (typeof GmSpiderInject !== 'undefined') {
GmSpiderInject.SetSpiderResult(JSON.stringify(result));
}
});
})();