1
Signed-off-by: qcfree <6529067+qcfree@user.noreply.gitee.com>
This commit is contained in:
parent
34fb7dd220
commit
70beb89c94
156
py/plugin/py_cctvxw.json
Normal file
156
py/plugin/py_cctvxw.json
Normal file
@ -0,0 +1,156 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import time
|
||||
import base64
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "央视新闻"
|
||||
def init(self,extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"华人世界":"TOPC1451539822927345",
|
||||
"海峡两岸":"TOPC1451540328102649",
|
||||
"今日关注":"TOPC1451540389082713",
|
||||
"中国新闻":"TOPC1451539894330405",
|
||||
"今日亚洲":"TOPC1451540448405749",
|
||||
"朝闻天下":"TOPC1451558496100826",
|
||||
"新闻直播间":"TOPC1451559129520755",
|
||||
"新闻30分":"TOPC1451559097947700",
|
||||
"共同关注":"TOPC1451558858788377",
|
||||
"东方时空":"TOPC1451558532019883",
|
||||
"新闻1+1":"TOPC1451559066181661",
|
||||
"今日环球":"TOPC1571034705435323",
|
||||
"华人故事":"TOPC1571646754621556",
|
||||
"鲁健访谈":"TOPC1609904361007481",
|
||||
"深度国际":"TOPC1451540709098112",
|
||||
"国际时讯":"TOPC1451558887804404",
|
||||
"环球视线":"TOPC1451558926200436",
|
||||
"24小时":"TOPC1451558428005729",
|
||||
"午夜新闻":"TOPC1451558779639282",
|
||||
"新闻调查":"TOPC1451558819463311",
|
||||
"新闻周刊":"TOPC1451559180488841",
|
||||
"世界周刊":"TOPC1451558687534149",
|
||||
"面对面":"TOPC1451559038345600",
|
||||
"每周质量报告":"TOPC1451558650605123",
|
||||
"华人世界":"TOPC1451539822927345"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name':k,
|
||||
'type_id':cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if(filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
extend['id'] = tid
|
||||
extend['p'] = pg
|
||||
filterParams = ["id", "p", "d"]
|
||||
params = ["", "", ""]
|
||||
for idx in range(len(filterParams)):
|
||||
fp = filterParams[idx]
|
||||
if fp in extend.keys():
|
||||
params[idx] = '{0}={1}'.format(filterParams[idx],extend[fp])
|
||||
suffix = '&'.join(params)
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
if not tid.startswith('TOPC'):
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
vodList = jo['data']['list']
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
guid = vod['guid']
|
||||
title = vod['title']
|
||||
img = vod['image']
|
||||
brief = vod['brief']
|
||||
videos.append({
|
||||
"vod_id":guid+"###"+img,
|
||||
"vod_name":title,
|
||||
"vod_pic":img,
|
||||
"vod_remarks":''
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
aid = array[0].split('###')
|
||||
tid = aid[0]
|
||||
url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid)
|
||||
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
title = jo['title'].strip()
|
||||
link = jo['hls_url'].strip()
|
||||
vod = {
|
||||
"vod_id":tid,
|
||||
"vod_name":title,
|
||||
"vod_pic":aid[1],
|
||||
"type_name":'',
|
||||
"vod_year":"",
|
||||
"vod_area":"",
|
||||
"vod_remarks":"",
|
||||
"vod_actor":"",
|
||||
"vod_director":"",
|
||||
"vod_content":""
|
||||
}
|
||||
vod['vod_play_from'] = 'CCTV'
|
||||
vod['vod_play_url'] = title+"$"+link
|
||||
|
||||
result = {
|
||||
'list':[
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
rsp = self.fetch(id,headers=self.header)
|
||||
content = rsp.text.strip()
|
||||
arr = content.split('\n')
|
||||
urlPrefix = self.regStr(id,'(http[s]?://[a-zA-z0-9.]+)/')
|
||||
url = urlPrefix + arr[-1]
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {"TOPC1451557970755294": [{"key": "d", "name": "年份", "value": [{"n": "全部", "v": ""}, {"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"}]}]}
|
||||
}
|
||||
header = {
|
||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
|
||||
}
|
||||
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
159
py/plugin/py_cctvyy.json
Normal file
159
py/plugin/py_cctvyy.json
Normal file
@ -0,0 +1,159 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import time
|
||||
import base64
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "央视音乐"
|
||||
def init(self,extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"乐享汇":"TOPC1528430065133683",
|
||||
"国际艺苑":"TOPC1451379250581117",
|
||||
"中国音乐电视":"TOPC1451542397206110",
|
||||
"精彩音乐汇":"TOPC1451541414450906",
|
||||
"童声唱":"TOPC1570593464032566",
|
||||
"民歌·中国":"TOPC1451541994820527",
|
||||
"CCTV音乐厅":"TOPC1451534421925242",
|
||||
"影视留声机":"TOPC1451542346007956",
|
||||
"音乐人生":"TOPC1451542308412911",
|
||||
"一起音乐吧":"TOPC1451542132455743",
|
||||
"音乐公开课":"TOPC1462849800640766",
|
||||
"乐游天下":"TOPC1451541538046196",
|
||||
"中国节拍":"TOPC1570025984977611",
|
||||
"聆听时刻":"TOPC1570026397101703",
|
||||
"音乐周刊":"TOPC1570593186033488",
|
||||
"合唱先锋":"TOPC1570026172793162",
|
||||
"巅峰音乐汇":"TOPC1451984095463376",
|
||||
"曲苑杂坛":"TOPC1451984417763860",
|
||||
"星光舞台":"TOPC1451542099519708",
|
||||
"百年歌声":"TOPC1451534465694290",
|
||||
"音乐传奇":"TOPC1451542222069826",
|
||||
"音乐告诉你":"TOPC1451542273313866",
|
||||
"广场舞金曲":"TOPC1528685010104859",
|
||||
"快乐琴童":"TOPC1451541450128978",
|
||||
"歌声与微笑":"TOPC1451541189657627",
|
||||
"今乐坛":"TOPC1451541229451689",
|
||||
"乡村大舞台":"TOPC1563179546003162",
|
||||
"印象·乡村":"TOPC1563178734372977"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name':k,
|
||||
'type_id':cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if(filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
extend['id'] = tid
|
||||
extend['p'] = pg
|
||||
filterParams = ["id", "p", "d"]
|
||||
params = ["", "", ""]
|
||||
for idx in range(len(filterParams)):
|
||||
fp = filterParams[idx]
|
||||
if fp in extend.keys():
|
||||
params[idx] = '{0}={1}'.format(filterParams[idx],extend[fp])
|
||||
suffix = '&'.join(params)
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
if not tid.startswith('TOPC'):
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
vodList = jo['data']['list']
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
guid = vod['guid']
|
||||
title = vod['title']
|
||||
img = vod['image']
|
||||
brief = vod['brief']
|
||||
videos.append({
|
||||
"vod_id":guid+"###"+img,
|
||||
"vod_name":title,
|
||||
"vod_pic":img,
|
||||
"vod_remarks":''
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
aid = array[0].split('###')
|
||||
tid = aid[0]
|
||||
url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid)
|
||||
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
title = jo['title'].strip()
|
||||
link = jo['hls_url'].strip()
|
||||
vod = {
|
||||
"vod_id":tid,
|
||||
"vod_name":title,
|
||||
"vod_pic":aid[1],
|
||||
"type_name":'',
|
||||
"vod_year":"",
|
||||
"vod_area":"",
|
||||
"vod_remarks":"",
|
||||
"vod_actor":"",
|
||||
"vod_director":"",
|
||||
"vod_content":""
|
||||
}
|
||||
vod['vod_play_from'] = 'CCTV'
|
||||
vod['vod_play_url'] = title+"$"+link
|
||||
|
||||
result = {
|
||||
'list':[
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
rsp = self.fetch(id,headers=self.header)
|
||||
content = rsp.text.strip()
|
||||
arr = content.split('\n')
|
||||
urlPrefix = self.regStr(id,'(http[s]?://[a-zA-z0-9.]+)/')
|
||||
url = urlPrefix + arr[-1]
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {"TOPC1451557970755294": [{"key": "d", "name": "年份", "value": [{"n": "全部", "v": ""}, {"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"}]}]}
|
||||
}
|
||||
header = {
|
||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
|
||||
}
|
||||
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
160
py/plugin/py_cctvzh.json
Normal file
160
py/plugin/py_cctvzh.json
Normal file
@ -0,0 +1,160 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import time
|
||||
import base64
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "央视综合"
|
||||
def init(self,extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"中国缘":"TOPC1571646819318596",
|
||||
"见证":"TOPC1451542933238628",
|
||||
|
||||
"我有传家宝":"TOPC1451525396109388",
|
||||
"天下财经":"TOPC1451531385787654",
|
||||
"正点财经":"TOPC1453100395512779",
|
||||
"收藏传奇":"TOPC1451526640730841",
|
||||
"分秒必争":"TOPC1451379074008632",
|
||||
"记住乡愁第八季":"TOPC1640330887412898",
|
||||
|
||||
"动画城":"TOPC1451542209144770",
|
||||
"动漫世界":"TOPC1451559448233349",
|
||||
"周末动画片":"TOPC1451559836238828",
|
||||
"快乐驿站":"TOPC1451542273075862",
|
||||
"动画城":"TOPC1451542209144770",
|
||||
"动漫星空":"TOPC1451559936284927",
|
||||
"动画剧场":"TOPC1451559414465320",
|
||||
|
||||
"走遍中国":"TOPC1451542134053698",
|
||||
"生活提示":"TOPC1451526037568184",
|
||||
"人口":"TOPC1451466072378425",
|
||||
"生活圈":"TOPC1451546588784893",
|
||||
"是真的吗":"TOPC1451534366388377",
|
||||
"生活家":"TOPC1593419181674791",
|
||||
"远方的家":"TOPC1451541349400938",
|
||||
"美食中国":"TOPC1571034804976375",
|
||||
"味道":"TOPC1482483166133803",
|
||||
"生活早参考":"TOPC1451525302140236",
|
||||
"走遍中国":"TOPC1451542134053698"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name':k,
|
||||
'type_id':cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if(filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
extend['id'] = tid
|
||||
extend['p'] = pg
|
||||
filterParams = ["id", "p", "d"]
|
||||
params = ["", "", ""]
|
||||
for idx in range(len(filterParams)):
|
||||
fp = filterParams[idx]
|
||||
if fp in extend.keys():
|
||||
params[idx] = '{0}={1}'.format(filterParams[idx],extend[fp])
|
||||
suffix = '&'.join(params)
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
if not tid.startswith('TOPC'):
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
vodList = jo['data']['list']
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
guid = vod['guid']
|
||||
title = vod['title']
|
||||
img = vod['image']
|
||||
brief = vod['brief']
|
||||
videos.append({
|
||||
"vod_id":guid+"###"+img,
|
||||
"vod_name":title,
|
||||
"vod_pic":img,
|
||||
"vod_remarks":''
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
aid = array[0].split('###')
|
||||
tid = aid[0]
|
||||
url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid)
|
||||
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
title = jo['title'].strip()
|
||||
link = jo['hls_url'].strip()
|
||||
vod = {
|
||||
"vod_id":tid,
|
||||
"vod_name":title,
|
||||
"vod_pic":aid[1],
|
||||
"type_name":'',
|
||||
"vod_year":"",
|
||||
"vod_area":"",
|
||||
"vod_remarks":"",
|
||||
"vod_actor":"",
|
||||
"vod_director":"",
|
||||
"vod_content":""
|
||||
}
|
||||
vod['vod_play_from'] = 'CCTV'
|
||||
vod['vod_play_url'] = title+"$"+link
|
||||
|
||||
result = {
|
||||
'list':[
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
rsp = self.fetch(id,headers=self.header)
|
||||
content = rsp.text.strip()
|
||||
arr = content.split('\n')
|
||||
urlPrefix = self.regStr(id,'(http[s]?://[a-zA-z0-9.]+)/')
|
||||
url = urlPrefix + arr[-1]
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {"TOPC1451557970755294": [{"key": "d", "name": "年份", "value": [{"n": "全部", "v": ""}, {"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"}]}]}
|
||||
}
|
||||
header = {
|
||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
|
||||
}
|
||||
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
178
py/plugin/py_cctvzy.json
Normal file
178
py/plugin/py_cctvzy.json
Normal file
@ -0,0 +1,178 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import time
|
||||
import base64
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "央视综艺"
|
||||
def init(self,extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"中华情":"TOPC1451541564922207",
|
||||
"回声嘹亮":"TOPC1451535575561597",
|
||||
"你好生活第三季":"TOPC1627961377879898",
|
||||
"我的艺术清单":"TOPC1582272259917160",
|
||||
"黄金100秒":"TOPC1451468496522494",
|
||||
"非常6+1":"TOPC1451467940101208",
|
||||
"向幸福出发":"TOPC1451984638791216",
|
||||
"幸福账单":"TOPC1451984801613379",
|
||||
"中国文艺报道":"TOPC1601348042760302",
|
||||
"舞蹈世界":"TOPC1451547605511387",
|
||||
"艺览天下":"TOPC1451984851125433",
|
||||
"天天把歌唱":"TOPC1451535663610626",
|
||||
"金牌喜剧班":"TOPC1611826337610628",
|
||||
"环球综艺秀":"TOPC1571300682556971",
|
||||
"挑战不可能第五季":"TOPC1579169060379297",
|
||||
"我们有一套":"TOPC1451527089955940",
|
||||
"为了你":"TOPC1451527001597710",
|
||||
"朗读者第一季":"TOPC1487120479377477",
|
||||
"挑战不可能第二季":"TOPC1474277421637816",
|
||||
"精彩一刻":"TOPC1451464786232149",
|
||||
"挑战不可能之加油中国":"TOPC1547519813971570",
|
||||
"挑战不可能第一季":"TOPC1452063816677656",
|
||||
"机智过人第三季":"TOPC1564019920570762",
|
||||
"经典咏流传第二季":"TOPC1547521714115947",
|
||||
"挑战不可能第三季":"TOPC1509500865106312",
|
||||
"经典咏流传第一季":"TOPC1513676755770201",
|
||||
"欢乐中国人第二季":"TOPC1516784350726581",
|
||||
"故事里的中国第一季":"TOPC1569729252342702",
|
||||
"你好生活第二季":"TOPC1604397385056621",
|
||||
"喜上加喜":"TOPC1590026042145705",
|
||||
"走在回家的路上":"TOPC1577697653272281",
|
||||
"综艺盛典":"TOPC1451985071887935",
|
||||
"艺术人生":"TOPC1451984891490556",
|
||||
"全家好拍档":"TOPC1474275463547690",
|
||||
"大魔术师":"TOPC1451984047073332",
|
||||
"欢乐一家亲":"TOPC1451984214170587",
|
||||
"开心辞典":"TOPC1451984378754815",
|
||||
"综艺星天地":"TOPC1451985188986150",
|
||||
"激情广场":"TOPC1451984341218765",
|
||||
"笑星大联盟":"TOPC1451984731428297",
|
||||
"天天乐":"TOPC1451984447718918",
|
||||
"欢乐英雄":"TOPC1451984242834620",
|
||||
"欢乐中国行":"TOPC1451984301286720",
|
||||
"我爱满堂彩":"TOPC1451538709371329",
|
||||
"综艺头条":"TOPC1569226855085860",
|
||||
"中华情":"TOPC1451541564922207",
|
||||
"魔法奇迹":"TOPC1451542029126607"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name':k,
|
||||
'type_id':cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if(filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
extend['id'] = tid
|
||||
extend['p'] = pg
|
||||
filterParams = ["id", "p", "d"]
|
||||
params = ["", "", ""]
|
||||
for idx in range(len(filterParams)):
|
||||
fp = filterParams[idx]
|
||||
if fp in extend.keys():
|
||||
params[idx] = '{0}={1}'.format(filterParams[idx],extend[fp])
|
||||
suffix = '&'.join(params)
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
if not tid.startswith('TOPC'):
|
||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
vodList = jo['data']['list']
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
guid = vod['guid']
|
||||
title = vod['title']
|
||||
img = vod['image']
|
||||
brief = vod['brief']
|
||||
videos.append({
|
||||
"vod_id":guid+"###"+img,
|
||||
"vod_name":title,
|
||||
"vod_pic":img,
|
||||
"vod_remarks":''
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
aid = array[0].split('###')
|
||||
tid = aid[0]
|
||||
url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid)
|
||||
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
title = jo['title'].strip()
|
||||
link = jo['hls_url'].strip()
|
||||
vod = {
|
||||
"vod_id":tid,
|
||||
"vod_name":title,
|
||||
"vod_pic":aid[1],
|
||||
"type_name":'',
|
||||
"vod_year":"",
|
||||
"vod_area":"",
|
||||
"vod_remarks":"",
|
||||
"vod_actor":"",
|
||||
"vod_director":"",
|
||||
"vod_content":""
|
||||
}
|
||||
vod['vod_play_from'] = 'CCTV'
|
||||
vod['vod_play_url'] = title+"$"+link
|
||||
|
||||
result = {
|
||||
'list':[
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
result = {
|
||||
'list':[]
|
||||
}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
rsp = self.fetch(id,headers=self.header)
|
||||
content = rsp.text.strip()
|
||||
arr = content.split('\n')
|
||||
urlPrefix = self.regStr(id,'(http[s]?://[a-zA-z0-9.]+)/')
|
||||
url = urlPrefix + arr[-1]
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {"TOPC1451557970755294": [{"key": "d", "name": "年份", "value": [{"n": "全部", "v": ""}, {"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"}]}]}
|
||||
}
|
||||
header = {
|
||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
|
||||
}
|
||||
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
242
py/plugin/py_cokemv.json
Normal file
242
py/plugin/py_cokemv.json
Normal file
File diff suppressed because one or more lines are too long
242
py/plugin/py_cokemv_1.json
Normal file
242
py/plugin/py_cokemv_1.json
Normal file
File diff suppressed because one or more lines are too long
216
py/plugin/py_cyys.json
Normal file
216
py/plugin/py_cyys.json
Normal file
@ -0,0 +1,216 @@
|
||||
# coding=utf-8
|
||||
# !/usr/bin/python
|
||||
import sys
|
||||
import re
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import urllib.parse
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "创艺影视"
|
||||
|
||||
def init(self, extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
|
||||
def homeContent(self, filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"电影": "1",
|
||||
"剧集": "2",
|
||||
"动漫": "4",
|
||||
"综艺": "3",
|
||||
"纪录片": "30"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
|
||||
result['class'] = classes
|
||||
if (filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
result = {
|
||||
'list': []
|
||||
}
|
||||
return result
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
result = {}
|
||||
header = {"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
||||
url = 'https://www.30dian.cn/vodtype/{0}-{1}.html'.format(tid, pg)
|
||||
rsp = self.fetch(url,headers=header)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
aList = root.xpath("//div[@class='myui-panel myui-panel-bg clearfix']/div/div/ul/li")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath('./div/a/@title')[0]
|
||||
pic = a.xpath('./div/a/@data-original')[0]
|
||||
mark = a.xpath("./div/a/span/span[@class='tag']/text()")[0]
|
||||
sid = a.xpath("./div/a/@href")[0].replace("/", "").replace("voddetail", "").replace(".html", "")
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 999
|
||||
result['limit'] = 5
|
||||
result['total'] = 9999
|
||||
return result
|
||||
|
||||
def detailContent(self, array):
|
||||
tid = array[0]
|
||||
url = 'https://www.30dian.cn/voddetail/{0}.html'.format(tid)
|
||||
header = {"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
||||
rsp = self.fetch(url,headers=header)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
divContent = root.xpath("//div[@class='col-lg-wide-75 col-md-wide-7 col-xs-1 padding-0']")[0]
|
||||
title = divContent.xpath(".//div[@class='myui-content__detail']/h1/text()")[0]
|
||||
pic = divContent.xpath(".//div[@class='myui-content__thumb']/a/img/@data-original")[0]
|
||||
det = divContent.xpath(".//div[@class='col-pd text-collapse content']/span[@class='data']")[0]
|
||||
if det.text is None:
|
||||
detail = det.xpath(".//p/text()")[0]
|
||||
else:
|
||||
detail = det.text
|
||||
vod = {
|
||||
"vod_id": tid,
|
||||
"vod_name": title,
|
||||
"vod_pic": pic,
|
||||
"type_name": "",
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": "",
|
||||
"vod_actor": "",
|
||||
"vod_director": "",
|
||||
"vod_content": detail
|
||||
}
|
||||
infoArray = divContent.xpath(".//div[@class='myui-content__detail']/p[contains(@class,'data')]")
|
||||
for info in infoArray:
|
||||
content = info.xpath('string(.)')
|
||||
flag = "分类" in content
|
||||
if flag == True:
|
||||
infon = content.replace("\t","").replace("\n","").strip().split('\r')
|
||||
for inf in infon:
|
||||
if inf.startswith('分类'):
|
||||
vod['type_name'] = inf.replace("分类:", "")
|
||||
if inf.startswith('地区'):
|
||||
vod['vod_area'] = inf.replace("地区:", "")
|
||||
if inf.startswith('年份'):
|
||||
vod['vod_year'] = inf.replace("年份:", "")
|
||||
if content.startswith('主演'):
|
||||
vod['vod_actor'] = content.replace("\xa0", "/").replace("主演:", "").strip('/')
|
||||
if content.startswith('更新'):
|
||||
vod['vod_remarks'] = content.replace("更新:", "")
|
||||
if content.startswith('导演'):
|
||||
vod['vod_director'] = content.replace("\xa0", "").replace("导演:", "").strip('/')
|
||||
|
||||
vod_play_from = '$$$'
|
||||
playFrom = []
|
||||
vodHeader = divContent.xpath(".//div[@class='myui-panel_hd']/div/ul/li/a[contains(@href,'playlist')]/text()")
|
||||
for v in vodHeader:
|
||||
playFrom.append(v.replace(" ", ""))
|
||||
vod_play_from = vod_play_from.join(playFrom)
|
||||
|
||||
vod_play_url = '$$$'
|
||||
playList = []
|
||||
vodList = divContent.xpath(".//div[contains(@id,'playlist')]")
|
||||
for vl in vodList:
|
||||
vodItems = []
|
||||
aList = vl.xpath('./ul/li/a')
|
||||
if len(aList) <= 0:
|
||||
name = '无法找到播放源'
|
||||
tId = '00000'
|
||||
vodItems.append(name + "$" + tId)
|
||||
else:
|
||||
for tA in aList:
|
||||
href = tA.xpath('./@href')[0]
|
||||
name = tA.xpath("./text()")[0].replace(" ", "")
|
||||
tId = self.regStr(href, '/vodplay/(\\S+).html')
|
||||
vodItems.append(name + "$" + tId)
|
||||
joinStr = '#'
|
||||
joinStr = joinStr.join(vodItems)
|
||||
playList.append(joinStr)
|
||||
vod_play_url = vod_play_url.join(playList)
|
||||
|
||||
vod['vod_play_from'] = vod_play_from
|
||||
vod['vod_play_url'] = vod_play_url
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick):
|
||||
url = 'https://www.30dian.cn/vodsearch/-------------.html?wd={0}'.format(key)
|
||||
header = {
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
||||
rsp = self.fetch(url, headers=header)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
aList = root.xpath("//ul[contains(@class,'myui-vodlist__media clearfix')]/li")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath(".//div[@class='detail']/h4/a/text()")[0]
|
||||
pic = a.xpath(".//a[contains(@class,'myui-vodlist__thumb')]//@data-original")[0]
|
||||
mark = a.xpath(".//span[@class='tag']/text()")[0]
|
||||
sid = a.xpath(".//div[@class='detail']/h4/a/@href")[0]
|
||||
sid = self.regStr(sid,'/voddetail/(\\S+).html')
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result = {
|
||||
'list': videos
|
||||
}
|
||||
return result
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
result = {}
|
||||
header = {
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
||||
if id == '00000':
|
||||
return {}
|
||||
url = 'https://www.30dian.cn/vodplay/{0}.html'.format(id)
|
||||
rsp = self.fetch(url,headers=header)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
scripts = root.xpath("//div[@class='embed-responsive clearfix']/script[@type='text/javascript']/text()")[0]
|
||||
ukey = re.findall(r"url(.*)url_next", scripts)[0].replace('"', "").replace(',', "").replace(':', "")
|
||||
purl = urllib.parse.unquote(ukey)
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] =purl
|
||||
result["header"] = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def localProxy(self, param):
|
||||
action = {
|
||||
'url': '',
|
||||
'header': '',
|
||||
'param': '',
|
||||
'type': 'string',
|
||||
'after': ''
|
||||
}
|
||||
return [200, "video/MP2T", action, ""]
|
244
py/plugin/py_czspp.json
Normal file
244
py/plugin/py_czspp.json
Normal file
@ -0,0 +1,244 @@
|
||||
# coding=utf-8
|
||||
# !/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import base64
|
||||
from Crypto.Cipher import AES
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "厂长资源"
|
||||
|
||||
def init(self, extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
|
||||
def homeContent(self, filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"豆瓣电影Top250": "dbtop250",
|
||||
"最新电影": "zuixindianying",
|
||||
"电视剧": "dsj",
|
||||
"国产剧": "gcj",
|
||||
"美剧": "meijutt",
|
||||
"韩剧": "hanjutv",
|
||||
"番剧": "fanju",
|
||||
"动漫": "dm"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
rsp = self.fetch("https://czzy.art")
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
aList = root.xpath("//div[@class='mi_btcon']//ul/li")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath('./a/img/@alt')[0]
|
||||
pic = a.xpath('./a/img/@data-original')[0]
|
||||
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0]
|
||||
sid = a.xpath("./a/@href")[0]
|
||||
sid = self.regStr(sid, "/movie/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result = {
|
||||
'list': videos
|
||||
}
|
||||
return result
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
result = {}
|
||||
url = 'https://czzy.art/{0}/page/{1}'.format(tid, pg)
|
||||
rsp = self.fetch(url)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
aList = root.xpath("//div[contains(@class,'mi_cont')]//ul/li")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath('./a/img/@alt')[0]
|
||||
pic = a.xpath('./a/img/@data-original')[0]
|
||||
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0]
|
||||
sid = a.xpath("./a/@href")[0]
|
||||
sid = self.regStr(sid, "/movie/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self, array):
|
||||
tid = array[0]
|
||||
url = 'https://czzy.art/movie/{0}.html'.format(tid)
|
||||
rsp = self.fetch(url)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
node = root.xpath("//div[@class='dyxingq']")[0]
|
||||
pic = node.xpath(".//div[@class='dyimg fl']/img/@src")[0]
|
||||
title = node.xpath('.//h1/text()')[0]
|
||||
detail = root.xpath(".//div[@class='yp_context']//p/text()")[0]
|
||||
vod = {
|
||||
"vod_id": tid,
|
||||
"vod_name": title,
|
||||
"vod_pic": pic,
|
||||
"type_name": "",
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": "",
|
||||
"vod_actor": "",
|
||||
"vod_director": "",
|
||||
"vod_content": detail
|
||||
}
|
||||
infoArray = node.xpath(".//ul[@class='moviedteail_list']/li")
|
||||
for info in infoArray:
|
||||
content = info.xpath('string(.)')
|
||||
if content.startswith('类型'):
|
||||
tpyen = ''
|
||||
for inf in info:
|
||||
tn = inf.text
|
||||
tpyen = tpyen +'/'+'{0}'.format(tn)
|
||||
vod['type_name'] = tpyen.strip('/')
|
||||
if content.startswith('地区'):
|
||||
tpyeare = ''
|
||||
for inf in info:
|
||||
tn = inf.text
|
||||
tpyeare = tpyeare +'/'+'{0}'.format(tn)
|
||||
vod['vod_area'] = tpyeare.strip('/')
|
||||
if content.startswith('豆瓣'):
|
||||
vod['vod_remarks'] = content
|
||||
if content.startswith('主演'):
|
||||
tpyeact = ''
|
||||
for inf in info:
|
||||
tn = inf.text
|
||||
tpyeact = tpyeact +'/'+'{0}'.format(tn)
|
||||
vod['vod_actor'] = tpyeact.strip('/')
|
||||
if content.startswith('导演'):
|
||||
tpyedire = ''
|
||||
for inf in info:
|
||||
tn = inf.text
|
||||
tpyedire = tpyedire +'/'+'{0}'.format(tn)
|
||||
vod['vod_director'] = tpyedire .strip('/')
|
||||
vod_play_from = '$$$'
|
||||
playFrom = ['厂长']
|
||||
vod_play_from = vod_play_from.join(playFrom)
|
||||
vod_play_url = '$$$'
|
||||
playList = []
|
||||
vodList = root.xpath("//div[@class='paly_list_btn']")
|
||||
for vl in vodList:
|
||||
vodItems = []
|
||||
aList = vl.xpath('./a')
|
||||
for tA in aList:
|
||||
href = tA.xpath('./@href')[0]
|
||||
name = tA.xpath('./text()')[0]
|
||||
tId = self.regStr(href, '/v_play/(\\S+).html')
|
||||
vodItems.append(name + "$" + tId)
|
||||
joinStr = '#'
|
||||
joinStr = joinStr.join(vodItems)
|
||||
playList.append(joinStr)
|
||||
vod_play_url = vod_play_url.join(playList)
|
||||
|
||||
vod['vod_play_from'] = vod_play_from
|
||||
vod['vod_play_url'] = vod_play_url
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick):
|
||||
url = 'https://czzy.art/xssearch?q={0}'.format(key)
|
||||
rsp = self.fetch(url)
|
||||
root = self.html(self.cleanText(rsp.text))
|
||||
vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a")
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
name = vod.xpath('./img/@alt')[0]
|
||||
pic = vod.xpath('./img/@data-original')[0]
|
||||
href = vod.xpath('./@href')[0]
|
||||
tid = self.regStr(href, 'movie/(\\S+).html')
|
||||
res = vod.xpath('./div[@class="jidi"]/span/text()')
|
||||
if len(res) == 0:
|
||||
remark = '全1集'
|
||||
else:
|
||||
remark = vod.xpath('./div[@class="jidi"]/span/text()')[0]
|
||||
videos.append({
|
||||
"vod_id": tid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": remark
|
||||
})
|
||||
result = {
|
||||
'list': videos
|
||||
}
|
||||
return result
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"
|
||||
}
|
||||
def parseCBC(self, enc, key, iv):
|
||||
keyBytes = key.encode("utf-8")
|
||||
ivBytes = iv.encode("utf-8")
|
||||
cipher = AES.new(keyBytes, AES.MODE_CBC, ivBytes)
|
||||
msg = cipher.decrypt(enc)
|
||||
paddingLen = msg[len(msg) - 1]
|
||||
return msg[0:-paddingLen]
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
url = 'https://czzy.art/v_play/{0}.html'.format(id)
|
||||
pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)'
|
||||
rsp = self.fetch(url)
|
||||
html = rsp.text
|
||||
content = self.regStr(html, pat)
|
||||
if content == '':
|
||||
return {}
|
||||
key = self.regStr(html, pat, 2)
|
||||
iv = self.regStr(html, pat, 3)
|
||||
decontent = self.parseCBC(base64.b64decode(content), key, iv).decode()
|
||||
urlPat = 'video: \\{url: \\\"([^\\\"]+)\\\"'
|
||||
vttPat = 'subtitle: \\{url:\\\"([^\\\"]+\\.vtt)\\\"'
|
||||
str3 = self.regStr(decontent, urlPat)
|
||||
str4 = self.regStr(decontent, vttPat)
|
||||
self.loadVtt(str3)
|
||||
result = {
|
||||
'parse': '0',
|
||||
'playUrl': '',
|
||||
'url': str3,
|
||||
'header': ''
|
||||
}
|
||||
if len(str4) > 0:
|
||||
result['subf'] = '/vtt/utf-8'
|
||||
# result['subt'] = Proxy.localProxyUrl() + "?do=czspp&url=" + URLEncoder.encode(str4)
|
||||
result['subt'] = ''
|
||||
return result
|
||||
|
||||
def loadVtt(self, url):
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def localProxy(self, param):
|
||||
action = {}
|
||||
return [200, "video/MP2T", action, ""]
|
128
py/plugin/py_douban.json
Normal file
128
py/plugin/py_douban.json
Normal file
File diff suppressed because one or more lines are too long
147
py/plugin/py_douyu.json
Normal file
147
py/plugin/py_douyu.json
Normal file
@ -0,0 +1,147 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
|
||||
class Spider(Spider):
|
||||
def getName(self):
|
||||
return "斗鱼"
|
||||
def init(self,extend=""):
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"热门游戏": "热门游戏",
|
||||
"一起看": "一起看",
|
||||
"主机游戏": "主机游戏",
|
||||
"原创IP": "原创IP",
|
||||
"王者荣耀":"王者荣耀",
|
||||
"英雄联盟":"英雄联盟",
|
||||
"第五人格":"第五人格",
|
||||
"火影忍者":"火影忍者",
|
||||
"和平精英":"和平精英",
|
||||
"DOTA2":"DOTA2",
|
||||
"CF手游":"CF手游"
|
||||
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
|
||||
result['class'] = classes
|
||||
if (filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
url = 'http://live.yj1211.work/api/live/getRecommendByPlatformArea?platform=douyu&size=20&area={0}&page={1}'.format(tid, pg)
|
||||
rsp = self.fetch(url)
|
||||
content = rsp.text
|
||||
jo = json.loads(content)
|
||||
videos = []
|
||||
vodList = jo['data']
|
||||
for vod in vodList:
|
||||
aid = (vod['roomId']).strip()
|
||||
title = vod['roomName'].strip()
|
||||
img = vod['roomPic'].strip()
|
||||
remark = (vod['categoryName']).strip()
|
||||
videos.append({
|
||||
"vod_id": aid,
|
||||
"vod_name": title,
|
||||
"vod_pic": img,
|
||||
"vod_remarks": remark
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
aid = array[0]
|
||||
url = "http://live.yj1211.work/api/live/getRoomInfo?platform=douyu&roomId={0}".format(aid)
|
||||
rsp = self.fetch(url)
|
||||
jRoot = json.loads(rsp.text)
|
||||
jo = jRoot['data']
|
||||
title = jo['roomName']
|
||||
pic = jo['roomPic']
|
||||
desc = str(jo['online'])
|
||||
dire = jo['ownerName']
|
||||
typeName = jo['categoryName']
|
||||
remark = jo['categoryName']
|
||||
vod = {
|
||||
"vod_id": aid,
|
||||
"vod_name": title,
|
||||
"vod_pic": pic,
|
||||
"type_name": typeName,
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": remark,
|
||||
"vod_actor": '在线人数:' + desc,
|
||||
"vod_director": dire,
|
||||
"vod_content": ""
|
||||
}
|
||||
playUrl = '原画' + '${0}#'.format(aid)
|
||||
vod['vod_play_from'] = '斗鱼直播'
|
||||
vod['vod_play_url'] = playUrl
|
||||
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
result = {}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
|
||||
url = 'http://live.yj1211.work/api/live/getRealUrl?platform=douyu&roomId={0}'.format(id)
|
||||
rsp = self.fetch(url)
|
||||
jRoot = json.loads(rsp.text)
|
||||
jo = jRoot['data']
|
||||
ja = jo['OD']
|
||||
url = ja
|
||||
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = {
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
||||
}
|
||||
result["contentType"] = 'video/x-flv'
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
def localProxy(self,param):
|
||||
action = {
|
||||
'url':'',
|
||||
'header':'',
|
||||
'param':'',
|
||||
'type':'string',
|
||||
'after':''
|
||||
}
|
||||
return [200, "video/MP2T", action, ""]
|
161
py/plugin/py_freezb.json
Normal file
161
py/plugin/py_freezb.json
Normal file
@ -0,0 +1,161 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import re
|
||||
import math
|
||||
|
||||
class Spider(Spider):
|
||||
def getName(self):
|
||||
return "体育直播"
|
||||
def init(self,extend=""):
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"全部": ""
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
|
||||
result['class'] = classes
|
||||
if (filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {}
|
||||
return result
|
||||
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
url = 'http://www.freezb.live/'
|
||||
rsp = self.fetch(url)
|
||||
html = self.html(rsp.text)
|
||||
aList = html.xpath("//tr[@class='match_main']")
|
||||
videos = []
|
||||
img = 'https://s1.ax1x.com/2022/10/07/x3NPUO.png'
|
||||
for a in aList:
|
||||
urlList = a.xpath("./td[@class='update_data live_link']/a")
|
||||
stat = a.xpath("./td[contains(@style, 'font-weight:bold')]/sapn/@title")[0]
|
||||
time = a.xpath("./td[contains(@style, 'font-weight:bold')]/sapn/text()")[0]
|
||||
if '比分' not in urlList[0].xpath("./text()")[0] and stat == '直播中':
|
||||
remark = a.xpath(".//p[@class='raceclass matchcolor']/@title")[0].replace('直播','') + '|' + time
|
||||
name = a.xpath("string(./td[4])").replace(' ','').replace('\tVS','VS')
|
||||
if 'VS' not in name:
|
||||
names = name.split('\t')
|
||||
remark = names[0] + '|' + time
|
||||
name = names[-1].replace('vs','VS')
|
||||
aid = ''
|
||||
for url in urlList:
|
||||
title = url.xpath("./text()")[0]
|
||||
aurl = url.xpath("./@href")[0]
|
||||
aurl = self.regStr(reg=r'/tv/(.*?).html', src=aurl)
|
||||
if '比分' not in title:
|
||||
aid = aid + title + '@@@' + aurl + '#'
|
||||
videos.append({
|
||||
"vod_id": name + '###' + remark.split('|')[0] + '###' + aid,
|
||||
"vod_name": name,
|
||||
"vod_pic": img,
|
||||
"vod_remarks": remark
|
||||
})
|
||||
numvL = len(videos)
|
||||
pgc = math.ceil(numvL/15)
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = pgc
|
||||
result['limit'] = numvL
|
||||
result['total'] = numvL
|
||||
return result
|
||||
|
||||
def detailContent(self,array):
|
||||
aid = array[0]
|
||||
aids = aid.split('###')
|
||||
name = aids[0]
|
||||
typeName = aids[1]
|
||||
tus = aids[2].strip('#').split('#')
|
||||
pic = 'https://s1.ax1x.com/2022/10/07/x3NPUO.png'
|
||||
vod = {
|
||||
"vod_id": name,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"type_name": typeName,
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": '',
|
||||
"vod_actor": '',
|
||||
"vod_director":'',
|
||||
"vod_content": ''
|
||||
}
|
||||
purl = ''
|
||||
for tu in tus:
|
||||
title = tu.split('@@@')[0]
|
||||
uid = tu.split('@@@')[1]
|
||||
url = "http://www.freezb.live/tv/{0}.html".format(uid)
|
||||
rsp = self.fetch(url)
|
||||
root = self.html(rsp.text)
|
||||
phpurl = root.xpath("//div[@class='media']/iframe/@src")[0]
|
||||
purl = purl + '{0}${1}@@@{2}'.format(title,phpurl,uid) + '#'
|
||||
vod['vod_play_from'] = '体育直播'
|
||||
vod['vod_play_url'] = purl
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
|
||||
def searchContent(self,key,quick):
|
||||
result = {}
|
||||
return result
|
||||
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
ids = id.split('@@@')
|
||||
url = ids[0]
|
||||
vid = ids[1]
|
||||
headers = {
|
||||
"referer": "http://www.freezb.live/tv/{0}.html".format(vid),
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
|
||||
}
|
||||
rsp = self.fetch(url,headers=headers)
|
||||
aurl = self.regStr(reg=r'\"../(.*?)\"', src=rsp.text)
|
||||
if aurl =='':
|
||||
url = self.regStr(reg=r"url: \'(.*?)\'", src=rsp.text)
|
||||
else:
|
||||
pheaders = {
|
||||
"referer": url,
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
|
||||
}
|
||||
purl = self.regStr(reg=r'(.*)/', src=url) + '/' + aurl
|
||||
prsp = self.fetch(purl, headers=pheaders)
|
||||
url = self.regStr(reg=r"url: \'(.*?)\'", src=prsp.text)
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
|
||||
def localProxy(self,param):
|
||||
action = {
|
||||
'url':'',
|
||||
'header':'',
|
||||
'param':'',
|
||||
'type':'string',
|
||||
'after':''
|
||||
}
|
||||
return [200, "video/MP2T", action, ""]
|
202
py/plugin/py_genmov.json
Normal file
202
py/plugin/py_genmov.json
Normal file
File diff suppressed because one or more lines are too long
202
py/plugin/py_genmov_1.json
Normal file
202
py/plugin/py_genmov_1.json
Normal file
File diff suppressed because one or more lines are too long
216
py/plugin/py_gimytv.json
Normal file
216
py/plugin/py_gimytv.json
Normal file
@ -0,0 +1,216 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "剧迷"
|
||||
def init(self,extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
# https://gimytv.co/
|
||||
result = {}
|
||||
cateManual = {
|
||||
"电影": "movies",
|
||||
"电视剧": "tvseries",
|
||||
"综艺": "tv_show",
|
||||
"动漫": "anime"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name':k,
|
||||
'type_id':cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if(filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
rsp = self.fetch("https://gimytv.co/",headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
aList = root.xpath("//ul[@class='myui-vodlist clearfix']/li/div/a")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath("./@title")[0]
|
||||
pic = a.xpath("./@data-original")[0]
|
||||
mark = a.xpath("./span[contains(@class, 'pic-text')]/text()")[0]
|
||||
sid = a.xpath("./@href")[0]
|
||||
sid = self.regStr(sid,"/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id":sid,
|
||||
"vod_name":name,
|
||||
"vod_pic":pic,
|
||||
"vod_remarks":mark
|
||||
})
|
||||
result = {
|
||||
'list':videos
|
||||
}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
urlParams = ["", "", "", ""]
|
||||
urlParams[0] = tid
|
||||
urlParams[3] = pg
|
||||
suffix = ''
|
||||
for key in extend:
|
||||
if key == 4:
|
||||
suffix = '/by/'+extend[key]
|
||||
else:
|
||||
urlParams[int(key)] = extend[key]
|
||||
params = '-'.join(urlParams)+suffix
|
||||
# https://gimytv.co/genre/tvseries--2022-/by/hits_month.html
|
||||
url = 'https://gimytv.com/genre/{0}.html'.format(params)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
aList = root.xpath("//ul[@class='myui-vodlist clearfix']/li/div/a")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath("./@title")[0]
|
||||
pic = a.xpath("./@data-original")[0]
|
||||
mark = a.xpath("./span[contains(@class, 'pic-text')]/text()")[0]
|
||||
sid = a.xpath("./@href")[0]
|
||||
sid = self.regStr(sid,"/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id":sid,
|
||||
"vod_name":name,
|
||||
"vod_pic":pic,
|
||||
"vod_remarks":mark
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
tid = array[0]
|
||||
url = 'https://gimytv.co/{0}.html'.format(tid)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
node = root.xpath("//div[@class='container']")[0]
|
||||
title = node.xpath(".//div[@class='myui-content__thumb']/a/@title")[0]
|
||||
pic = node.xpath(".//div[@class='myui-content__thumb']/a/img/@data-original")[0]
|
||||
vod = {
|
||||
"vod_id":tid,
|
||||
"vod_name":title,
|
||||
"vod_pic":pic,
|
||||
"type_name":"",
|
||||
"vod_year":"",
|
||||
"vod_area":"",
|
||||
"vod_remarks":"",
|
||||
"vod_actor":"",
|
||||
"vod_director":"",
|
||||
"vod_content":""
|
||||
}
|
||||
infoArray = node.xpath(".//div[@class='myui-content__detail']/p")
|
||||
for info in infoArray:
|
||||
content = info.xpath('string(.)')
|
||||
if content.startswith('分類'):
|
||||
vod['type_name'] = content
|
||||
# if content.startswith('年份'):
|
||||
# vod['vod_year'] = content
|
||||
# if content.startswith('地区'):
|
||||
# vod['vod_area'] = content
|
||||
if content.startswith('狀態'):
|
||||
vod['vod_remarks'] = content
|
||||
if content.startswith('主演'):
|
||||
vod['vod_actor'] = content
|
||||
if content.startswith('導演'):
|
||||
vod['vod_director'] = content
|
||||
# if content.startswith('剧情'):
|
||||
# vod['vod_content'] = content
|
||||
vod['vod_content'] = node.xpath(".//div[contains(@class,'col-pd')]/p/text()")[0]
|
||||
|
||||
vod_play_from = '$$$'
|
||||
playFrom = []
|
||||
vodHeader = root.xpath(".//div[@class='myui-panel_hd']/div/h3/text()[2]")
|
||||
for v in vodHeader:
|
||||
playFrom.append(v.strip())
|
||||
vod_play_from = vod_play_from.join(playFrom)
|
||||
|
||||
vod_play_url = '$$$'
|
||||
playList = []
|
||||
vodList = root.xpath(".//ul[contains(@class,'myui-content__list')]")
|
||||
for vl in vodList:
|
||||
vodItems = []
|
||||
aList = vl.xpath('./li/a')
|
||||
for tA in aList:
|
||||
href = tA.xpath('./@href')[0]
|
||||
name = tA.xpath('./text()')[0]
|
||||
tId = self.regStr(href,'/(\\S+).html')
|
||||
vodItems.append(name + "$" + tId)
|
||||
joinStr = '#'
|
||||
joinStr = joinStr.join(vodItems)
|
||||
playList.append(joinStr)
|
||||
vod_play_url = vod_play_url.join(playList)
|
||||
|
||||
vod['vod_play_from'] = vod_play_from
|
||||
vod['vod_play_url'] = vod_play_url
|
||||
|
||||
result = {
|
||||
'list':[
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
url = "https://gimytv.co/search/-------------.html?wd={0}".format(key)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
aList = root.xpath("//ul[contains(@class,'myui-vodlist__media')]/li")
|
||||
videos = []
|
||||
for a in aList:
|
||||
name = a.xpath(".//a/@title")[0]
|
||||
pic = a.xpath(".//a/@data-original")[0]
|
||||
mark = a.xpath(".//span[contains(@class, 'pic-text')]/text()")[0]
|
||||
sid = a.xpath(".//a/@href")[0]
|
||||
sid = self.regStr(sid,"/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id":sid,
|
||||
"vod_name":name,
|
||||
"vod_pic":pic,
|
||||
"vod_remarks":mark
|
||||
})
|
||||
result = {
|
||||
'list':videos
|
||||
}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
url = 'https://gimytv.co/{0}.html'.format(id)
|
||||
rsp = self.fetch(url,headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
scripts = root.xpath("//script/text()")
|
||||
jo = {}
|
||||
for script in scripts:
|
||||
if(script.startswith("var player_")):
|
||||
target = script[script.index('{'):]
|
||||
jo = json.loads(target)
|
||||
break;
|
||||
url = jo['url']
|
||||
result = {}
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
cookie = {}
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {"movies":[{"key":0,"name":"分类","value":[{"n":"全部","v":""},{"n":"劇情片","v":"drama"},{"n":"動作片","v":"action"},{"n":"科幻片","v":"scifi"},{"n":"喜劇片","v":"comedymovie"},{"n":"愛情片","v":"romance"},{"n":"戰爭片","v":"war"},{"n":"恐怖片","v":"horror"},{"n":"動畫電影","v":"animation"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"美國","v":"美國"},{"n":"歐美","v":"歐美"},{"n":"大陸","v":"大陸"},{"n":"中國大陸","v":"中國大陸"},{"n":"韓國","v":"韓國"},{"n":"香港","v":"香港"},{"n":"日本","v":"日本"},{"n":"英國","v":"英國"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}],"tvseries":[{"key":0,"name":"分类","value":[{"n":"全部","v":""},{"n":"陸劇","v":"cn"},{"n":"韓劇","v":"kr"},{"n":"美劇","v":"us"},{"n":"日劇","v":"jp"},{"n":"台劇","v":"tw"},{"n":"港劇","v":"hks"},{"n":"海外劇","v":"ot"},{"n":"紀錄片","v":"documentary"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}],"anime":[{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"日本","v":"日本"},{"n":"美國","v":"美國"},{"n":"歐美","v":"歐美"},{"n":"大陸","v":"大陸"},{"n":"臺灣","v":"臺灣"},{"n":"香港","v":"香港"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}],"tv_show":[{"key":0,"name":"分类","value":[{"n":"全部","v":""},{"n":"纪录片","v":"28"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"大陸","v":"大陸"},{"n":"中國大陸","v":"中國大陸"},{"n":"韓國","v":"韓國"},{"n":"臺灣","v":"臺灣"},{"n":"美國","v":"美國"},{"n":"歐美","v":"歐美"},{"n":"日本","v":"日本"},{"n":"香港","v":"香港"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}]}
|
||||
}
|
||||
header = {
|
||||
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'
|
||||
}
|
||||
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
136
py/plugin/py_gitcafe.py
Normal file
136
py/plugin/py_gitcafe.py
Normal file
@ -0,0 +1,136 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import requests
|
||||
import json
|
||||
|
||||
class Spider(Spider):
|
||||
def getDependence(self):
|
||||
return ['py_ali']
|
||||
def getName(self):
|
||||
return "py_gitcafe"
|
||||
def init(self,extend):
|
||||
self.ali = extend[0]
|
||||
print("============py_gitcafe============")
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"华语电视" :"hyds",
|
||||
"日韩电视" :"rhds",
|
||||
"欧美电视" :"omds",
|
||||
"其他电视" :"qtds",
|
||||
"华语电影" :"hydy",
|
||||
"日韩电影" :"rhdy",
|
||||
"欧美电影" :"omdy",
|
||||
"其他电影" :"qtdy",
|
||||
"华语动漫" :"hydm",
|
||||
"日韩动漫" :"rhdm",
|
||||
"欧美动漫" :"omdm",
|
||||
"纪录片" :"jlp",
|
||||
"综艺片" :"zyp",
|
||||
"教育培训" :"jypx",
|
||||
"其他视频" :"qtsp",
|
||||
"华语音乐" :"hyyy",
|
||||
"日韩音乐" :"rhyy",
|
||||
"欧美音乐" :"omyy",
|
||||
"其他音乐" :"qtyy"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name':k,
|
||||
'type_id':cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if filter:
|
||||
result['filter'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {}
|
||||
if len(self.homeData.keys()) == 0:
|
||||
url = self.baseUrl+'/alipaper/home.json'
|
||||
self.homeData = self.fetch(url,headers=self.header).json()
|
||||
cateList = self.homeData['data']
|
||||
videos = []
|
||||
for cate in cateList:
|
||||
if cate['info']['code'] in self.category:
|
||||
vodList = cate['data']
|
||||
for vod in vodList:
|
||||
videos.append({
|
||||
"vod_id":"https://www.aliyundrive.com/s/" + vod['key'],
|
||||
"vod_name":vod['title'],
|
||||
"vod_pic":'https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png',
|
||||
"vod_remarks":''
|
||||
})
|
||||
result['list']=videos
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
url = self.baseUrl+'/tool/alipaper/'
|
||||
form = {
|
||||
"action": "viewcat",
|
||||
"cat": tid,
|
||||
"num":pg
|
||||
}
|
||||
|
||||
rsp = requests.post(url,headers=self.header,data=form)
|
||||
vodList = json.loads(self.cleanText(rsp.text))
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
videos.append({
|
||||
"vod_id": 'https://www.aliyundrive.com/s/'+vod["key"],
|
||||
"vod_name": vod["title"],
|
||||
"vod_pic": "https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png",
|
||||
"vod_remarks": vod['cat']
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
category = ['hydm','hyds','hydy','omdm','omds','omdy','rhdm','rhds','rhdy','qtds','qtdy','qtsp','jlp','zyp']
|
||||
def detailContent(self,array):
|
||||
return self.ali.detailContent(array)
|
||||
def searchContent(self,key,quick):
|
||||
result = {}
|
||||
url = self.baseUrl+'/tool/alipaper/'
|
||||
form = {
|
||||
"action": "search",
|
||||
"keyword": key
|
||||
}
|
||||
vodList = requests.post(url,headers=self.header,data=form).json()
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
videos.append({
|
||||
"vod_id": 'https://www.aliyundrive.com/s/'+vod["key"],
|
||||
"vod_name": vod["title"],
|
||||
"vod_pic": "https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png",
|
||||
"vod_remarks": vod['cat']
|
||||
})
|
||||
result = {
|
||||
'list':videos
|
||||
}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
return self.ali.playerContent(flag,id,vipFlags)
|
||||
|
||||
homeData = {}
|
||||
baseUrl = 'https://gitcafe.net'
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36",
|
||||
"Referer": "https://u.gitcafe.net/"
|
||||
}
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
185
py/plugin/py_huya.json
Normal file
185
py/plugin/py_huya.json
Normal file
@ -0,0 +1,185 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import re
|
||||
import time
|
||||
import html
|
||||
import base64
|
||||
import hashlib
|
||||
import urllib.parse
|
||||
|
||||
class Spider(Spider):
|
||||
def getName(self):
|
||||
return "虎牙"
|
||||
def init(self,extend=""):
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"音乐":"音乐",
|
||||
"星秀":"星秀",
|
||||
"颜值":"颜值",
|
||||
"交友":"交友",
|
||||
"户外":"户外",
|
||||
"美食":"美食",
|
||||
"一起看":"一起看",
|
||||
"王者荣耀":"王者荣耀",
|
||||
"和平精英":"和平精英",
|
||||
"英雄联盟":"英雄联盟",
|
||||
"天天吃鸡":"天天吃鸡",
|
||||
"穿越火线":"穿越火线",
|
||||
"二次元":"二次元",
|
||||
"体育":"体育",
|
||||
"原神":"原神",
|
||||
"三国杀":"三国杀",
|
||||
"暗黑破坏神:不朽":"暗黑破坏神:不朽",
|
||||
"迷你世界":"迷你世界",
|
||||
"暗区突围":"暗区突围",
|
||||
"生死狙击2":"生死狙击2",
|
||||
"金铲铲之战":"金铲铲之战",
|
||||
"英雄联盟手游":"英雄联盟手游",
|
||||
"lol云顶之弈":"lol云顶之弈",
|
||||
"剑侠世界3":"剑侠世界3",
|
||||
"不良人3":"不良人3",
|
||||
"二次元":"二次元",
|
||||
"主机游戏":"主机游戏"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
|
||||
result['class'] = classes
|
||||
if (filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
url = 'http://live.yj1211.work/api/live/getRecommendByPlatformArea?platform=huya&size=20&area={0}&page={1}'.format(tid, pg)
|
||||
rsp = self.fetch(url)
|
||||
content = rsp.text
|
||||
jo = json.loads(content)
|
||||
videos = []
|
||||
vodList = jo['data']
|
||||
for vod in vodList:
|
||||
aid = (vod['roomId']).strip()
|
||||
title = vod['roomName'].strip()
|
||||
img = vod['roomPic'].strip()
|
||||
remark = (vod['ownerName']).strip()
|
||||
videos.append({
|
||||
"vod_id": aid,
|
||||
"vod_name": title,
|
||||
"vod_pic": img,
|
||||
"vod_remarks": remark
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
def detailContent(self,array):
|
||||
aid = array[0]
|
||||
url = 'https://www.huya.com/' + aid
|
||||
header = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'
|
||||
}
|
||||
rsp = self.fetch(url, headers=header)
|
||||
streamInfo = re.findall(r'stream: ([\s\S]*?)\n', rsp.text)
|
||||
if (len(streamInfo) > 0):
|
||||
liveData = json.loads(streamInfo[0])
|
||||
else:
|
||||
streamInfo = re.findall(r'"stream": "([\s\S]*?)"', rsp.text)
|
||||
if (len(streamInfo) > 0):
|
||||
liveDataBase64 = streamInfo[0]
|
||||
liveData = json.loads(str(base64.b64decode(liveDataBase64), 'utf-8'))
|
||||
streamInfoList = liveData['data'][0]['gameStreamInfoList']
|
||||
vod = {
|
||||
"vod_id": aid,
|
||||
"vod_name": liveData['data'][0]['gameLiveInfo']['roomName'],
|
||||
"vod_pic": liveData['data'][0]['gameLiveInfo']['screenshot'],
|
||||
"type_name": liveData['data'][0]['gameLiveInfo']['gameFullName'],
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": "",
|
||||
"vod_actor": "",
|
||||
"vod_director": "",
|
||||
"vod_content": ""
|
||||
}
|
||||
playUrl = ''
|
||||
for streamInfo in streamInfoList:
|
||||
hls_url = streamInfo['sHlsUrl'] + '/' + streamInfo['sStreamName'] + '.' + streamInfo['sHlsUrlSuffix']
|
||||
srcAntiCode = html.unescape(streamInfo['sHlsAntiCode'])
|
||||
c = srcAntiCode.split('&')
|
||||
c = [i for i in c if i != '']
|
||||
n = {i.split('=')[0]: i.split('=')[1] for i in c}
|
||||
fm = urllib.parse.unquote(n['fm'])
|
||||
u = base64.b64decode(fm).decode('utf-8')
|
||||
hash_prefix = u.split('_')[0]
|
||||
ctype = n.get('ctype', '')
|
||||
txyp = n.get('txyp', '')
|
||||
fs = n.get('fs', '')
|
||||
t = n.get('t', '')
|
||||
seqid = str(int(time.time() * 1e3 + 1463993859134))
|
||||
wsTime = hex(int(time.time()) + 3600).replace('0x', '')
|
||||
hash = hashlib.md5('_'.join([hash_prefix, '1463993859134', streamInfo['sStreamName'], hashlib.md5((seqid + '|' + ctype + '|' + t).encode('utf-8')).hexdigest(), wsTime]).encode('utf-8')).hexdigest()
|
||||
ratio = ''
|
||||
purl = "{}?wsSecret={}&wsTime={}&seqid={}&ctype={}&ver=1&txyp={}&fs={}&ratio={}&u={}&t={}&sv=2107230339".format( hls_url, hash, wsTime, seqid, ctype, txyp, fs, ratio, '1463993859134', t)
|
||||
playUrl = playUrl + '{}${}#'.format(streamInfo['sCdnType'], purl)
|
||||
vod['vod_play_from'] = '虎牙直播'
|
||||
vod['vod_play_url'] = playUrl
|
||||
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
def searchContent(self,key,quick):
|
||||
result = {}
|
||||
return result
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
url = id
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = {
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
||||
}
|
||||
result["contentType"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
def localProxy(self,param):
|
||||
action = {
|
||||
'url':'',
|
||||
'header':'',
|
||||
'param':'',
|
||||
'type':'string',
|
||||
'after':''
|
||||
}
|
||||
return [200, "video/MP2T", action, ""]
|
86
py/plugin/py_if101.json
Normal file
86
py/plugin/py_if101.json
Normal file
@ -0,0 +1,86 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import urllib.parse
|
||||
|
||||
class Spider(Spider):
|
||||
def getName(self):
|
||||
return "IF101影视"
|
||||
def init(self,extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
|
||||
classes = [{"type_id":20,"type_name":"电影"},{"type_id":21,"type_name":"电视剧"},{"type_id":22,"type_name":"动漫"},{"type_id":23,"type_name":"综艺"},{"type_id":24,"type_name":"体育"},{"type_id":25,"type_name":"纪录片"},{"type_id":26,"type_name":"明星资讯"},{"type_id":28,"type_name":"冒险片"},{"type_id":29,"type_name":"剧情片"},{"type_id":30,"type_name":"动作片"},{"type_id":31,"type_name":"动画电影"},{"type_id":32,"type_name":"同性片"},{"type_id":33,"type_name":"喜剧片"},{"type_id":34,"type_name":"奇幻片"},{"type_id":35,"type_name":"恐怖片"},{"type_id":36,"type_name":"悬疑片"},{"type_id":37,"type_name":"惊悚片"},{"type_id":38,"type_name":"歌舞片"},{"type_id":39,"type_name":"灾难片"},{"type_id":40,"type_name":"爱情片"},{"type_id":41,"type_name":"犯罪片"},{"type_id":42,"type_name":"科幻片"},{"type_id":43,"type_name":"经典片"},{"type_id":44,"type_name":"网络电影"},{"type_id":117,"type_name":"战争片"},{"type_id":119,"type_name":"欧美剧"},{"type_id":120,"type_name":"日剧"},{"type_id":121,"type_name":"韩剧"},{"type_id":122,"type_name":"国产剧"},{"type_id":123,"type_name":"泰剧"},{"type_id":124,"type_name":"港剧"},{"type_id":125,"type_name":"台剧"},{"type_id":126,"type_name":"新马剧"},{"type_id":127,"type_name":"其他剧"},{"type_id":128,"type_name":"欧美综艺"},{"type_id":129,"type_name":"日本综艺"},{"type_id":130,"type_name":"韩国综艺"},{"type_id":131,"type_name":"国产综艺"},{"type_id":132,"type_name":"新马泰综艺"},{"type_id":133,"type_name":"港台综艺"},{"type_id":134,"type_name":"其他综艺"},{"type_id":135,"type_name":"欧美动漫"},{"type_id":136,"type_name":"日本动漫"},{"type_id":137,"type_name":"韩国动漫"},{"type_id":138,"type_name":"国产动漫"},{"type_id":139,"type_name":"新马泰动漫"},{"type_id":140,"type_name":"港台动漫"},{"type_id":142,"type_name":"其他动漫"}]
|
||||
|
||||
result['class'] = classes
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
rsp = self.fetch("https://api.8a5.cn/parse/if101/py.php?do=homeVideoContent")
|
||||
alists = json.loads(rsp.text)
|
||||
alist = alists['list']
|
||||
result = {
|
||||
'list':alist
|
||||
}
|
||||
return result
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
urlParams = []
|
||||
params = ''
|
||||
for key in extend:
|
||||
urlParams.append(str(key) + '=' + extend[key])
|
||||
params = '&'.join(urlParams)
|
||||
url = 'https://api.8a5.cn/parse/if101/py.php?do=categoryContent&tid={0}&page={1}&{2}'.format(tid, pg,params)
|
||||
rsp = self.fetch(url)
|
||||
alists = json.loads(rsp.text)
|
||||
alist = alists['list']
|
||||
|
||||
result['list'] = alist
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self,array):
|
||||
tid = array[0]
|
||||
url = 'https://api.8a5.cn/parse/if101/py.php?do=detailContent&id={0}'.format(tid)
|
||||
rsp = self.fetch(url)
|
||||
alists = json.loads(rsp.text)
|
||||
vod = alists['vod']
|
||||
result = {
|
||||
'list':[
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
|
||||
def searchContent(self,key,quick):
|
||||
url = 'https://api.8a5.cn/parse/if101/py.php?do=searchContent&wd={0}'.format(key)
|
||||
rsp = self.fetch(url)
|
||||
alists = json.loads(rsp.text)
|
||||
list = alists['list']
|
||||
result = {
|
||||
'list':list
|
||||
}
|
||||
return result
|
||||
|
||||
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
id = 'https://api.8a5.cn/parse/if101/get.php?url=' + urllib.parse.quote(id)
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = id
|
||||
return result
|
||||
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def localProxy(self,param):
|
||||
return [200, "video/MP2T", action, ""]
|
166
py/plugin/py_jrskbs.json
Normal file
166
py/plugin/py_jrskbs.json
Normal file
@ -0,0 +1,166 @@
|
||||
#coding=utf-8
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import re
|
||||
import math
|
||||
|
||||
class Spider(Spider):
|
||||
def getName(self):
|
||||
return "体育直播"
|
||||
def init(self,extend=""):
|
||||
pass
|
||||
def isVideoFormat(self,url):
|
||||
pass
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
def homeContent(self,filter):
|
||||
result = {}
|
||||
cateManual = {
|
||||
"全部": ""
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
|
||||
result['class'] = classes
|
||||
if (filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
def homeVideoContent(self):
|
||||
result = {}
|
||||
return result
|
||||
|
||||
def categoryContent(self,tid,pg,filter,extend):
|
||||
result = {}
|
||||
url = 'https://m.jrskbs.com'
|
||||
rsp = self.fetch(url)
|
||||
html = self.html(rsp.text)
|
||||
aList = html.xpath("//div[contains(@class, 'contentList')]/a")
|
||||
videos = []
|
||||
numvL = len(aList)
|
||||
pgc = math.ceil(numvL/15)
|
||||
for a in aList:
|
||||
aid = a.xpath("./@href")[0]
|
||||
aid = self.regStr(reg=r'/live/(.*?).html', src=aid)
|
||||
img = a.xpath(".//div[@class='contentLeft']/p/img/@src")[0]
|
||||
home = a.xpath(".//div[@class='contentLeft']/p[@class='false false']/text()")[0]
|
||||
away = a.xpath(".//div[@class='contentRight']/p[@class='false false']/text()")[0]
|
||||
infoArray = a.xpath(".//div[@class='contentCenter']/p")
|
||||
remark = ''
|
||||
for info in infoArray:
|
||||
content = info.xpath('string(.)').replace(' ','')
|
||||
remark = remark + '|' + content
|
||||
videos.append({
|
||||
"vod_id": aid,
|
||||
"vod_name": home + 'vs' + away,
|
||||
"vod_pic": img,
|
||||
"vod_remarks": remark.strip('|')
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = pgc
|
||||
result['limit'] = numvL
|
||||
result['total'] = numvL
|
||||
return result
|
||||
|
||||
def detailContent(self,array):
|
||||
aid = array[0]
|
||||
url = "http://m.jrskbs.com/live/{0}.html".format(aid)
|
||||
rsp = self.fetch(url)
|
||||
root = self.html(rsp.text)
|
||||
divContent = root.xpath("//div[@class='today']")[0]
|
||||
home = divContent.xpath(".//p[@class='onePlayer homeTeam']/text()")[0]
|
||||
away = divContent.xpath(".//div[3]/text()")[0].strip()
|
||||
title = home + 'vs' + away
|
||||
pic = divContent.xpath(".//img[@class='gameLogo1 homeTeam_img']/@src")[0]
|
||||
typeName = divContent.xpath(".//div/p[@class='name1 matchTime_wap']/text()")[0]
|
||||
remark = divContent.xpath(".//div/p[@class='time1 matchTitle']/text()")[0].replace(' ','')
|
||||
vod = {
|
||||
"vod_id": aid,
|
||||
"vod_name": title,
|
||||
"vod_pic": pic,
|
||||
"type_name": typeName,
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": remark,
|
||||
"vod_actor": '',
|
||||
"vod_director":'',
|
||||
"vod_content": ''
|
||||
}
|
||||
urlList = root.xpath("//div[@class='liveshow']/a")
|
||||
playUrl = ''
|
||||
for url in urlList:
|
||||
name = url.xpath("./text()")[0]
|
||||
purl = url.xpath("./@data-url")[0]
|
||||
playUrl =playUrl + '{0}${1}#'.format(name, purl)
|
||||
vod['vod_play_from'] = '体育直播'
|
||||
vod['vod_play_url'] = playUrl
|
||||
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
|
||||
def searchContent(self,key,quick):
|
||||
result = {}
|
||||
return result
|
||||
|
||||
def playerContent(self,flag,id,vipFlags):
|
||||
result = {}
|
||||
url = id
|
||||
if '04stream' in url:
|
||||
rsp = self.fetch(url)
|
||||
html = rsp.text
|
||||
strList = re.findall(r"eval\((.*?)\);", html)
|
||||
fuctList = strList[1].split('+')
|
||||
scrpit = ''
|
||||
for fuc in fuctList:
|
||||
if fuc.endswith(')'):
|
||||
append = fuc.split(')')[-1]
|
||||
else:
|
||||
append = ''
|
||||
Unicode = int(self.regStr(reg=r'l\((.*?)\)', src=fuc))
|
||||
char = chr(Unicode % 256)
|
||||
char = char + append
|
||||
scrpit = scrpit + char
|
||||
par = self.regStr(reg=r'/(.*)/', src=scrpit).replace(')', '')
|
||||
pars = par.split('/')
|
||||
infoList = strList[2].split('+')
|
||||
str = ''
|
||||
for info in infoList:
|
||||
if info.startswith('O'):
|
||||
Unicode = int(int(self.regStr(reg=r'O\((.*?)\)', src=info)) / int(pars[0]) / int(pars[1]))
|
||||
char = chr(Unicode % 256)
|
||||
str = str + char
|
||||
url = self.regStr(reg=r"play_url=\'(.*?)\'", src=str)
|
||||
result["parse"] = 0
|
||||
else:
|
||||
url = id
|
||||
result["parse"] = 1
|
||||
result["playUrl"] = ''
|
||||
result["url"] = url
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {}
|
||||
}
|
||||
header = {}
|
||||
|
||||
def localProxy(self,param):
|
||||
action = {
|
||||
'url':'',
|
||||
'header':'',
|
||||
'param':'',
|
||||
'type':'string',
|
||||
'after':''
|
||||
}
|
||||
return [200, "video/MP2T", action, ""]
|
249
py/plugin/py_koudaiys.json
Normal file
249
py/plugin/py_koudaiys.json
Normal file
@ -0,0 +1,249 @@
|
||||
# coding=utf-8
|
||||
# !/usr/bin/python
|
||||
import sys
|
||||
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider
|
||||
import json
|
||||
import time
|
||||
import base64
|
||||
|
||||
|
||||
class Spider(Spider): # 元类 默认的元类 type
|
||||
def getName(self):
|
||||
return "口袋影视"
|
||||
|
||||
def init(self, extend=""):
|
||||
print("============{0}============".format(extend))
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def homeContent(self, filter):
|
||||
# http://www.koudaitv.com/
|
||||
result = {}
|
||||
cateManual = {
|
||||
"电影": "1",
|
||||
"连续剧": "2",
|
||||
"动漫": "4",
|
||||
"综艺": "3",
|
||||
"韩剧": "14",
|
||||
"美剧": "15"
|
||||
}
|
||||
classes = []
|
||||
for k in cateManual:
|
||||
classes.append({
|
||||
'type_name': k,
|
||||
'type_id': cateManual[k]
|
||||
})
|
||||
result['class'] = classes
|
||||
if (filter):
|
||||
result['filters'] = self.config['filter']
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
rsp = self.fetch("http://www.koudaitv.com/", headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
vodList = root.xpath("//div[@class='tbox2']/ul[@class='tbox_m2']/li[@class='vbox']/a")
|
||||
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
name = vod.xpath("./@title")[0]
|
||||
pic = vod.xpath("./@data-original")[0]
|
||||
mark = vod.xpath(".//span/text()")[0]
|
||||
sid = vod.xpath("./@href")[0]
|
||||
sid = self.regStr(sid, "/detail/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result = {
|
||||
'list': videos
|
||||
}
|
||||
return result
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
result = {}
|
||||
if 'id' not in extend.keys():
|
||||
extend['id'] = tid
|
||||
extend['page'] = pg
|
||||
filterParams = ["id", "area", "by", "class", "", "", "", "", "page", "", "", "year"]
|
||||
params = ["", "", "", "", "", "", "", "", "", "", "", ""]
|
||||
for idx in range(len(filterParams)):
|
||||
fp = filterParams[idx]
|
||||
if fp in extend.keys():
|
||||
params[idx] = extend[fp]
|
||||
suffix = '-'.join(params)
|
||||
url = 'http://www.koudaitv.com/type/{0}.html'.format(suffix)
|
||||
|
||||
rsp = self.fetch(url, headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
vodList = root.xpath("//div[@class='tbox2']/ul[@class='tbox_m2']/li[@class='vbox']/a")
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
name = vod.xpath("./@title")[0]
|
||||
pic = vod.xpath("./@data-original")[0]
|
||||
mark = vod.xpath(".//span/text()")[0]
|
||||
sid = vod.xpath("./@href")[0]
|
||||
sid = self.regStr(sid, "/detail/(\\S+).html")
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result['list'] = videos
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self, array):
|
||||
tid = array[0]
|
||||
url = 'http://www.koudaitv.com/detail/{0}.html'.format(tid)
|
||||
rsp = self.fetch(url, headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
node = root.xpath("//div[@class='data']")[0]
|
||||
title = node.xpath(".//h4/text()")[0]
|
||||
pic = root.xpath(".//div[@class='img item-lazy']/@data-original")[0]
|
||||
vod = {
|
||||
"vod_id": tid,
|
||||
"vod_name": title,
|
||||
"vod_pic": pic,
|
||||
"type_name": "",
|
||||
"vod_year": "",
|
||||
"vod_area": "",
|
||||
"vod_remarks": "",
|
||||
"vod_actor": "",
|
||||
"vod_director": "",
|
||||
"vod_content": ""
|
||||
}
|
||||
infoArray = node.xpath(".//div[@class='list_block show']")
|
||||
for info in infoArray:
|
||||
content = info.xpath('string(.)')
|
||||
# if content.startswith('分類'):
|
||||
# vod['type_name'] = content
|
||||
# if content.startswith('年份'):
|
||||
# vod['vod_year'] = content
|
||||
# if content.startswith('地区'):
|
||||
# vod['vod_area'] = content
|
||||
#if content.startswith('片长'):
|
||||
# vod['vod_remarks'] = content.replace('\n', '').replace('\t', '')
|
||||
if content.startswith('主演'):
|
||||
vod['vod_actor'] = content.replace('\n', '').replace('\t', '')
|
||||
if content.startswith('导演'):
|
||||
vod['vod_director'] = content.replace('\n', '').replace('\t', '')
|
||||
# if content.startswith('剧情'):
|
||||
# vod['vod_content'] = content.replace('\n','').replace('\t','')
|
||||
vod['vod_content'] = root.xpath(".//div[@class='tbox_js']/text()")[0]
|
||||
vod_play_from = '$$$'
|
||||
playFrom = []
|
||||
vodHeader = root.xpath(".//div[@class='tbox2 tabs']/div/h3/text()")
|
||||
|
||||
for v in vodHeader:
|
||||
playFrom.append(v.strip())
|
||||
vod_play_from = vod_play_from.join(playFrom)
|
||||
|
||||
vod_play_url = '$$$'
|
||||
playList = []
|
||||
vodList = root.xpath(".//div[@class='tbox2 tabs']/div[@class='tabs_block2']/ul/li")
|
||||
|
||||
for vl in vodList:
|
||||
vodItems = []
|
||||
aList = vl.xpath('./a')
|
||||
for tA in aList:
|
||||
href = tA.xpath('./@href')[0]
|
||||
name = tA.xpath('.//text()')[0]
|
||||
tId = self.regStr(href, '/play/(\\S+).html')
|
||||
vodItems.append(name + "$" + tId)
|
||||
joinStr = '#'
|
||||
joinStr = joinStr.join(vodItems)
|
||||
playList.append(joinStr)
|
||||
vod_play_url = vod_play_url.join(playList)
|
||||
|
||||
vod['vod_play_from'] = vod_play_from
|
||||
vod['vod_play_url'] = vod_play_url
|
||||
|
||||
result = {
|
||||
'list': [
|
||||
vod
|
||||
]
|
||||
}
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick):
|
||||
url = "http://www.koudaitv.com/index.php/ajax/suggest?mid=1&wd={0}".format(key)
|
||||
rsp = self.fetch(url, headers=self.header)
|
||||
jo = json.loads(rsp.text)
|
||||
vodList = jo['list']
|
||||
videos = []
|
||||
for vod in vodList:
|
||||
name = vod['name']
|
||||
pic = vod['pic']
|
||||
mark = ''
|
||||
sid = vod['id']
|
||||
videos.append({
|
||||
"vod_id": sid,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": mark
|
||||
})
|
||||
result = {
|
||||
'list': videos
|
||||
}
|
||||
return result
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
# https://meijuchong.cc/static/js/playerconfig.js
|
||||
result = {}
|
||||
url = 'http://www.koudaitv.com/play/{0}.html'.format(id)
|
||||
rsp = self.fetch(url, headers=self.header)
|
||||
root = self.html(rsp.text)
|
||||
scripts = root.xpath("//script/text()")
|
||||
jo = {}
|
||||
for script in scripts:
|
||||
if (script.startswith("var player_")):
|
||||
target = script[script.index('{'):]
|
||||
jo = json.loads(target)
|
||||
break;
|
||||
|
||||
parseUrl = 'https://play.shtpin.com/xplay/?url={0}'.format(jo['url'])
|
||||
parseRsp = self.fetch(parseUrl, headers={'referer': 'http://www.koudaitv.com/'})
|
||||
|
||||
configStr = self.regStr(parseRsp.text, 'var config = ({[\\s\\S]+})')
|
||||
configJo = json.loads(configStr)
|
||||
playUrl = 'https://play.shtpin.com/xplay/555tZ4pvzHE3BpiO838.php?tm={0}&url={1}&vkey={2}&token={3}&sign=F4penExTGogdt6U8'
|
||||
playUrl.format(time.time(), configJo['url'], configJo['vkey'], configJo['token'])
|
||||
playRsp = self.fetch(playUrl.format(time.time(), configJo['url'], configJo['vkey'], configJo['token'])
|
||||
, headers={'referer': 'http://www.koudaitv.com/'})
|
||||
playJo = json.loads(playRsp.text)
|
||||
b64 = playJo['url'][8:]
|
||||
targetUrl = base64.b64decode(b64)[8:-8].decode()
|
||||
|
||||
result["parse"] = 0
|
||||
result["playUrl"] = ''
|
||||
result["url"] = targetUrl
|
||||
result["header"] = ''
|
||||
return result
|
||||
|
||||
config = {
|
||||
"player": {},
|
||||
"filter": {"1":[{"key":"id","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作","v":"6"},{"n":"喜剧","v":"7"},{"n":"爱情","v":"8"},{"n":"科幻","v":"9"},{"n":"恐怖","v":"10"},{"n":"剧情","v":"11"},{"n":"战争","v":"12"},{"n":"动画","v":"23"}]},{"key":"class","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":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","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":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"2":[{"key":"id","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"纪 录片","v":"21"},{"n":"泰国剧","v":"24"}]},{"key":"class","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":"其他"}]},{"key":"area","name":"地区","value":[{"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":"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":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"4":[{"key":"class","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":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国","v":"中国"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"key":"class","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":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"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"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]}
|
||||
}
|
||||
|
||||
header = {
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
|
||||
}
|
||||
|
||||
def localProxy(self, param):
|
||||
return [200, "video/MP2T", action, ""]
|
105
py/plugin/py_kuaikan.json
Normal file
105
py/plugin/py_kuaikan.json
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user