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

161 lines
No EOL
7.1 KiB
JavaScript

// ==UserScript==
// @name XOJAV
// @namespace gmspider
// @version 2024.12.02
// @description XOJAV GMSpider
// @author Luomo
// @match https://xojav.tv/*
// @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 = "searchContent";
GMSpiderArgs.fArgs = [["ssni-748"]];
}
Object.freeze(GMSpiderArgs);
const GmSpider = (function () {
function listVideos(select) {
let vods = [];
$(select).each(function () {
const remarks = [
"👁️" + $(this).find(".card-video__stats .num:first").text().trim(),
"❤️" + $(this).find(".card-video__fav-button .num").text().trim()
];
const url = new URL($(this).find(".card-video__title a").attr("href"));
vods.push({
vod_id: url.pathname.split('/').at(2).toUpperCase(),
vod_name: $(this).find(".card-video__img img").attr("alt"),
vod_pic: $(this).find(".card-video__img img").data("src"),
vod_remarks: remarks.join(" "),
vod_year: $(this).find(".card-video__duration").text().trim()
})
})
return vods;
}
return {
homeContent: function (filter) {
let result = {
class: [
{type_id: "latest-updates?sort_by=release_at", type_name: "最近更新"},
{type_id: "categories/taiwan-av?sort_by=release_at", type_name: "台湾AV"},
{type_id: "stars?sort_by=stars", type_name: "近期最佳"},
{type_id: "hot?sort_by=views", type_name: "热门"},
{type_id: "categories?", type_name: "所有分类"},
],
filters: {
"categories/taiwan-av?sort_by=release_at": [{
key: "sort_by",
name: "排序",
value: [
{n: "近期最佳", v: "&sort_by=stars"},
{n: "观看数", v: "&sort_by=views"},
{n: "最近更新", v: "&sort_by=release_at"}
]
}],
"categories?": [{
key: "sort_by",
name: "排序",
value: [
{n: "近期最佳", v: "&sort_by=stars"},
{n: "观看数", v: "&sort_by=views"},
{n: "最近更新", v: "&sort_by=release_at"},
]
}]
},
list: []
};
let itemList = listVideos(".card-video");
result.list = itemList.filter((item, index) => {
return itemList.findIndex(i => i.vod_id === item.vod_id) === index
});
return result;
},
categoryContent: function (tid, pg, filter, extend) {
let result = {
list: [],
pagecount: 1
};
if (tid === "categories?") {
$(".padding-bottom-xl").each(function () {
let remarks = $(this).find(".title--listing").text().trim();
$(this).find(".card-cat-v2").each(function () {
const url = new URL($(this).find(".card-cat-v2__link").attr("href")).pathname.split('/');
result.list.push({
vod_id: url[1] + "/" + url[2] + "?sort_by=release_at",
vod_name: $(this).find(".card-cat-v2__title h4").text(),
vod_pic: $(this).find("img").attr("src"),
vod_remarks: remarks,
vod_tag: "folder",
style: {
"type": "rect",
"ratio": 0.7
}
})
});
})
result.pagecount = 1;
} else {
result.list = listVideos(".card-video");
result.pagecount = $('.pagination__list li[class] .pagination__item:last').text().trim();
}
return result;
},
detailContent: function (ids) {
let categories = [], tags = [];
$(".content-details__meta a").each(function () {
const url = new URL($(this).attr("href")).pathname.split('/');
const id = url[1] + "/" + url[2] + "?sort_by=release_at";
const name = $(this).text().trim();
if (name.length > 0) {
if (url[1] === "categories") {
categories.push(`[a=cr:{"id":"${id}","name":"${name}"}/]${name}[/a]`);
} else {
tags.push(`[a=cr:{"id":"${id}","name":"${name}"}/]${name}[/a]`);
}
}
})
const vod = {
vod_id: ids[0],
vod_name: ids[0].toUpperCase(),
vod_year: $(".content-details__meta time").text(),
vod_remarks: categories.join(" "),
vod_actor: tags.join(" "),
vod_content: $(".content-details__title").text(),
vod_play_from: "老僧酿酒",
vod_play_url: "名妓读经$" + unsafeWindow.stream,
};
return {list: [vod]};
},
searchContent: function (key, quick, pg) {
const result = {
list: [],
pagecount: 1
};
result.list = listVideos(".card-video");
result.pagecount = Math.ceil($('.title--sub-title').text().replace(/[^0-9]/ig, "") / 24)
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));
}
});
})();