123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- // ==UserScript==
- // @name yfsp
- // @namespace gmspider
- // @version 2024.11.12
- // @description 爱壹帆 GMSpider
- // @author Luomo
- // @match https://m.yfsp.tv/*
- // @require https://cdn.jsdelivr.net/gh/CatVodSpider-GM/Spiders-Lib@main/lib/browser-extension-url-match-1.2.0.min.js
- // @require https://cdn.jsdelivr.net/npm/ajax-hook@3.0.3/dist/ajaxhook.umd.min.js
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant unsafeWindow
- // @run-at document-start
- // ==/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 = "homeContent";
- // GMSpiderArgs.fArgs = [true];
- // GMSpiderArgs.fName = "categoryContent";
- // GMSpiderArgs.fArgs = ["movie", 2, true, {}];
- // GMSpiderArgs.fName = "detailContent";
- // GMSpiderArgs.fArgs = [["XOkJ0XqSwI2"]];
- GMSpiderArgs.fName = "searchContent";
- GMSpiderArgs.fArgs = ["小巷人家", false, 1];
- }
- Object.freeze(GMSpiderArgs);
- (function () {
- switch (GMSpiderArgs.fName) {
- case "searchContent":
- localStorage.setItem("historyList", JSON.stringify([GMSpiderArgs.fArgs [0]]));
- break;
- }
- })();
- let hookConfigs = {
- "homeContent": [{
- dataKey: "navigationbar",
- matcher: matchPattern("https://*.yfsp.tv/api/list/navigationbar?*").assertValid()
- }, {
- dataKey: "index",
- matcher: matchPattern("https://*.yfsp.tv/api/list/index?*").assertValid()
- }],
- "categoryContent": [{
- dataKey: "filtertagsdata",
- matcher: matchPattern("https://*.yfsp.tv/api/list/getfiltertagsdata?*").assertValid()
- }, {
- dataKey: "conditionfilterdata",
- matcher: matchPattern("https://*.yfsp.tv/api/list/getconditionfilterdata?*").assertValid(),
- onRequestHook: function (config, handler) {
- let url = new URL(config.url);
- url.searchParams.set('page', GMSpiderArgs.fArgs[1]);
- config.url = url.toString();
- }
- }],
- "detailContent": [{
- dataKey: "videodetails",
- matcher: matchPattern("https://*.yfsp.tv/api/video/videodetails?*").assertValid()
- }, {
- dataKey: "playdata",
- matcher: matchPattern("https://*.yfsp.tv/api/video/getplaydata?*").assertValid()
- }, {
- dataKey: "videochoosegather",
- require: false,
- matcher: matchPattern("https://*.yfsp.tv/api/video/videochoosegather?*").assertValid()
- }],
- "playerContent": [{
- dataKey: "playdata",
- matcher: matchPattern("https://*.yfsp.tv/api/video/getplaydata?*").assertValid()
- }],
- "searchContent": [{
- dataKey: "titlegetdata",
- matcher: matchPattern("https://*.yfsp.tv/api/list/gettitlegetdata?*").assertValid()
- }, {
- matcher: matchPattern("https://*.yfsp.tv/api/home/gethotsearch?*").assertValid(),
- onResponseHook: function (response, handler) {
- document.querySelector(".search-log span").dispatchEvent(new Event("click"));
- }
- }],
- };
- const GmSpider = (function () {
- const categoryFilterCachePrefix = "category.";
- return {
- homeContent: function (filter) {
- let result = {
- class: [],
- filters: {},
- list: []
- };
- let categoryIds = [];
- hookResult.navigationbar.data.list.forEach((item) => {
- if (item.type === 1) {
- result.class.push({
- type_id: item.routeName,
- type_name: item.name
- });
- categoryIds.push(item.categoryId);
- // const cacheFilter = GM_getValue(item.routeName);
- // console.log("cacheFilter", item.routeName, cacheFilter);
- const cacheFilter = localStorage.getItem(categoryFilterCachePrefix + item.routeName);
- console.log("localStorage", item.routeName, localStorage.getItem(item.routeName));
- if (typeof cacheFilter !== "undefined" && cacheFilter !== null) {
- result.filters[item.routeName] = JSON.parse(cacheFilter);
- }
- }
- })
- hookResult.index.data.list.forEach((item) => {
- if (categoryIds.includes(item.type)) {
- item.list.forEach((media) => {
- if (!media.isRecommend) {
- result.list.push({
- vod_id: media.mediaKey,
- vod_name: media.title,
- vod_pic: media.coverImgUrl,
- vod_remarks: media.updateStatus,
- vod_year: media.mediaType
- })
- }
- })
- }
- })
- return result;
- },
- categoryContent: function (tid, pg, filter, extend) {
- let result = {
- list: [],
- pagecount: 1000
- };
- let cacheFilters = [];
- hookResult.filtertagsdata.data.list.forEach(classify => {
- let cacheFilter = {
- key: "index-" + classify.list[0].index,
- name: classify.name,
- value: []
- }
- classify.list.forEach((item) => {
- cacheFilter.value.push({
- n: item.classifyName,
- v: (item.index > 0 ? "," : "") + item.classifyId
- });
- })
- cacheFilters.push(cacheFilter);
- })
- // GM_setValue(tid, JSON.stringify(cacheFilters));
- localStorage.setItem(categoryFilterCachePrefix + tid, JSON.stringify(cacheFilters));
- console.log("cacheFilter", tid, cacheFilters);
- hookResult.conditionfilterdata.data.list.forEach((media) => {
- result.list.push({
- vod_id: media.mediaKey,
- vod_name: media.title,
- vod_pic: media.coverImgUrl,
- vod_remarks: media.updateStatus,
- vod_year: media.regional
- })
- })
- return result;
- },
- detailContent: function (ids) {
- const videodetails = hookResult.videodetails.data.detailInfo;
- let mediaUrl = "";
- let episodeKey = "";
- hookResult.playdata.data.list.forEach((item) => {
- if (mediaUrl === "" && item.mediaUrl !== "") {
- mediaUrl = item.mediaUrl;
- episodeKey = item.episodeKey;
- }
- })
- let media = [];
- if (videodetails.videoType !== 0) {
- if (typeof hookResult.videochoosegather !== "undefined") {
- hookResult.videochoosegather.data.list.forEach((item) => {
- if (videodetails.episodeTitle === item.episodeTitle) {
- media.push({
- name: item.episodeTitle,
- type: "finalUrl",
- ext: {
- "header": {
- "User-Agent": window.navigator.userAgent,
- "Referer": window.location.href
- },
- "url": mediaUrl
- }
- });
- } else {
- media.push({
- name: item.episodeTitle,
- type: "webview",
- ext: {
- replace: {
- mediaKey: item.mediaKey,
- episodeKey: item.episodeKey
- }
- }
- })
- }
- })
- } else {
- spiderExecuted = false;
- return;
- }
- } else {
- media.push({
- name: videodetails.episodeTitle,
- type: "finalUrl",
- ext: {
- "header": {
- "User-Agent": window.navigator.userAgent,
- "Referer": window.location.href
- },
- "url": mediaUrl
- }
- })
- }
- return {
- vod_id: videodetails.mediaKey,
- vod_name: videodetails.title,
- vod_pic: videodetails.coverImgUrl,
- vod_actor: videodetails.actor,
- vod_director: videodetails.director,
- vod_tag: videodetails.cidMapper,
- vod_area: videodetails.regional,
- vod_content: videodetails.introduce,
- vod_play_data: [{
- from: "爱壹帆",
- media: media
- }]
- };
- },
- playerContent: function (flag, id, vipFlags) {
- let mediaUrl = "";
- hookResult.playdata.data.list.forEach((item) => {
- if (mediaUrl === "" && item.mediaUrl !== "") {
- mediaUrl = item.mediaUrl;
- }
- })
- return {
- type: "finalUrl",
- ext: {
- "header": {
- "User-Agent": window.navigator.userAgent,
- "Referer": window.location.href
- },
- "url": mediaUrl
- }
- };
- },
- searchContent: function (key, quick, pg) {
- console.log(hookResult);
- let result = {
- list: [],
- pagecount: 1
- };
- if (pg == 1) {
- hookResult.titlegetdata.data.list.forEach((media) => {
- result.list.push({
- vod_id: media.mediaKey,
- vod_name: media.title,
- vod_pic: media.coverImgUrl,
- vod_remarks: media.updateStatus,
- vod_year: media.regional
- })
- })
- }
- return result;
- }
- };
- })();
- let spiderExecuted = false;
- let dataReadyCount = 0;
- let hookResult = {};
- const {unProxy, originXhr} = proxy({
- onRequest: (config, handler) => {
- hookConfigs[GMSpiderArgs.fName].forEach((hookConfig) => {
- if (typeof hookConfig.onRequestHook === "function" && hookConfig.matcher.match(config.url)) {
- hookConfig.onRequestHook(config, handler);
- }
- });
- handler.next(config);
- },
- onResponse: (response, handler) => {
- if (!spiderExecuted) {
- let dataTodoCount = 0;
- hookConfigs[GMSpiderArgs.fName].forEach((hookConfig) => {
- if (typeof hookConfig.dataKey !== "undefined") {
- if (hookConfig?.require !== false) {
- dataTodoCount++;
- }
- if (hookConfig.matcher.match(response.config.url)) {
- if (hookConfig?.require !== false) {
- dataReadyCount++;
- }
- try {
- let data = JSON.parse(response.response);
- if (typeof data === 'object' && data) {
- hookResult[hookConfig.dataKey] = data;
- } else {
- hookResult[hookConfig.dataKey] = response.response;
- }
- } catch (e) {
- }
- }
- }
- if (typeof hookConfig.onResponseHook === "function" && hookConfig.matcher.match(response.config.url)) {
- hookConfig.onResponseHook(response, handler);
- }
- });
- if (dataTodoCount === dataReadyCount) {
- spiderExecuted = true;
- const result = GmSpider[GMSpiderArgs.fName](...GMSpiderArgs.fArgs);
- console.log(result);
- if (typeof GmSpiderInject !== 'undefined' && spiderExecuted) {
- GmSpiderInject.SetSpiderResult(JSON.stringify(result));
- }
- }
- }
- handler.next(response);
- }
- }, unsafeWindow)
- })();
|