mirror of https://github.com/qist/tvbox.git
parent
a5bfc33388
commit
6c85d2a154
@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"作者": "",
|
||||||
|
"站名": "明星影院",
|
||||||
|
"请求头": "User-Agent$MOBILE_UA",
|
||||||
|
"编码": "UTF-8",
|
||||||
|
"图片代理": "",
|
||||||
|
"直接播放": "0",
|
||||||
|
"播放请求头": "",
|
||||||
|
"过滤词": "",
|
||||||
|
"主页url": "https://mxvod.com",
|
||||||
|
"首页": "120",
|
||||||
|
"起始页": "1",
|
||||||
|
"分类url": "https://mxvod.com/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html",
|
||||||
|
"分类": "电影$dianying#电视剧$dianshiju#综艺$zongyi#动漫$dongman#短剧$duanju",
|
||||||
|
"二次截取": "module-items\"&&id=\"page",
|
||||||
|
"数组": "lazyloaded&&/a>",
|
||||||
|
"标题": "title=*>&&<",
|
||||||
|
"图片": "data-src=\"&&\"",
|
||||||
|
"副标题": "class\">&&<",
|
||||||
|
"链接": "href=\"&&\"[替换:vodplay>>voddetail#-1-1.html>>.html]",
|
||||||
|
"影片年代": "-----------*.html\">&&</",
|
||||||
|
"影片地区": "video:area\" content=\"&&\"",
|
||||||
|
"影片类型": "video:class\" content=\"&&\"",
|
||||||
|
"状态": "tag-link-red\">&&</div>",
|
||||||
|
"导演": "导演:&&</div>",
|
||||||
|
"主演": "主演:&&\">",
|
||||||
|
"简介": "vod_content\"&&</div>",
|
||||||
|
"线路数组": "data-dropdown&&/small>",
|
||||||
|
"线路标题": "value=\"&&\"+【共+<small>&&<+集】",
|
||||||
|
"播放数组": "id=\"sort-item&&</div>",
|
||||||
|
"播放列表": "<a&&/a>",
|
||||||
|
"播放标题": "<span>&&<",
|
||||||
|
"播放链接": "href=\"&&\"",
|
||||||
|
"跳转播放链接": "var player_*\"url\":\"&&\"",
|
||||||
|
"搜索请求头": "User-Agent$MOBILE_UA",
|
||||||
|
"搜索url": "https://mxvod.com/vodsearch/{wd}----------{pg}---.html",
|
||||||
|
"搜索模式": "1",
|
||||||
|
"搜索数组": "lazyload\"&&/a>",
|
||||||
|
"搜索标题": "title=\"&&\"",
|
||||||
|
"搜索图片": "data-src=\"&&\"",
|
||||||
|
"搜索副标题": "title=*>&&<",
|
||||||
|
"搜索链接": "href=\"&&\"",
|
||||||
|
"筛选": "1",
|
||||||
|
"类型": "动作片$dongzuopian#喜剧片$xijupian#爱情片$aiqingpian#科幻片$kehuanpian#恐怖片$kongbupian#战争片$zhanzhengpian#剧情片$juqingpian#动画片$donghuapian#悬疑片$xuanyi#纪录片$jilupian#奇幻片$qihuanpian#灾难片$zainanpian||国产剧$guochanju#欧美剧$oumeiju#日剧$riju#韩剧$hanju#港台剧$gangtai#海外剧$haiwai||大陆综艺$daluzongyi#港台综艺$gangtaizongyi#欧美综艺$oumeizongyi#日韩综艺$rihanzongyi#海外综艺$haiwaizongyi||国产动漫$guochandongman#日韩动漫$rihandongman#欧美动漫$oumeidongman#海外动漫$haiwaidongman||空",
|
||||||
|
"剧情": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||古装&战争&青春偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&网剧&其他||选秀&情感&访谈&播报&旅游&音乐&美食&纪实&曲艺&生活&游戏互动&财经&求职||情感&科幻&热血&推理&搞笑&冒险&萝莉&校园&动作&机战&运动&战争&少年&少女&社会&原创&亲子&益智&励志&其他||古装&虐恋&逆袭&神豪&重生&复仇&穿越&甜宠&强者&萌宝&其它",
|
||||||
|
"年份": "1990-2025",
|
||||||
|
"年份值": "*",
|
||||||
|
"语言值": "*",
|
||||||
|
"排序": "时间&人气&评分",
|
||||||
|
"排序值": "time&hits&score"
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"站名": "麦田appXBPQ",
|
||||||
|
"规则作者": "啦啦啦",
|
||||||
|
"请求头": "User-Agent$MOBILE_UA",
|
||||||
|
"编码": "UTF-8",
|
||||||
|
"主页url": "http://172.247.31.147:25321/mtys.php/v6/index_video",
|
||||||
|
"分类url": "http://172.247.31.147:25321/mtys.php/v6/video?pg={catePg}&tid={cateId}&class={class}&area={area}&lang={lang}&year={year}&order={by};;mr",
|
||||||
|
"分类": "电影&电视剧&综艺&动漫&少儿&短剧&直播",
|
||||||
|
"分类值": "1&2&3&4&25&26&30",
|
||||||
|
"数组": "{&&}",
|
||||||
|
"图片": "vod_pic\":\"&&\"",
|
||||||
|
"标题": "vod_name\":\"&&\"",
|
||||||
|
"副标题": "vod_remarks\":\"&&\"",
|
||||||
|
"链接": "http://172.247.31.147:25321/mtys.php/v6/video_detail?id=+vod_id\":&&,",
|
||||||
|
"线路二次截取": "vod_url_with_player\":\\[{&&}\\][替换:\"name\":\">>\"name\":\"题]",
|
||||||
|
"线路数组": "\"name\":\"&&,",
|
||||||
|
"线路标题": "题&&\"",
|
||||||
|
"播放二次截取": "vod_url_with_player\":\\[{&&}\\]",
|
||||||
|
"播放数组": "url\":&&,[替换:\">>接表题#$>>题接#\\#>>接表表题]",
|
||||||
|
"播放列表": "表&&表",
|
||||||
|
"播放标题": "题&&题",
|
||||||
|
"播放链接": "urlDecode(接&&接)",
|
||||||
|
"解析": "PD源$http://172.247.31.148:25320/jx.php?url=#NB源$https://api.nbyjson.top:7788/api/?key=ws9Lz1EtqfU09AzZKl&url=#ZB源$http://27.25.159.14:6699/api/mgapp.php?url=",
|
||||||
|
"影片类型": "vod_class\":\"&&\"",
|
||||||
|
"影片年代": "vod_year\":\"&&\"",
|
||||||
|
"影片地区": "vod_area\":\"&&\"",
|
||||||
|
"导演": "vod_director\":\"&&\"",
|
||||||
|
"主演": "vod_actor\":\"&&\"",
|
||||||
|
"简介": "vod_content\":\"&&\"",
|
||||||
|
"搜索url": "http://172.247.31.147:25321/mtys.php/v6/search?pg={pg}&tid=0&text={wd}",
|
||||||
|
"搜索模式": "1",
|
||||||
|
"搜索二次截取": "data\":\\[&&\\]",
|
||||||
|
"搜索数组": "{&&}",
|
||||||
|
"搜索图片": "vod_pic\":\"&&\"",
|
||||||
|
"搜索标题": "vod_name\":\"&&\"",
|
||||||
|
"搜索副标题": "vod_remarks\":\"&&\"",
|
||||||
|
"搜索链接": "http://172.247.31.147:25321/mtys.php/v6/video_detail?id=+vod_id\":&&,"
|
||||||
|
}
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
from base.spider import Spider
|
||||||
|
import re,sys,json
|
||||||
|
sys.path.append('..')
|
||||||
|
|
||||||
|
class Spider(Spider):
|
||||||
|
api_host = 'https://api.jinlidj.com'
|
||||||
|
origin = 'https://www.jinlidj.com'
|
||||||
|
api_path = '/api/search'
|
||||||
|
headers = {
|
||||||
|
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
|
||||||
|
'Content-Type': "application/json",
|
||||||
|
'accept-language': "zh-CN,zh;q=0.9",
|
||||||
|
'cache-control': "no-cache",
|
||||||
|
'origin': origin,
|
||||||
|
'pragma': "no-cache",
|
||||||
|
'priority': "u=1, i",
|
||||||
|
'referer': origin+'/',
|
||||||
|
'sec-ch-ua': "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"",
|
||||||
|
'sec-ch-ua-mobile': "?0",
|
||||||
|
'sec-ch-ua-platform': "\"Windows\"",
|
||||||
|
'sec-fetch-dest': "empty",
|
||||||
|
'sec-fetch-mode': "cors",
|
||||||
|
'sec-fetch-site': "same-site"
|
||||||
|
}
|
||||||
|
|
||||||
|
def homeContent(self, filter):
|
||||||
|
return {'class': [{'type_id': 1, 'type_name': '情感关系'}, {'type_id': 2, 'type_name': '成长逆袭'}, {'type_id': 3, 'type_name': '奇幻异能'}, {'type_id': 4, 'type_name': '战斗热血'}, {'type_id': 5, 'type_name': '伦理现实'}, {'type_id': 6, 'type_name': '时空穿越'}, {'type_id': 7, 'type_name': '权谋身份'}]}
|
||||||
|
|
||||||
|
def homeVideoContent(self):
|
||||||
|
payload = {
|
||||||
|
"page": 1,
|
||||||
|
"limit": 24,
|
||||||
|
"type_id": "",
|
||||||
|
"year": "",
|
||||||
|
"keyword": ""
|
||||||
|
}
|
||||||
|
response = self.post(f"{self.api_host}{self.api_path}", data=json.dumps(payload), headers=self.headers).json()
|
||||||
|
data = response['data']
|
||||||
|
videos = []
|
||||||
|
for i in data['list']:
|
||||||
|
videos.append({
|
||||||
|
'vod_id': i.get('vod_id'),
|
||||||
|
'vod_name': i.get('vod_name'),
|
||||||
|
'vod_class': i.get('vod_class'),
|
||||||
|
'vod_pic': i.get('vod_pic'),
|
||||||
|
'vod_year': i.get('vod_year'),
|
||||||
|
'vod_remarks': i.get('vod_total')+'集',
|
||||||
|
'vod_score': i.get('vod_score')
|
||||||
|
})
|
||||||
|
return {'list': videos}
|
||||||
|
|
||||||
|
def detailContent(self, ids):
|
||||||
|
response = self.post(f'{self.api_host}/api/detail/{ids[0]}', data=json.dumps({}), headers=self.headers).json()
|
||||||
|
data = response['data']
|
||||||
|
videos = []
|
||||||
|
vod_play_url = ''
|
||||||
|
for name,url in data['player'].items():
|
||||||
|
vod_play_url += f'{name}${url}#'
|
||||||
|
vod_play_url.rstrip('#')
|
||||||
|
videos.append({
|
||||||
|
'vod_id': data.get('vod_id'),
|
||||||
|
'vod_name': data.get('vod_name'),
|
||||||
|
'vod_content': data.get('vod_blurb'),
|
||||||
|
'vod_remarks': '集数:' + data.get('vod_total'),
|
||||||
|
"vod_director": data.get('vod_director'),
|
||||||
|
"vod_actor": data.get('vod_actor'),
|
||||||
|
'vod_year': data.get('vod_year'),
|
||||||
|
'vod_area': data.get('vod_area'),
|
||||||
|
'vod_play_from': '锦鲤短剧',
|
||||||
|
'vod_play_url': vod_play_url
|
||||||
|
})
|
||||||
|
return {'list': videos}
|
||||||
|
|
||||||
|
def searchContent(self, key, quick, pg="1"):
|
||||||
|
payload = {
|
||||||
|
"page": pg,
|
||||||
|
"limit": 24,
|
||||||
|
"type_id": "",
|
||||||
|
"keyword": key
|
||||||
|
}
|
||||||
|
response = self.post(f'{self.api_host}{self.api_path}', data=json.dumps(payload), headers=self.headers).json()
|
||||||
|
data = response['data']
|
||||||
|
videos = []
|
||||||
|
for i in data['list']:
|
||||||
|
videos.append({
|
||||||
|
"vod_id": i['vod_id'],
|
||||||
|
"vod_name": i['vod_name'],
|
||||||
|
"vod_class": i['vod_class'],
|
||||||
|
"vod_pic": i['vod_pic'],
|
||||||
|
'vod_year': i.get('vod_year'),
|
||||||
|
"vod_remarks": i['vod_total'] + '集'
|
||||||
|
})
|
||||||
|
return {'list': videos, 'page': pg, 'total': data['total'], 'limit': 24}
|
||||||
|
|
||||||
|
def categoryContent(self, tid, pg, filter, extend):
|
||||||
|
payload = {
|
||||||
|
"page": pg,
|
||||||
|
"limit": 24,
|
||||||
|
"type_id": tid,
|
||||||
|
"year": "",
|
||||||
|
"keyword": ""
|
||||||
|
}
|
||||||
|
response = self.post(f'{self.api_host}{self.api_path}', data=json.dumps(payload), headers=self.headers).json()
|
||||||
|
data = response['data']
|
||||||
|
videos = []
|
||||||
|
for i in data['list']:
|
||||||
|
videos.append({
|
||||||
|
'vod_id': i.get('vod_id'),
|
||||||
|
'vod_name': i.get('vod_name'),
|
||||||
|
'vod_class': i.get('vod_class'),
|
||||||
|
'vod_pic': i.get('vod_pic'),
|
||||||
|
'vod_remarks': i.get('vod_total')+'集',
|
||||||
|
'vod_year': i.get('vod_year'),
|
||||||
|
'vod_score': i.get('vod_score')
|
||||||
|
})
|
||||||
|
return {'list': videos}
|
||||||
|
|
||||||
|
def playerContent(self, flag, id, vipflags):
|
||||||
|
parse = 0
|
||||||
|
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'}
|
||||||
|
try:
|
||||||
|
response = self.fetch(id, headers=self.headers).text
|
||||||
|
match = re.search(r'let\s+data\s*=\s*(\{[^}]*http[^}]*\});', response, re.IGNORECASE)
|
||||||
|
data = match.group(1)
|
||||||
|
data2 = json.loads(data)
|
||||||
|
url = data2['url']
|
||||||
|
except Exception:
|
||||||
|
url, parse, header = id, 1, self.headers
|
||||||
|
return {'parse': parse, 'url': url,'header': header}
|
||||||
|
|
||||||
|
def init(self, extend=''):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def getName(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def isVideoFormat(self, url):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def manualVideoCheck(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def localProxy(self, param):
|
||||||
|
pass
|
||||||
Binary file not shown.
Loading…
Reference in new issue