diff --git a/jtxtv09/js/兔小贝.js b/jtxtv09/js/兔小贝.js new file mode 100644 index 0000000..4de02d1 --- /dev/null +++ b/jtxtv09/js/兔小贝.js @@ -0,0 +1,26 @@ +var rule = { + title: '兔小贝', + host: 'https://www.tuxiaobei.com', + homeUrl: '', + url: '/list/mip-data?typeId=fyclass&page=fypage&callback=', + detailUrl: '/play/fyid', + searchUrl: '/search/index?key=**', + searchable: 2, + headers: { + 'User-Agent': 'MOBILE_UA' + }, + timeout: 5000, + class_url: '2&3&4&25', + class_name: '儿歌&故事&国学&启蒙', + //class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)', + cate_exclude: '应用', + 推荐: '.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href', + double: true, + limit: 5, + play_parse: true, + lazy: 'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;', + // 一级:'json:data.items;name;image;collect_num;category_id+video_id', + 一级: 'json:data.items;name;image;duration_string;video_id', + 二级: '*', + 搜索: '.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href', +} \ No newline at end of file diff --git a/jtxtv09/js/央视大全.js b/jtxtv09/js/央视大全.js new file mode 100644 index 0000000..ea36951 --- /dev/null +++ b/jtxtv09/js/央视大全.js @@ -0,0 +1,211 @@ +var rule = { + title:'央视频', + host:'https://api.cntv.cn', + homeUrl: '/lanmu/columnSearch?&fl=&fc=&cid=&p=1&n=500&serviceId=tvcctv&t=json', + url:'/list/getVideoAlbumList?fyfilter&area=&letter=&n=24&serviceId=tvcctv&t=json', + searchUrl:'', + searchable:0, + quickSearch:0, + class_name: '栏目大全&特别节目&纪录片&电视剧&动画片', + class_url: '栏目大全&特别节目&纪录片&电视剧&动画片', + filterable: 1, + filter_url: 'channel={{fl.channel}}&sc={{fl.sc}}&year={{fl.year}}', + filter: { + "纪录片":[ + {"key":"channel","name":"频道","value":[{"n":"全部","v":""},{"n":"CCTV-1综合","v":"CCTV-1综合,CCTV-1高清,CCTV-1综合高清"},{"n":"CCTV-2财经","v":"CCTV-2财经,CCTV-2高清,CCTV-2财经高清"},{"n":"CCTV-3综艺","v":"CCTV-3综艺,CCTV-3高清,CCTV-3综艺高清"},{"n":"CCTV-4中文国际","v":"CCTV-4中文国际,CCTV-4高清,CCTV-4中文国际(亚)高清"},{"n":"CCTV-5体育","v":"CCTV-5体育,CCTV-5高清,CCTV-5体育高清"},{"n":"CCTV-6电影","v":"CCTV-6电影,CCTV-6高清,CCTV-6电影高清"},{"n":"CCTV-7国防军事","v":"CCTV-7国防军事,CCTV-7高清,CCTV-7国防军事高清"},{"n":"CCTV-8电视剧","v":"CCTV-8电视剧,CCTV-8高清,CCTV-8电视剧高清"},{"n":"CCTV-9纪录","v":"CCTV-9纪录,CCTV-9高清,CCTV-9纪录高清"},{"n":"CCTV-10科教","v":"CCTV-10科教,CCTV-10高清,CCTV-10科教高清"},{"n":"CCTV-11戏曲","v":"CCTV-11戏曲,CCTV-11高清,CCTV-11戏曲高清"},{"n":"CCTV-12社会与法","v":"CCTV-12社会与法,CCTV-12高清,CCTV-12社会与法高清"},{"n":"CCTV-13新闻","v":"CCTV-13新闻,CCTV-13高清,CCTV-13新闻高清"},{"n":"CCTV-14少儿","v":"CCTV-14少儿,CCTV-14高清,CCTV-14少儿高清"},{"n":"CCTV-15音乐","v":"CCTV-15音乐,CCTV-15高清,CCTV-15音乐高清"},{"n":"CCTV-17农业农村","v":"CCTV-17农业农村,高清,高清"}]}, + {"key":"sc","name":"类型","value":[{"n":"全部","v":""},{"n":"人文历史","v":"人文历史"},{"n":"人物","v":"人物"},{"n":"军事","v":"军事"},{"n":"探索","v":"探索"},{"n":"社会","v":"社会"},{"n":"时政","v":"时政"},{"n":"经济","v":"经济"},{"n":"科技","v":"科技"}]}, + {"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"}]}, + ], + "特别节目":[ + {"key":"channel","name":"频道","value":[{"n":"全部","v":""},{"n":"CCTV-1综合","v":"CCTV-1综合,CCTV-1高清,CCTV-1综合高清"},{"n":"CCTV-2财经","v":"CCTV-2财经,CCTV-2高清,CCTV-2财经高清"},{"n":"CCTV-3综艺","v":"CCTV-3综艺,CCTV-3高清,CCTV-3综艺高清"},{"n":"CCTV-4中文国际","v":"CCTV-4中文国际,CCTV-4高清,CCTV-4中文国际(亚)高清"},{"n":"CCTV-5体育","v":"CCTV-5体育,CCTV-5高清,CCTV-5体育高清"},{"n":"CCTV-6电影","v":"CCTV-6电影,CCTV-6高清,CCTV-6电影高清"},{"n":"CCTV-7国防军事","v":"CCTV-7国防军事,CCTV-7高清,CCTV-7国防军事高清"},{"n":"CCTV-8电视剧","v":"CCTV-8电视剧,CCTV-8高清,CCTV-8电视剧高清"},{"n":"CCTV-9纪录","v":"CCTV-9纪录,CCTV-9高清,CCTV-9纪录高清"},{"n":"CCTV-10科教","v":"CCTV-10科教,CCTV-10高清,CCTV-10科教高清"},{"n":"CCTV-11戏曲","v":"CCTV-11戏曲,CCTV-11高清,CCTV-11戏曲高清"},{"n":"CCTV-12社会与法","v":"CCTV-12社会与法,CCTV-12高清,CCTV-12社会与法高清"},{"n":"CCTV-13新闻","v":"CCTV-13新闻,CCTV-13高清,CCTV-13新闻高清"},{"n":"CCTV-14少儿","v":"CCTV-14少儿,CCTV-14高清,CCTV-14少儿高清"},{"n":"CCTV-15音乐","v":"CCTV-15音乐,CCTV-15高清,CCTV-15音乐高清"},{"n":"CCTV-17农业农村","v":"CCTV-17农业农村,高清,高清"}]}, + {"key":"sc","name":"类型","value":[{"n":"全部","v":""},{"n":"新闻","v":"新闻"},{"n":"经济","v":"经济"},{"n":"综艺","v":"综艺"},{"n":"体育","v":"体育"},{"n":"军事","v":"军事"},{"n":"影视","v":"影视"},{"n":"科教","v":"科教"},{"n":"戏曲","v":"戏曲"},{"n":"青少","v":"青少"},{"n":"音乐","v":"音乐"},{"n":"社会","v":"社会"},{"n":"公益","v":"公益"},{"n":"其他","v":"其他"}]}, + ], + "电视剧":[ + {"key":"sc","name":"类型","value":[{"n":"全部","v":""},{"n":"谍战","v":"谍战"},{"n":"悬疑","v":"悬疑"},{"n":"刑侦","v":"刑侦"},{"n":"历史","v":"历史"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"军旅","v":"军旅"},{"n":"战争","v":"战争"},{"n":"喜剧","v":"喜剧"},{"n":"青春","v":"青春"},{"n":"言情","v":"言情"},{"n":"偶像","v":"偶像"},{"n":"家庭","v":"家庭"},{"n":"年代","v":"年代"},{"n":"革命","v":"革命"},{"n":"农村","v":"农村"},{"n":"都市","v":"都市"},{"n":"其他","v":"其他"}]}, + {"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"}]}, + ], + }, + headers:{ + 'User-Agent':'PC_UA' + }, + timeout:10000, + play_parse:true, + + lazy: $js.toString(() => { + let id = input.split("|")[0]; + let k4 = input.split("|")[1]; + let fc = input.split("|")[2]; +if (k4 === '7' && fc!== '体育'){ + input = 'https://hls.cntv.myhwcdn.cn/asp/hls/850/0303000a/3/default/' + id + '/850.m3u8'; + } else { + input = 'https://hls.cntv.myhwcdn.cn/asp/hls/850/0303000a/3/default/' + id + '/850.m3u8'; + + } +//https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid='+input +}), + //海阔 + /* + lazy: $js.toString(() => { + input=JSON.parse(request('https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid='+input)).hls_url; + id = input.split('/')[9]; + input = 'https://hls.cntv.myalicdn.com//asp/hls/2000/0303000a/3/default/' + id + '/2000.m3u8'; + }), + */ +//影视 +//lazy: $js.toString(() => { +//input=JSON.parse(request('https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid='+input)).hls_url.replaceAll('main','2000') +//.replaceAll('cntv.lxdns','cntv.myalicdn').replaceAll('n.cn','n.com').replaceAll('myhwcdn','myalicdn').replaceAll('kcdnvip','myalicdn').replaceAll('newcntv.qcloudcdn','cntv.myalicdn') +//; +//}), + + limit:6, + double:false, + + 推荐: $js.toString(() => { + var d = []; + var list = JSON.parse(request(input)).response.docs; + + list.forEach(it => { + // 一级标题 + let title1 = it.column_name; + // 一级描述 + let desc1 = it.channel_name; + // 一级图片URL + let picUrl1 = it.column_logo; + // 一级URL(id 地区 类型 标题 演员 年份 频道 简介 图片 更新至) + let url1 = it.lastVIDE.videoSharedCode + '|' + '' + '|' + it.column_firstclass + '|' + it.column_name + '|' + '' + '|' + it.column_playdate + '|' + it.channel_name + '|' + it.column_brief + '|' + it.column_logo + '|' + '' + '|' + it.lastVIDE.videoTitle; + + d.push({ + desc : desc1, + title : title1, + pic_url : picUrl1, + url : url1 + }) + }) + setResult(d); + }), + + + 一级: $js.toString(() => { + var d = []; + if(MY_CATE==='栏目大全') { + var list = JSON.parse(request(HOST+'/lanmu/columnSearch?&fl=&fc=&cid=&p='+MY_PAGE+'&n=500&serviceId=tvcctv&t=json')).response.docs; + list.forEach(it => { + // 一级标题 + let title1 = it.column_name; + // 一级描述 + let desc1 = it.channel_name; + // 一级图片URL + let picUrl1 = it.column_logo; + // 一级URL(id 地区 类型 标题 演员 年份 频道 简介 图片 更新至) + let url1 = it.lastVIDE.videoSharedCode + '|' + '' + '|' + it.column_firstclass + '|' + it.column_name + '|' + '' + '|' + it.column_playdate + '|' + it.channel_name + '|' + it.column_brief + '|' + it.column_logo + '|' + '' + '|' + it.lastVIDE.videoTitle; + d.push({ + desc : desc1, + title : title1, + pic_url : picUrl1, + url : url1 + }) + }) + } + else { + var channelMap = { + "特别节目": "CHAL1460955953877151", + "纪录片": "CHAL1460955924871139", + "电视剧": "CHAL1460955853485115", + "动画片": "CHAL1460955899450127", + }; + var list = JSON.parse(request(input+'&channelid='+channelMap[MY_CATE]+'&fc='+MY_CATE+'&p='+MY_PAGE)).data.list; + list.forEach(it => { + // 一级标题 + let title1 = it.title; + // 一级描述 + let desc1 = it.sc + ((typeof it.year==='undefined' || it.year==='')?'':('•'+it.year)) + ((typeof it.count==='undefined' || it.count==='')?'':('•共' + it.count + '集')); + // 一级图片URL + let picUrl1 = it.image; + // 一级URL(id 地区 类型 标题 演员 年份 频道 简介 图片 集数) + let url1 = it.id + '|' + it.area + '|' + it.sc + '|' + it.title + '|' + it.actors + '|' + it.year + '|' + it.channel + '|' + it.brief + '|' + it.image + '|' + it.count + '|' + '' + '|' + MY_CATE; + d.push({ + desc : desc1, + title : title1, + pic_url : picUrl1, + url : url1 + }) + }) + } + setResult(d); + }), + + 二级: $js.toString(() => { + let info = input.split("|"); + + VOD = { + vod_id: info[0], + vod_name: info[3], + vod_pic: info[8], + type_name: info[2]==='undefined'?'':info[2], + vod_year: info[5]==='undefined'?'':info[5], + vod_area: info[1]==='undefined'?'':info[1], + vod_remarks: info[9]===''?('更新至'+info[10]):('共'+info[9]+'集'), + vod_director: info[6]==='undefined'?'':info[6], + vod_actor: info[4]==='undefined'?'':info[4], + vod_content: info[7]==='undefined'?'':info[7], + }; + var modeMap = { + "特别节目": "0", + "纪录片": "0", + "电视剧": "0", + "动画片": "1", + }; + var ctid = info[0].replace('https://api.cntv.cn/lanmu/',''); + var link = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?id='+ctid+'&serviceId=tvcctv&p=1&n=100&mode='+modeMap[info[11]]+'&pub=1'; + var html = JSON.parse(request(link)); + var playUrls; + if(html.errcode==='1001'){ + var guid = info[0].replace('https://api.cntv.cn/lanmu/',''); + var link1 = 'https://api.cntv.cn/video/videoinfoByGuid?guid='+guid+'&serviceId=tvcctv'; + ctid = JSON.parse(request(link1)).ctid.replace('https://api.cntv.cn/lanmu/',''); + var link2 = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?id='+ctid+'&d=&p=1&n=100&sort=desc&mode=0&serviceId=tvcctv&t=json'; + playUrls = JSON.parse(request(link2)).data.list; + + } else { + playUrls = html.data.list; + // 获取更多数据,暂不需要 + var flag = ''; + if(playUrls===''){ + flag = 'true'; + } + var page = 1; + while(flag===''){ + page = page+1; + var burl = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?id='+ctid+'&serviceId=tvcctv&p='+page+'&n=100&mode='+modeMap[info[11]]+'&pub=1'; + var list = JSON.parse(request(burl)).data.list; + if (list.length!==0){ + list.forEach(it => { + playUrls.push(it); + }) + continue; + }else{ + flag='true'; + break; + } + } + } + + let playFrom = []; + let playList = []; + playFrom.append('央视频'); + playUrls.forEach(it => { + playList.append(playUrls.map(function(it) { + return it.title + "$" + it.guid + }).join("#")) + }); + + // 最后封装所有线路 + let vod_play_from = playFrom.join('$$$'); + let vod_play_url = playList.join('$$$'); + VOD['vod_play_from'] = vod_play_from; + VOD['vod_play_url'] = vod_play_url; + }), + + 搜索:'', +} \ No newline at end of file diff --git a/jtxtv09/js/央视少儿.js b/jtxtv09/js/央视少儿.js new file mode 100644 index 0000000..01c6d7d --- /dev/null +++ b/jtxtv09/js/央视少儿.js @@ -0,0 +1,97 @@ +var rule = { + title:'央视频', + host:'https://api.cntv.cn', + homeUrl: '/lanmu/columnSearch?&fl=&fc=&cid=&p=1&n=500&serviceId=tvcctv&t=json', + // url:'/list/getVideoAlbumList?fyfilter&area=&letter=&n=24&serviceId=tvcctv&t=json', + url: '/NewVideo/getVideoListByColumn?id=fyclass&n=10&sort=desc&p=fypage&mode=0&serviceId=tvcctv', + searchUrl:'', + searchable:0, + quickSearch:0, + +class_name: '周末动画片&快乐体验&小小智慧树&智力快车&音乐快递&英雄出少年&快乐大巴&动漫世界&新闻袋袋裤&大风车&七巧板&大手牵小手&智慧树&动感特区&动画大放映&看我 72 变&快乐童行&风车剧场', +class_url:'TOPC1451559836238828&TOPC1451559479171411&TOPC1451559205464876&TOPC1451559756374759&TOPC1451559666055645&TOPC1451559695702690&TOPC1451559161446811&TOPC1451559448233349&TOPC1451559603261584&TOPC1451558929123462&TOPC1451559569040502&TOPC1451558967135492&TOPC1451447359806385&TOPC1451559378830189&TOPC1451559025546574&TOPC1451559131256781&TOPC1628144739712839&TOPC1573528152700717', + + filterable: 1, + headers:{ + 'User-Agent':'PC_UA' + }, + timeout:10000, + play_parse:true, + + limit:6, + double:false, +/* + 推荐: $js.toString(() => { + var d = []; + var list = JSON.parse(request(input)).response.docs; + + list.forEach(it => { + // 一级标题 + let title1 = it.column_name; + // 一级描述 + let desc1 = it.channel_name; + // 一级图片URL + let picUrl1 = it.column_logo; + // 一级URL(id 地区 类型 标题 演员 年份 频道 简介 图片 更新至) + let url1 = it.lastVIDE.videoSharedCode + '|' + '' + '|' + it.column_firstclass + '|' + it.column_name + '|' + '' + '|' + it.column_playdate + '|' + it.channel_name + '|' + it.column_brief + '|' + it.column_logo + '|' + '' + '|' + it.lastVIDE.videoTitle; + + d.push({ + desc : desc1, + title : title1, + pic_url : picUrl1, + url : url1 + }) + }) + setResult(d); + }), +*/ + + 一级: $js.toString(() => { + + var d = []; + + var list = JSON.parse(request(input)).data.list; + list.forEach(it => { + //一级id + let guid1 = it.guid; + // 一级标题 + let title1 = it.title + // 一级描述 + let desc1 = it.time; + // 一级图片URL + let picUrl1 = it.image; + // 一级URL(id 地区 类型 标题 演员 年份 频道 简介 图片 集数) + let url1 =it.guid + '|' + it.id + '|' + it.time + '|' + it.title + '|' + it.length + '|' + it.image + '|' + it.focus_date + '|' + it.brief + '|' + it.url + '|' + '' + '|' + MY_CATE; + d.push({ + desc : desc1, + title : title1, + pic_url : picUrl1, + guid : guid1, + url : url1 + }) + }) + setResult(d); + }), + +二级 : $js.toString(() => { +let info = input.split("|"); +let guid = info[0].replaceAll('https://api.cntv.cn/lanmu/', ''); + VOD = { + vod_id: info[1], + vod_name: info[3], + vod_pic: info[5], + type_name: info[2], + vod_year: info[2], + vod_area: info[1], + vod_remarks: 'ƪ(˘⌣˘)ʃ天微', + vod_director: 'ƪ(˘⌣˘)ʃ天微', + vod_actor: 'ƪ(˘⌣˘)ʃ天微', + vod_content: info[7], + vod_play_from: '央视频', + //https://hls.cntv.myalicdn.com//asp/hls/2000/0303000a/3/default/https://api.cntv.cn/lanmu/1a01871d6d5f4d4bbe82b9c62650f100/2000.m3u8 + vod_play_url: '立即播放$https://hls.cntv.myhwcdn.cn/asp/hls/850/0303000a/3/default/' + guid + '/850.m3u8' + }; + +}), + 搜索:'', +} \ No newline at end of file diff --git a/jtxtv09/js/星芽短剧.py b/jtxtv09/js/星芽短剧.py new file mode 100644 index 0000000..c12e403 --- /dev/null +++ b/jtxtv09/js/星芽短剧.py @@ -0,0 +1,343 @@ +# coding = utf-8 +# !/usr/bin/python + +""" +""" + +from Crypto.Util.Padding import unpad +from Crypto.Util.Padding import pad +from urllib.parse import unquote +from Crypto.Cipher import ARC4 +from urllib.parse import quote +from base.spider import Spider +from Crypto.Cipher import AES +from bs4 import BeautifulSoup +from base64 import b64decode +import urllib.request +import urllib.parse +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://app.whjzjx.cn" + +headers = { + 'User-Agent': 'Linux; Android 12; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Mobile Safari/537.36' + } + +headerf = { + "platform": "1", + "user_agent": "Mozilla/5.0 (Linux; Android 9; V1938T Build/PQ3A.190705.08211809; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Safari/537.36", + "content-type": "application/json; charset=utf-8" + } + +times = int(time.time() * 1000) + +data = { + "device": "2a50580e69d38388c94c93605241fb306", + "package_name": "com.jz.xydj", + "android_id": "ec1280db12795506", + "install_first_open": True, + "first_install_time": 1752505243345, + "last_update_time": 1752505243345, + "report_link_url": "", + "authorization": "", + "timestamp": times + } + +plain_text = json.dumps(data, separators=(',', ':'), ensure_ascii=False) + +key = "B@ecf920Od8A4df7" +key_bytes = key.encode('utf-8') +plain_bytes = plain_text.encode('utf-8') +cipher = AES.new(key_bytes, AES.MODE_ECB) +padded_data = pad(plain_bytes, AES.block_size) +ciphertext = cipher.encrypt(padded_data) +encrypted = base64.b64encode(ciphertext).decode('utf-8') + +response = requests.post("https://u.shytkjgs.com/user/v3/account/login", headers=headerf, data=encrypted) +response_data = response.json() +Authorization = response_data['data']['token'] + +headerx = { + 'authorization': Authorization, + 'platform': '1', + 'version_name': '3.8.3.1' + } + +class Spider(Spider): + global xurl + global headerx + global headers + + def getName(self): + return "首页" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''): + if pl == 3: + plx = [] + while True: + start_index = text.find(start_str) + if start_index == -1: + break + end_index = text.find(end_str, start_index + len(start_str)) + if end_index == -1: + break + middle_text = text[start_index + len(start_str):end_index] + plx.append(middle_text) + text = text.replace(start_str + middle_text + end_str, '') + if len(plx) > 0: + purl = '' + for i in range(len(plx)): + matches = re.findall(start_index1, plx[i]) + output = "" + for match in matches: + match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1]) + if match3: + number = match3.group(1) + else: + number = 0 + if 'http' not in match[0]: + output += f"#{match[1]}${number}{xurl}{match[0]}" + else: + output += f"#{match[1]}${number}{match[0]}" + output = output[1:] + purl = purl + output + "$$$" + purl = purl[:-3] + return purl + else: + return "" + else: + start_index = text.find(start_str) + if start_index == -1: + return "" + end_index = text.find(end_str, start_index + len(start_str)) + if end_index == -1: + return "" + + if pl == 0: + middle_text = text[start_index + len(start_str):end_index] + return middle_text.replace("\\", "") + + if pl == 1: + middle_text = text[start_index + len(start_str):end_index] + matches = re.findall(start_index1, middle_text) + if matches: + jg = ' '.join(matches) + return jg + + if pl == 2: + middle_text = text[start_index + len(start_str):end_index] + matches = re.findall(start_index1, middle_text) + if matches: + new_list = [f'{item}' for item in matches] + jg = '$$$'.join(new_list) + return jg + + def homeContent(self, filter): + result = {} + result = {"class": [{"type_id": "1", "type_name": "七星剧场"}, + {"type_id": "3", "type_name": "七星新剧"}, + {"type_id": "2", "type_name": "七星热播"}, + {"type_id": "7", "type_name": "七星星选"}, + {"type_id": "5", "type_name": "七星阳光"}], + } + + return result + + def homeVideoContent(self): + videos = [] + + url= f'{xurl}/v1/theater/home_page?theater_class_id=1&class2_id=4&page_num=1&page_size=24' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + for vod in data['data']['list']: + + name = vod['theater']['title'] + + id = vod['theater']['id'] + + pic = vod['theater']['cover_url'] + + remark = vod['theater']['play_amount_str'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result = {'list': videos} + return result + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + url = f'{xurl}/v1/theater/home_page?theater_class_id={cid}&page_num={pg}&page_size=24' + detail = requests.get(url=url,headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + for vod in data['data']['list']: + + name = vod['theater']['title'] + + id = vod['theater']['id'] + + pic = vod['theater']['cover_url'] + + remark = vod['theater']['theme'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + did = ids[0] + result = {} + videos = [] + xianlu = '' + bofang = '' + + url = f'{xurl}/v2/theater_parent/detail?theater_parent_id={did}' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + content = '剧情:' + data['data']['introduction'] + + area = data['data']['desc_tags'][0] + + remarks = data['data']['filing'] + + # 修复剧集只有一集的问题 - 检查theaters数据是否存在且不为空 + if 'theaters' in data['data'] and data['data']['theaters']: + for sou in data['data']['theaters']: + id = sou['son_video_url'] + name = sou['num'] + bofang = bofang + str(name) + '$' + id + '#' + + bofang = bofang[:-1] if bofang.endswith('#') else bofang + xianlu = '七星' + else: + # 如果没有theaters数据,检查是否有单个视频URL + if 'video_url' in data['data'] and data['data']['video_url']: + bofang = '1$' + data['data']['video_url'] + xianlu = '七星' + else: + bofang = Jumps + xianlu = '1' + + videos.append({ + "vod_id": did, + "vod_content": content, + "vod_remarks": remarks, + "vod_area": area, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = id + result["header"] = headers + return result + + def searchContentPage(self, key, quick, page): + result = {} + videos = [] + + payload = { + "text": key + } + + url = f"{xurl}/v3/search" + detail = requests.post(url=url, headers=headerx, json=payload) + if detail.status_code == 200: + detail.encoding = "utf-8" + data = detail.json() + + for vod in data['data']['theater']['search_data']: + + name = vod['title'] + + id = vod['id'] + + pic = vod['cover_url'] + + remark = vod['score_str'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result['list'] = videos + result['page'] = page + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def searchContent(self, key, quick, pg="1"): + return self.searchContentPage(key, quick, '1') + + def localProxy(self, params): + if params['type'] == "m3u8": + return self.proxyM3u8(params) + elif params['type'] == "media": + return self.proxyMedia(params) + elif params['type'] == "ts": + return self.proxyTs(params) + return None \ No newline at end of file diff --git a/jtxtv09/js/武享吧.js b/jtxtv09/js/武享吧.js new file mode 100644 index 0000000..d9b5ba6 --- /dev/null +++ b/jtxtv09/js/武享吧.js @@ -0,0 +1,36 @@ +var rule = { + title:'武享吧', + host:'https://www.hula8.net', + url: '/fyclass/page/fypage', + searchUrl: '/page/fypage/?s=**', + searchable:2, + quickSearch:0, + headers:{ + 'User-Agent': 'PC_UA', + 'Referer': 'https://www.hula8.net/', + 'Cookie':'esc_search_captcha=1;result=12' + }, + timeout:5000,//网站的全局请求超时,默认是3000毫秒 + class_parse: '#menu-xinjian&&li;a&&Text;a&&href;net/(.*)', + play_parse:true, + cate_exclude:'首 页|赛事预告|美国格斗赛|亚洲格斗赛|其他格斗赛|日本搏击赛|裸拳赛', + limit:6, + 推荐: 'div.apc-grid-item;*;*;.views&&Text;a&&href', + 一级: '.site-main&&article;img&&alt;img&&data-original;.grid-inf-l&&Text;a&&href', + 二级: { + "title": "h1&&Text;.module-info-tag&&Text", + "img": ".aligncenter&&data-original", + "desc": ";;;.views:eq(0)&&Text;", + "content": "h1&&Text", + "tabs": "js:TABS=['道长在线']", + "lists": `js: + var html = JSON.parse(request(input).match(/var bevideo_vids_.*?=({[\\s\\S]*?});/)[1]); + let list = []; + list = html.m3u8dplayer.map(function(item) { + return item.pre + "$" + item.video + }); + LISTS = [list]; + ` + }, + 搜索: '*;*;*;.entry-meta&&Text;*', +} \ No newline at end of file