提交 4ee0dc07 编写于 作者: H hjdhnx

菜狗源编写中,完成了一半了

上级 e909ef11
...@@ -13,7 +13,7 @@ from utils.system import getHost ...@@ -13,7 +13,7 @@ from utils.system import getHost
from utils.config import playerConfig from utils.config import playerConfig
from utils.log import logger from utils.log import logger
from utils.encode import base64Encode,baseDecode,fetch,post,request,getCryptoJS,getPreJs,buildUrl,getHome from utils.encode import base64Encode,baseDecode,fetch,post,request,getCryptoJS,getPreJs,buildUrl,getHome
from utils.encode import verifyCode,setDetail,join,urljoin2 from utils.encode import verifyCode,setDetail,join,urljoin2,parseText
from utils.safePython import safePython from utils.safePython import safePython
from utils.parser import runPy,runJScode,JsObjectWrapper from utils.parser import runPy,runJScode,JsObjectWrapper
from utils.htmlParser import jsoup from utils.htmlParser import jsoup
...@@ -463,7 +463,10 @@ class CMS: ...@@ -463,7 +463,10 @@ class CMS:
result['class'] = classes result['class'] = classes
if self.filter: if self.filter:
result['filters'] = playerConfig['filter'] if isinstance(self.filter,dict):
result['filters'] = self.filter
else:
result['filters'] = playerConfig['filter']
result.update(video_result) result.update(video_result)
# print(result) # print(result)
logger.info(f'{self.getName()}获取首页总耗时(包含读取缓存):{get_interval(t1)}毫秒') logger.info(f'{self.getName()}获取首页总耗时(包含读取缓存):{get_interval(t1)}毫秒')
...@@ -611,7 +614,23 @@ class CMS: ...@@ -611,7 +614,23 @@ class CMS:
# url = self.url + '/{0}.html'.format # url = self.url + '/{0}.html'.format
t1 = time() t1 = time()
pg = str(fypage) pg = str(fypage)
url = self.url.replace('fyclass',fyclass).replace('fypage',pg) url = self.url.replace('fyclass',fyclass)
if url.find('fypage') > -1:
if '(' in url and ')' in url:
# url_rep = url[url.find('('):url.find(')')+1]
# cnt_page = url.split('(')[1].split(')')[0].replace('fypage',pg)
# print(url_rep)
url_rep = re.search('.*?\((.*)\)',url,re.M|re.S).groups()[0]
cnt_page = url_rep.replace('fypage', pg)
# print(url_rep)
# print(cnt_page)
cnt_ctx = {}
exec(f'cnt_pg={cnt_page}', cnt_ctx)
cnt_pg = str(cnt_ctx['cnt_pg']) # 计算表达式的结果
url = url.replace(url_rep,str(cnt_pg)).replace('(','').replace(')','')
print(url)
else:
url = url.replace('fypage',pg)
if fypage == 1 and self.test('[\[\]]',url): if fypage == 1 and self.test('[\[\]]',url):
url = url.split('[')[1].split(']')[0] url = url.split('[')[1].split(']')[0]
p = self.一级 p = self.一级
...@@ -958,9 +977,10 @@ class CMS: ...@@ -958,9 +977,10 @@ class CMS:
loader, _ = runJScode(jscode, ctx=ctx) loader, _ = runJScode(jscode, ctx=ctx)
# print(loader.toString()) # print(loader.toString())
vods = loader.eval('VODS') vods = loader.eval('VODS')
# print(vods) # print(len(vods),type(vods))
if isinstance(vods, JsObjectWrapper): if isinstance(vods, JsObjectWrapper):
videos = vods.to_list() videos = vods.to_list()
# print(videos)
else: else:
p = p.split(';') p = p.split(';')
if len(p) < 5: if len(p) < 5:
......
var rule = {
title:'菜狗',
host:'https://waptv.sogou.com/',
homeUrl:'',
detailUrl:'https://node.video.%71%71.com/x/api/float_vinfo2?cid=fyid',
searchUrl:'https://v.sogou.com/v?query=**&typemask=6&p=&dp=&dr=&_asf=v.sogou.com&enter=1&ie=utf8',
searchable:1,
quickSearch:0,
// 分类链接fypage参数支持1个()表达式
url:'/napi/video/classlist?abtest=0&iploc=CN1304&spver=&listTab=fyclass&filter=&start=((fypage-1)*15)&len=15&fr=filter',
headers:{
'User-Agent':'MOBILE_UA'
},
timeout:5000,
class_name:'电视剧&电影&动漫&综艺&纪录片',
class_url:'teleplay&film&cartoon&tvshow&documentary',
filterable:1,
filter:{'teleplay': [{'key': 'style', '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': 'zone', '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': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'film': [{'key': 'style', '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': '其他'}]}, {'key': 'zone', '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': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'cartoon': [{'key': 'style', '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': '其他'}]}, {'key': 'zone', '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': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'tvshow': [{'key': 'style', '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': 'zone', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': '内地'}, {'n': '台湾', 'v': '台湾'}, {'n': '日韩', 'v': '日韩'}, {'n': '欧美', 'v': '欧美'}, {'n': '其他', 'v': '其他'}]}, {'key': 'emcee', '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': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}], 'documentary': [{'key': 'style', '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': 'zone', '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': '更早', 'v': '更早'}]}, {'key': 'fee', 'name': '资源', 'value': [{'n': '全部', 'v': ''}, {'n': '正片', 'v': '正片'}, {'n': '免费正片', 'v': '免费正片'}, {'n': '付费正片', 'v': '付费正片'}]}, {'key': 'order', 'name': '排序', 'value': [{'n': '全部', 'v': ''}, {'n': '最新', 'v': '最新'}, {'n': '好评', 'v': '好评'}]}]},
limit:20,
// play_parse:true,
// 手动调用解析请求json的url,此lazy不方便
lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input',
// 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
// 一级:'json:.listData.results;name;v_picurl;ipad_play_for_list.episode||score||date;url',
一级:'js:let d=[];let html=request(input);html=JSON.parse(html);let list=html.listData.results;list.forEach(function(it){let desc1=it.ipad_play_for_list.finish_episode?it.ipad_play_for_list.episode===it.ipad_play_for_list.finish_episode?"全集"+it.ipad_play_for_list.finish_episode:"连载"+it.ipad_play_for_list.episode+"/"+it.ipad_play_for_list.finish_episode:"";let desc2=it.score?"评分:"+it.score:"";let desc3=it.date?"更至:"+it.date:"";d.push({title:it.name,img:it.v_picurl,url:"https://v.sogou.com"+it.url.replace("teleplay","series").replace("cartoon","series"),desc:desc1||desc2||desc3})});setResult(d);',
// 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"},
// 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites","lists":"data.playlinksdetail.#idv.default_url"},
二级:'',
二级:'js:var vod={};let d=[];let video_list=[];let video_lists=[];let list=[];let html=fetch(input,fetch_params);let sourceId=/get_playsource/.test(input)?input.match(/id=(\\d*?)&/)[1]:input.split("cid=")[1];let cid=sourceId;let detailUrl="https://v.%71%71.com/detail/m/"+cid+".html";log("详情页:"+detailUrl);var pdfh=jsp.pdfh;var pd=jsp.pd;try{let json=JSON.parse(html);vod={vod_id:json.c.vid,vod_url:input,vod_name:json.c.title,type_name:json.typ.join(","),vod_actor:json.nam.join(","),vod_year:json.c.year,vod_content:json.c.description,vod_remarks:json.rec,vod_pic:urljoin2(input,json.c.pic)}}catch(e){log("解析片名海报等基础信息发生错误:"+e.message)}if(/get_playsource/.test(input)){eval(html);let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+sourceId+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else{let json=JSON.parse(html);video_lists=json.c.video_ids;let url="https://v.qq.com/x/cover/"+sourceId+".html";if(json.c.type===10){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=2&data_type=3&video_type=8&plname=qq&otype=json";let o_html=fetch(dataUrl,fetch_params);eval(o_html);video_lists=[];let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else if(video_lists.length===1){d.push({title:"在线播放",url:url})}else if(video_lists.length>1){for(let i=0;i<video_lists.length;i+=30){video_list.push(video_lists.slice(i,i+30))}video_list.forEach(function(it,idex){let o_url="https://union.video.qq.com/fcgi-bin/data?otype=json&tid=682&appid=20001238&appkey=6c03bbe9658448a4&union_platform=1&idlist="+it.join(",");let o_html=fetch(o_url,fetch_params);eval(o_html);QZOutputJson.results.forEach(function(it1){it1=it1.fields;let url="https://v.qq.com/x/cover/"+cid+"/"+it1.vid+".html";d.push({title:it1.title,pic_url:it1.pic160x90.replace("/160",""),desc:it1.video_checkup_time,url:url})})})}}vod.vod_play_from="qq";vod.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");',
搜索:'',
搜索:'js:let d=[];let html=request(input);let jsonA=JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]).result.longVideo.results;jsonA.forEach(function(it){let name=it.name;let introduction=it.introduction;let pic=it.v_picurl;let url=it.tiny_url;let zone=it.zone;let score=it.score||"暂无";let style=it.style;if(it.play.item_list){let r={};r.title=name.replace(//,"").replace(//,"");r.url="https://v.sogou.com"+url;r.desc=it.list_category.join(",");r.content=introduction;r.pic_url=pic;d.push(r)}});setResult(d);',
}
\ No newline at end of file
js: var res = {};
var d = [];
var html = getResCode();
var jsUrl = fetch('hiker://files/cache/MyParseSet.json');
if (jsUrl == '' || !fetch(JSON.parse(jsUrl).cj)) {
var jsFile = fetch('https://gitee.com/Duan-Nian/Dn/raw/master/hikerview/CloudParse-V2_Dn.js');
} else {
var jsFile = fetch(JSON.parse(jsUrl).cj);
}
eval(jsFile);
if (getVar("解析列表") == "") {
setParse();
}
var easy = `@lazyRule=.js:try{var input=fetch(input,{}).split("('")[1].split("',")[0];if(input.match(/ixigua|iqiyi|qq.com|mgtv|le.com|bili|sohu|youku|pptv|cctv|1905.com/)){var input=input.split("?")[0];{input;`+lazy+`}}else if(input.match(/huanxi/)){var input=input.split("&")[0];{input;`+lazy+`}}else if(input.match(/migu/)){var input=input.replace(/\\?.*cid/,'?cid').replace(/http/,'https').split("&")[0];{input;`+lazy+`}}else{input;`+lazy+`}}catch(e){input}`;
var Rule = MY_URL+`@rule=js:var res={};var d=[];var html=getResCode();var get=parseDomForHtml(html, 'body&&.srch-result-info&&Html');for(let i = 0;;i++){try{d.push({title:parseDomForHtml(get, 'div,' +i+ '&&Html'),col_type: 'rich_text'});d.push({col_type: 'line'});}catch(e){break;}};res.data=d;setHomeResult(res);`;
try {
var json = JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]).detail.itemData;
var key = json.dockey;
var name = json.name;
var zone = json.zone;
var score = json.score ? json.score: '暂无';
var style = json.style;
var emcee = json.emcee ? '主持:' + json.emcee: json.name;
var director = json.director ? '导演:' + json.director: name;
var starring = json.starring ? '演员:' + json.starring: '声优:' + json.shengyou;
var update = json.update_wordstr ? json.update_wordstr: '';
var tv_station = json.tv_station ? json.tv_station: zone;
var introduction = json.introduction;
var shengyou = json.shengyou;
var shows = json.play_from_open_index;
var plays = json.play.item_list;
if (shows) {
d.push({
title: emcee + '\n' + tv_station,
desc: style + ' 评分:' + score + '\n' + update,
pic_url: parseDom(html, '#thumb_img&&img&&src'),
url: set_switch,
col_type: 'movie_1_vertical_pic_blur'
});
} else {
d.push({
title: director.replace(/;/g, '\t') + '\n' + starring.replace(/.*undefined/, '').replace(/;/g, '\t'),
desc: style + ' 评分:' + score + '\n' + update,
pic_url: parseDom(html, '#thumb_img&&img&&src'),
url: set_switch,
col_type: 'movie_1_vertical_pic_blur'
});
}
d.push({
title: "剧情",
url: Rule,
pic_url:'https://s1.ax1x.com/2020/11/09/BT6WIe.png',
col_type: 'icon_small_3'
});
d.push({
title: "资源网",
url: 'hiker://search?s=' + name + '&rule=资源网采集.xyq',
pic_url:'https://s3.ax1x.com/2020/11/23/DGW0de.png',
col_type: 'icon_small_3'
});
d.push({
title: "剧照",
url: MY_URL+`@rule=js:var res={};var d=[];var html=getResCode();try{var tabs=parseDomForArray(html, '#photoList&&.sort_lst_bx&&a');for(var i in tabs){d.push({pic_url: parseDomForHtml(tabs[i], 'img&&data-src'),url: parseDomForHtml(tabs[i], 'img&&data-src'),col_type: 'pic_1_full'});d.push({col_type: 'line'});}}catch(e){};res.data=d;setHomeResult(res);`,
pic_url:'https://s1.ax1x.com/2020/11/09/BT6cqK.png',
col_type: 'icon_small_3'
});
d.push({
col_type: "line"
});
try {
var tabs = [];
var lists = [];
for (var i in plays) {
lists.push(plays[i].info)
tabs.push(plays[i].sitename[0])
}
function setTabs(tabs, vari) {
if (plays[i].info || shows) {
d.push({
title: (getVar('shsort') == ' - 逆序') ? '““””<b><span style="color: #FF0000">∨</span></b>': '““””<b><span style="color: #1aad19">∧</span></b>',
url: `#noLoading#@lazyRule=.js:let conf = getVar('shsort');if(conf==' - 逆序'){putVar({key:'shsort', value:' - 正序'});}else{putVar({key:'shsort', value:' - 逆序'})};refreshPage(false);'toast://切换排序成功';'#noHistory#hiker://empty'`,
col_type: 'flex_button'
}) ;
for (var o in tabs) {
var url = "#noLoading#@lazyRule=.js:putVar('" + vari + "', '" + o + "');refreshPage(false);'toast://切换成功!';'#noHistory#hiker://empty'";
d.push({
title: getVar(vari, '0') == o ? '‘‘' + tabs[o] + '’’': tabs[o],
url: url,
col_type: 'flex_button'
})
}
d.push({
col_type: "line"
})
} else {
d.push({
col_type: "blank_block"
})
}
}
function setLists(lists, index) {
if (plays[i].info || shows) {
var list = lists[index];
if (list) {
if (getVar('shsort') == ' - 逆序') {
for (var j = list.length - 1; j >= 0; j--) {
if (!list[j].index == '0') {
d.push({
title: list[j].index,
url: 'https://v.sogou.com' + list[j].url + easy,
col_type: "text_4"
});
}
}
} else {
for (var j = 0; j < list.length; j++) {
if (!list[j].index == '0') {
d.push({
title: list[j].index,
url: 'https://v.sogou.com' + list[j].url + easy,
col_type: "text_4"
});
}
}
}
}
if (shows) {
var arr = [];
zy = shows.item_list[index];
for (var ii in zy.date) {
date = zy.date[ii];
day = zy.date[ii].day;
for (j in day) {
dayy = day[j][0] >= 10 ? day[j][0] : "0" + day[j][0];
Tdate = date.year + date.month + dayy;
arr.push(Tdate);
if (getVar('shsort') == ' - 逆序') {
arr.sort(function(a, b) {
return b - a
})
} else {
arr.sort(function(a, b) {
return a - b
})
}
}
}
for (var k = 0; k < arr.length; k++) {
url = "https://v.sogou.com/vc/eplay?query=" + arr[k] + "&date=" + arr[k] + "&key=" + json.dockey + "&st=5&tvsite=" + plays[index].site;
d.push({
title: "" + arr[k] + "",
col_type: "text_2",
url: url + easy
});
}
}
} else if (plays[index].site) {
for (var m in plays) {
if (plays[m].flag_list.indexOf('trailer') == -1) {
d.push({
title: plays[m].sitename[0],
img: plays[m].picurl || 'http://dlweb.sogoucdn.com/video/wap/static/img/logo/' + plays[m].sitename[1],
url: 'https://v.sogou.com' + plays[m].url + easy,
col_type: !plays[m].picurl ? "icon_2": "movie_2"
})
} else {
d.push({
url: "https://v.sogou.com" + plays[m].url + easy,
img: plays[m].picurl || 'http://dlweb.sogoucdn.com/video/wap/static/img/logo/' + plays[m].sitename[1],
title: plays[m].sitename[0] + '—预告',
col_type: !plays[m].picurl ? "icon_2": "movie_2"
});
}
}
}
}
setTabs(tabs, MY_URL);
setLists(lists, getVar(MY_URL, '0'));
} catch(e) {
var img = json.photo.item_list;
d.push({
title: '‘‘本片无选集’’',
col_type: "text_center_1"
});
for (var i in img) {
d.push({
img: img[i],
col_type: "pic_1_full"
})
}
}
} catch(e) {}
res.data = d;
setHomeResult(res);
\ No newline at end of file
js:
let d=[];
let html = request(input);
let jsonA = JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]).result.longVideo.results;
jsonA.forEach(function (it){
let name=it.name;
let introduction=it.introduction;
let pic= it.v_picurl;
let url= it.tiny_url;
let zone=it.zone;
let score=it.score||'暂无';
let style=it.style;
if(it.play.item_list){
let r = {};
r.title = name.replace(//,'').replace(//,'');
r.url= 'https://v.sogou.com'+url;
r.desc = it.list_category.join(',');
r.content= introduction;
r.pic_url= pic;
d.push(r);
}
});
// print(d);
setResult(d);
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : 搜狗筛选.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/11
import requests
from pprint import pprint
cates = 'teleplay&film&cartoon&tvshow&documentary'.split('&')
urls = [f'https://waptv.sogou.com/napi/video/classlist?abtest=0&iploc=CN1304&spver=&listTab={cate}&filter=&start=0&len=15&fr=filter' for cate in cates]
print(urls)
headers = {'user-agent':'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'}
ft_dict = {}
def getOne(url):
r = requests.get(url, headers=headers)
html = r.json()
filters = html['listData']['list']['filter_list']
cate_id = html['listData']['list']['entity']
ft_dict[cate_id] = []
for i in range(len(filters)):
ft = filters[i]
value = [{"n":"全部","v":""}]
vl = [{"n":i,"v":i} for i in ft['option_list']]
value.extend(vl)
ft_dict[cate_id].append({
'key':ft['option_name'],
'name':ft['name'],
'value':value
})
return ft_dict
# print(ft_dict)
for url in urls:
# print(getOne(urls[0]))
# print(getOne(url))
getOne(url)
print(ft_dict)
\ No newline at end of file
js:
let d = [];
let html = request(input);
html = JSON.parse(html);
let list = html.listData.results;
list.forEach(function (it){
let desc1 = it.ipad_play_for_list.finish_episode?it.ipad_play_for_list.episode===it.ipad_play_for_list.finish_episode?"全集"+it.ipad_play_for_list.finish_episode:"连载"+it.ipad_play_for_list.episode+"/"+it.ipad_play_for_list.finish_episode:"";
let desc2 = it.score?'评分:'+it.score:'';
let desc3 = it.date?'更至:'+it.date:'';
d.push({
title: it.name,
img: it.v_picurl,
url: "https://v.sogou.com" + it.url.replace('teleplay', 'series').replace('cartoon', 'series'),
desc: desc1||desc2||desc3,
});
});
setResult(d);
\ No newline at end of file
...@@ -201,6 +201,7 @@ var rule = { ...@@ -201,6 +201,7 @@ var rule = {
searchable:0,//是否启用全局搜索, searchable:0,//是否启用全局搜索,
quickSearch:0,//是否启用快速搜索, quickSearch:0,//是否启用快速搜索,
filterable:0,//是否启用筛选, filterable:0,//是否启用筛选,
filter:{},// 筛选条件字典
// 注意,由于猫有配置缓存,搜索配置没法热加载,修改了js不需要重启服务器 // 注意,由于猫有配置缓存,搜索配置没法热加载,修改了js不需要重启服务器
// 但是需要tv_box进设置里换源使配置重新装载 // 但是需要tv_box进设置里换源使配置重新装载
headers:{//网站的请求头,完整支持所有的,常带ua和cookies headers:{//网站的请求头,完整支持所有的,常带ua和cookies
......
...@@ -31,6 +31,7 @@ class jsoup: ...@@ -31,6 +31,7 @@ class jsoup:
parse = ' '.join([i if self.test(':eq|:lt|:gt|#',i) else f'{i}:eq(0)' for i in parse]) parse = ' '.join([i if self.test(':eq|:lt|:gt|#',i) else f'{i}:eq(0)' for i in parse])
else: else:
parse = parse[0] if self.test(':eq|:lt|:gt|#',parse[0]) else f'{parse[0]}:eq(0)' parse = parse[0] if self.test(':eq|:lt|:gt|#',parse[0]) else f'{parse[0]}:eq(0)'
# FIXME 暂时不支持jsonpath那样的|| 分割取或属性
if option: if option:
# print(f'parse:{parse}=>(option:{option})') # print(f'parse:{parse}=>(option:{option})')
ret = doc(parse) ret = doc(parse)
...@@ -89,13 +90,17 @@ class jsoup: ...@@ -89,13 +90,17 @@ class jsoup:
return '' return ''
if not parse.startswith('$.'): if not parse.startswith('$.'):
parse = f'$.{parse}' parse = f'$.{parse}'
ret = jsonpath(html,parse) ret = ''
if isinstance(ret,list): for ps in parse.split('||'):
ret = str(ret[0]) if ret[0] else '' ret = jsonpath(html,ps)
else: if isinstance(ret,list):
ret = str(ret) if ret else '' ret = str(ret[0]) if ret[0] else ''
if add_url: else:
ret = urljoin(self.MY_URL, ret) ret = str(ret) if ret else ''
if add_url and ret:
ret = urljoin(self.MY_URL, ret)
if ret:
break
return ret return ret
def pj(self, html, parse:str): def pj(self, html, parse:str):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册