mirror of
https://github.com/yuanwangokk-1/TV-BOX.git
synced 2025-10-24 23:11:21 +00:00
161 lines
No EOL
7.1 KiB
JavaScript
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));
|
|
}
|
|
});
|
|
})(); |