diff --git a/plugin/0.jar b/plugin/0.jar new file mode 100644 index 0000000..daabb78 Binary files /dev/null and b/plugin/0.jar differ diff --git a/plugin/pluto.json b/plugin/pluto.json new file mode 100644 index 0000000..9a8250c --- /dev/null +++ b/plugin/pluto.json @@ -0,0 +1,687 @@ +{ + "spider" : "./0.jar", + "lives" : [ + { + "group" : "redirect", + "channels" : [ + { + "name" : "live", + "urls" : [ + "proxy://do=live&type=txt&ext=clan://live.txt"] + }] + }], + "sites" : [ + { + "key" : "py_kuaikan", + "name" : "快看", + "type" : 3, + "api" : "py_kuaikan", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_kuaikan.py" + }, + { + "key" : "py_alist", + "name" : " 🦂Alist", + "type" : 3, + "api" : "py_alist", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_alist.py" + }, + { + "key" : "py_lezhu", + "name" : "乐猪", + "type" : 3, + "api" : "py_lezhu", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_lezhu.py" + }, + { + "key" : "py_3qu", + "name" : "3QU", + "type" : 3, + "api" : "py_3qu", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_3qu.py" + }, + { + "key" : "py_cyys", + "name" : "创艺", + "type" : 3, + "api" : "py_cyys", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_cyys.py" + }, + { + "key" : "py_wmkk", + "name" : "完美看看(半残)", + "type" : 3, + "api" : "py_wmkk", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_wmkk.py" + }, + { + "key" : "py_cup", + "name" : "茶杯", + "type" : 3, + "api" : "py_cup", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_cup.py" + }, + { + "key" : "py_star", + "name" : "星光", + "type" : 3, + "api" : "py_star", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_star.py" + }, + { + "key" : "py_bilibili", + "name" : "哔哩", + "type" : 3, + "api" : "py_bilibili", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_bilibili.py" + }, + { + "key" : "py_bilivd", + "name" : "B站(带搜索)", + "type" : 3, + "api" : "py_bilivd", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_bilivd.py" + }, + { + "key" : "py_cctv", + "name" : "央视", + "type" : 3, + "api" : "py_cctv", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_cctv.py" + }, + { + "key" : "py_czspp", + "name" : "厂长", + "type" : 3, + "api" : "py_czspp", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_czspp.py" + }, + { + "key" : "py_zxzj", + "name" : "在线之家", + "type" : 3, + "api" : "py_zxzj", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_zxzj.py" + }, + { + "key" : "py_voflix", + "name" : "Voflix", + "type" : 3, + "api" : "py_voflix", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_voflix.py" + }, + { + "key" : "py_bilimd", + "name" : "B站影视", + "type" : 3, + "api" : "py_bilimd", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_bilimd.py" + }, + { + "key" : "py_gimytv", + "name" : "剧迷", + "type" : 3, + "api" : "py_gimytv", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_gimytv.py" + }, + { + "key" : "py_genmov", + "name" : "跟剧", + "type" : 3, + "api" : "py_genmov", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_genmov.py" + }, + { + "key" : "py_huya", + "name" : "虎牙", + "type" : 3, + "api" : "py_huya", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_huya.py" + }, + { + "key" : "py_douyu", + "name" : "斗鱼", + "type" : 3, + "api" : "py_douyu", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 1, + "ext" : "clan://plugin/py_douyu.py" + }, + { + "key" : "py_cokemv", + "name" : "COKE", + "type" : 3, + "api" : "py_cokemv", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_cokemv.py" + }, + { + "key" : "py_xmaomi", + "name" : "猫咪", + "type" : 3, + "api" : "py_xmaomi", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 1, + "ext" : "clan://plugin/py_xmaomi.py" + }, + { + "key" : "py_gitcafe", + "name" : "小纸条", + "type" : 3, + "api" : "py_gitcafe", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 0, + "ext" : "clan://plugin/py_gitcafe.py" + }, + { + "key" : "py_zhaozy", + "name" : "找资源", + "type" : 3, + "api" : "py_zhaozy", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 0, + "ext" : "clan://plugin/py_zhaozy.py" + }, + { + "key" : "py_yiso", + "name" : "易搜", + "type" : 3, + "api" : "py_yiso", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 0, + "ext" : "clan://plugin/py_yiso.py" + }, + { + "key" : "py_pansou", + "name" : "盘搜", + "type" : 3, + "api" : "py_pansou", + "searchable" : 1, + "quickSearch" : 1, + "filterable" : 0, + "ext" : "clan://plugin/py_pansou.py" + }, + { + "key" : "push_agent", + "name" : "阿里", + "type" : 3, + "api" : "py_ali", + "searchable" : 0, + "quickSearch" : 0, + "filterable" : 0, + "ext" : "clan://plugin/py_ali.py" + }], + "parses" : [ + { + "name" : "解析聚合", + "type" : 3, + "url" : "Demo" + }, + { + "name" : "Json并发", + "type" : 2, + "url" : "Parallel" + }, + { + "name" : "Json轮询", + "type" : 2, + "url" : "Sequence" + }, + { + "name" : "网络搜集02", + "type" : 1, + "url" : "https://json.pangujiexi.com/json.php?url=", + "ext" : { + "flag" : [ + "youku", + "优酷", + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺"] + } + }, + { + "name" : "网络搜集03", + "type" : 1, + "url" : "https://vip.aiaine.com/api/?key=8FN8gNAySnvJiMllxZ&url=", + "ext" : { + "flag" : [ + "Itnb", + "wuduzy"] + } + }, + { + "name" : "网络搜集04", + "type" : 1, + "url" : "http://api.vip123kan.vip/?url=", + "ext" : { + "flag" : [ + "youku", + "优酷", + "mgtv", + "芒果", + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "qq", + "xigua", + "奇艺"] + } + }, + { + "name" : "网络搜集05", + "type" : 1, + "url" : "https://a.dxzj88.com/jxrrm/jiami.php?url=", + "ext" : { + "flag" : [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "芒果", + "mgtv", + "xigua", + "wuduzy", + "bilibili", + "pptv", + "leduo", + "Clk4", + "哔哩", + "renrenmi", + "ltnb", + "rx"] + } + }, + { + "name" : "网络搜集06", + "type" : 1, + "url" : "https://sz.dxzj88.com/jxrjrm/jiaomi.php?url=", + "ext" : { + "flag" : [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "芒果", + "mgtv", + "xigua", + "wuduzy", + "bilibili", + "pptv", + "leduo", + "Clk4", + "哔哩", + "renrenmi", + "ltnb", + "rx"] + } + }, + { + "name" : "网络搜集07", + "type" : 1, + "url" : "https://vip.aiaine.com/api/?key=8FN8gNAySnvJiMllxZ&url=", + "ext" : { + "flag" : [ + "ltnb"] + } + }, + { + "name" : "网络搜集08", + "type" : 1, + "url" : "https://svip.rongxingvr.top/api/?key=niBgMGXVdCQhsmeEBK&url=", + "ext" : { + "flag" : [ + "youku", + "qq", + "mgtv", + "bilibili", + "wasu", + "xigua", + "renrenmi", + "优酷", + "芒果"] + } + }, + { + "name" : "网络搜集10", + "type" : 1, + "url" : "https://json.5lp.net/json.php?url=", + "ext" : { + "flag" : [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "mgtv", + "芒果", + "renrenmi", + "Itnb"] + } + }], + "flags" : [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "letv", + "tudou", + "pptv", + "mgtv", + "wasu", + "bilibili", + "leduo", + "fq3", + "fq4", + "xueren", + "duoduo", + "duoduozy", + "miaoparty", + "miaoparty2", + "miaoparty3", + "renrenmi", + "优酷", + "芒果", + "腾讯", + "爱奇艺", + "奇艺", + "ltnb", + "rx", + "CL4K", + "xfyun", + "wuduzy"], + "ijk" : [ + { + "group" : "软解码", + "options" : [ + { + "category" : 4, + "name" : "opensles", + "value" : "0" + }, + { + "category" : 4, + "name" : "overlay-format", + "value" : "842225234" + }, + { + "category" : 4, + "name" : "framedrop", + "value" : "1" + }, + { + "category" : 4, + "name" : "soundtouch", + "value" : "1" + }, + { + "category" : 4, + "name" : "start-on-prepared", + "value" : "1" + }, + { + "category" : 1, + "name" : "http-detect-range-support", + "value" : "0" + }, + { + "category" : 1, + "name" : "fflags", + "value" : "fastseek" + }, + { + "category" : 2, + "name" : "skip_loop_filter", + "value" : "48" + }, + { + "category" : 4, + "name" : "reconnect", + "value" : "1" + }, + { + "category" : 4, + "name" : "enable-accurate-seek", + "value" : "0" + }, + { + "category" : 4, + "name" : "mediacodec", + "value" : "0" + }, + { + "category" : 4, + "name" : "mediacodec-auto-rotate", + "value" : "0" + }, + { + "category" : 4, + "name" : "mediacodec-handle-resolution-change", + "value" : "0" + }, + { + "category" : 4, + "name" : "mediacodec-hevc", + "value" : "0" + }, + { + "category" : 1, + "name" : "dns_cache_timeout", + "value" : "600000000" + }] + }, + { + "group" : "硬解码", + "options" : [ + { + "category" : 4, + "name" : "opensles", + "value" : "0" + }, + { + "category" : 4, + "name" : "overlay-format", + "value" : "842225234" + }, + { + "category" : 4, + "name" : "framedrop", + "value" : "1" + }, + { + "category" : 4, + "name" : "soundtouch", + "value" : "1" + }, + { + "category" : 4, + "name" : "start-on-prepared", + "value" : "1" + }, + { + "category" : 1, + "name" : "http-detect-range-support", + "value" : "0" + }, + { + "category" : 1, + "name" : "fflags", + "value" : "fastseek" + }, + { + "category" : 2, + "name" : "skip_loop_filter", + "value" : "48" + }, + { + "category" : 4, + "name" : "reconnect", + "value" : "1" + }, + { + "category" : 4, + "name" : "enable-accurate-seek", + "value" : "0" + }, + { + "category" : 4, + "name" : "mediacodec", + "value" : "1" + }, + { + "category" : 4, + "name" : "mediacodec-auto-rotate", + "value" : "1" + }, + { + "category" : 4, + "name" : "mediacodec-handle-resolution-change", + "value" : "1" + }, + { + "category" : 4, + "name" : "mediacodec-hevc", + "value" : "1" + }, + { + "category" : 1, + "name" : "dns_cache_timeout", + "value" : "600000000" + }] + }], + "ads" : [ + "mimg.0c1q0l.cn", + "www.googletagmanager.com", + "www.google-analytics.com", + "mc.usihnbcq.cn", + "mg.g1mm3d.cn", + "mscs.svaeuzh.cn", + "cnzz.hhttm.top", + "tp.vinuxhome.com", + "cnzz.mmstat.com", + "www.baihuillq.com", + "s23.cnzz.com", + "z3.cnzz.com", + "c.cnzz.com", + "stj.v1vo.top", + "z12.cnzz.com", + "img.mosflower.cn", + "tips.gamevvip.com", + "ehwe.yhdtns.com", + "xdn.cqqc3.com", + "www.jixunkyy.cn", + "sp.chemacid.cn", + "hm.baidu.com", + "s9.cnzz.com", + "z6.cnzz.com", + "um.cavuc.com", + "mav.mavuz.com", + "wofwk.aoidf3.com", + "z5.cnzz.com", + "xc.hubeijieshikj.cn", + "tj.tianwenhu.com", + "xg.gars57.cn", + "k.jinxiuzhilv.com", + "cdn.bootcss.com", + "ppl.xunzhuo123.com", + "xomk.jiangjunmh.top", + "img.xunzhuo123.com", + "z1.cnzz.com", + "s13.cnzz.com", + "xg.huataisangao.cn", + "z7.cnzz.com", + "xg.huataisangao.cn", + "z2.cnzz.com", + "s96.cnzz.com", + "q11.cnzz.com", + "thy.dacedsfa.cn", + "xg.whsbpw.cn", + "s19.cnzz.com", + "z8.cnzz.com", + "s4.cnzz.com", + "f5w.as12df.top", + "ae01.alicdn.com", + "www.92424.cn", + "k.wudejia.com", + "vivovip.mmszxc.top", + "qiu.xixiqiu.com", + "cdnjs.hnfenxun.com", + "cms.qdwght.com"], + "wallpaper" : "https://picsum.photos/1080", + "spider" : "" +} \ No newline at end of file diff --git a/plugin/py_3qu.py b/plugin/py_3qu.py new file mode 100644 index 0000000..a897313 --- /dev/null +++ b/plugin/py_3qu.py @@ -0,0 +1,191 @@ +# coding=utf-8 +# !/usr/bin/python +import sys +import re +sys.path.append('..') +from base.spider import Spider +import urllib.parse +import json + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "快播影视" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "movie", + "剧集": "serie", + "综艺": "variety", + "动漫": "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): + result = { + 'list': [] + } + return result + + def categoryContent(self, tid, pg, filter, extend): + 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"} + url = 'https://www.3qu.live/videos/{0}?page={1}'.format(tid, pg) + rsp = self.fetch(url,headers=header) + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//div[@class='main-content-box']/div/div/div/div/div/div/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + picl = a.xpath('./@style')[0] + pica = re.findall(r"url\(\'(.*)\'\);", picl)[0] + pic = 'https://www.3qu.live{0}'.format(pica) + sidh = a.xpath("./@href")[0] + sid = self.regStr(sidh,'/videos/(\\S+).html') + videos.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": "" + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 100 + result['total'] = 99999 + return result + + def detailContent(self, array): + tid = array[0] + url = 'https://www.3qu.live/videos/{0}.html'.format(tid) + 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"} + rsp = self.fetch(url,headers=header) + root = self.html(self.cleanText(rsp.text)) + divContent = root.xpath("//div[@class='video-detail row']")[0] + title = divContent.xpath(".//div[@class='info-box']/a/h1/text()")[0] + pica = divContent.xpath(".//div[@class='thumb-box']/img/@src")[0] + pic = 'https://www.3qu.live{0}'.format(pica) + 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 = divContent.xpath(".//div[@class='info-box']/ul/li") + for info in infoArray: + content = info.xpath('string(.)') + flag = "类型" in content + if flag == True: + infon = content.strip().split(' ') + 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_remarks'] = inf.replace("语言:", "") + if content.startswith('演员'): + vod['vod_actor'] = content.replace("演员:", "") + if content.startswith('年份'): + yearl = content.split(' ') + year = yearl[0].replace("年份:", "") + vod['vod_year'] = year + if content.startswith('导演'): + vod['vod_director'] = content.replace("导演:", "") + if content.startswith('简介'): + vod['vod_content'] = content.replace("简介:", "") + vodList = root.xpath(".//div[@class='tab-content']/div[@id='playlist']/a") + playUrl = '' + for vl in vodList: + name = vl.xpath("./text()")[0] + did = vl.xpath("./@data-id")[0] + playUrl = playUrl + '{0}${1}_{2}#'.format(name,tid,did) + vod['vod_play_from'] = '快播影视' + vod['vod_play_url'] = playUrl + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + 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"} + url = 'https://www.3qu.live/api/v1/search?page=1&q={0}&type=all&period=0'.format(key) + rsp = self.fetch(url, headers=header) + jRoot = json.loads(rsp.text) + videos = [] + vodList = jRoot['data']['videos'] + for vod in vodList: + id = vod['id'] + title = vod['name'] + img = vod['coverURL'] + pic = 'https://www.3qu.live{0}'.format(img) + videos.append({ + "vod_id": id, + "vod_name": title, + "vod_pic": pic, + "vod_remarks": "" + }) + result = { + 'list': videos + } + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + ids = id.split("_") + 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"} + url = 'https://www.3qu.live/api/v1/videos/{0}/{1}/playUrl'.format(ids[0],ids[1]) + rsp = self.fetch(url,headers=header) + jRoot = json.loads(rsp.text) + apiurl = jRoot['data']['url'] + url = 'https://www.3qu.live{0}'.format(apiurl) + result["parse"] = 0 + result["playUrl"] = '' + result["url"] =url + 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, ""] \ No newline at end of file diff --git a/plugin/py_ali.py b/plugin/py_ali.py new file mode 100644 index 0000000..1c93b17 --- /dev/null +++ b/plugin/py_ali.py @@ -0,0 +1,405 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import requests +import time +import re + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "阿里云盘" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + def searchContent(self,key,quick): + result = {} + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def playerContent(self,flag,id,vipFlags): + if flag == 'AliYun': + return self.originContent(flag,id,vipFlags) + elif flag == 'AliYun原画': + return self.fhdContent(flag,id,vipFlags) + else: + return {} + def fhdContent(self,flag,id,vipFlags): + self.login() + ids = id.split('+') + shareId = ids[0] + shareToken = ids[1] + fileId = ids[2] + category = ids[3] + url = self.getDownloadUrl(shareId,shareToken,fileId,category) + print(url) + + noRsp = requests.get(url,headers=self.header, allow_redirects=False,verify = False) + realUrl = '' + if 'Location' in noRsp.headers: + realUrl = noRsp.headers['Location'] + if 'location' in noRsp.headers and len(realUrl) == 0 : + realUrl = noRsp.headers['location'] + newHeader = { + "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", + "referer":"https://www.aliyundrive.com/", + } + result = { + 'parse':'0', + 'playUrl':'', + 'url':realUrl, + 'header':newHeader + } + return result + def originContent(self,flag,id,vipFlags): + self.login() + ids = id.split('+') + shareId = ids[0] + shareToken = ids[1] + fileId = ids[2] + url = '{0}?do=push_agent&api=python&type=m3u8&share_id={1}&file_id={2}'.format(self.localProxyUrl,shareId,fileId) + + result = { + 'parse':'0', + 'playUrl':'', + 'url':url, + 'header':'' + } + + # shareToken = self.getToken(shareId,'') + # self.getMediaSlice(shareId,shareToken,fileId) + + + # map = { + # 'share_id':'p1GJYEqgeb2', + # 'file_id':'62ed1b95b1048d60ffc246669f5e0999e90b8c2f', + # 'media_id':'1' + # } + + # self.proxyMedia(map) + + return result + + def detailContent(self,array): + tid = array[0] + # shareId = self.regStr(href,'www.aliyundrive.com\\/s\\/([^\\/]+)(\\/folder\\/([^\\/]+))?') + # todo ========================================================================================= + m = re.search('www.aliyundrive.com\\/s\\/([^\\/]+)(\\/folder\\/([^\\/]+))?', tid) + col = m.groups() + shareId = col[0] + fileId = col[2] + + infoUrl = 'https://api.aliyundrive.com/adrive/v3/share_link/get_share_by_anonymous' + + infoForm = {'share_id':shareId} + infoRsp = requests.post(infoUrl,json = infoForm,headers=self.header) + infoJo = json.loads(infoRsp.text) + + infoJa = [] + if 'file_infos' in infoJo: + infoJa = infoJo['file_infos'] + if len(infoJa) <= 0 : + return '' + fileInfo = {} + # todo + fileInfo = infoJa[0] + print(fileId) + if fileId == None or len(fileId) <= 0: + fileId = fileInfo['file_id'] + + vodList = { + 'vod_id':tid, + 'vod_name':infoJo['share_name'], + 'vod_pic':infoJo['avatar'], + 'vod_content':tid, + 'vod_play_from':'AliYun原画' + } + fileType = fileInfo['type'] + if fileType != 'folder': + if fileType != 'file' or fileInfo['category'] != video: + return '' + fileId = 'root' + + shareToken = self.getToken(shareId,'') + hashMap = {} + self.listFiles(hashMap,shareId,shareToken,fileId) + + sortedMap = sorted(hashMap.items(), key=lambda x: x[0]) + arrayList = [] + playList = [] + + for sm in sortedMap: + arrayList.append(sm[0]+'$'+sm[1]) + playList.append('#'.join(arrayList)) + playList.append('#'.join(arrayList)) + vodList['vod_play_url'] = '$$$'.join(playList) + + result = { + 'list':[vodList] + } + return result + + authorization = '' + timeoutTick = 0 + localTime = 0 + expiresIn = 0 + shareTokenMap = {} + expiresMap = {} + localMedia = {} + header = { + "Referer":"https://www.aliyundrive.com/", + "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" + } + localProxyUrl = 'http://127.0.0.1:UndCover/proxy' + + def redirectResponse(tUrl): + rsp = requests.get(tUrl, allow_redirects=False,verify = False) + if 'Location' in rsp.headers: + return redirectResponse(rsp.headers['Location']) + else: + return rsp + + def getDownloadUrl(self,shareId,token,fileId,category): + lShareId = shareId + lFileId = fileId + params = { + "share_id": lShareId, + "category": "live_transcoding", + "file_id": lFileId, + "template_id": "" + } + customHeader = self.header.copy() + customHeader['x-share-token'] = token + customHeader['authorization'] = self.authorization + url = 'https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info' + if category == 'video': + rsp = requests.post(url,json = params,headers=customHeader) + rspJo = json.loads(rsp.text) + lShareId = rspJo['share_id'] + lFileId = rspJo['file_id'] + jo = { + + } + if category == 'video': + jo['share_id'] = lShareId + jo['file_id'] = lFileId + jo['expire_sec'] = 600 + if category == 'audio': + jo['share_id'] = lShareId + jo['file_id'] = lFileId + jo['get_audio_play_info'] = True + downloadUrl = 'https://api.aliyundrive.com/v2/file/get_share_link_download_url' + downloadRsp = requests.post(downloadUrl,json = jo,headers=customHeader) + resultJo = json.loads(downloadRsp.text) + return resultJo['download_url'] + + def getMediaSlice(self,shareId,token,fileId): + params = { + "share_id": shareId, + "category": "live_transcoding", + "file_id": fileId, + "template_id": "" + } + customHeader = self.header.copy() + customHeader['x-share-token'] = token + customHeader['authorization'] = self.authorization + url = 'https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info' + + rsp = requests.post(url,json = params,headers=customHeader) + rspJo = json.loads(rsp.text) + + quality = ['FHD','HD','SD'] + videoList = rspJo['video_preview_play_info']['live_transcoding_task_list'] + highUrl = '' + for q in quality: + if len(highUrl) > 0: + break + for video in videoList: + if(video['template_id'] == q): + highUrl = video['url'] + break + if len(highUrl) == 0: + highUrl = videoList[0]['url'] + + noRsp = requests.get(highUrl,headers=self.header, allow_redirects=False,verify = False) + m3u8Url = '' + if 'Location' in noRsp.headers: + m3u8Url = noRsp.headers['Location'] + if 'location' in noRsp.headers and len(m3u8Url) == 0 : + m3u8Url = noRsp.headers['location'] + m3u8Rsp = requests.get(m3u8Url,headers=self.header) + m3u8Content = m3u8Rsp.text + + tmpArray = m3u8Url.split('/')[0:-1] + host = '/'.join(tmpArray) + '/' + + m3u8List = [] + mediaMap = {} + slices = m3u8Content.split("\n") + count = 0 + for slice in slices: + tmpSlice = slice + if 'x-oss-expires' in tmpSlice: + count = count + 1 + mediaMap[str(count)] = host+tmpSlice + + tmpSlice = "{0}?do=push_agent&api=python&type=media&share_id={1}&file_id={2}&media_id={3}".format(self.localProxyUrl,shareId,fileId,count) + m3u8List.append(tmpSlice) + + self.localMedia[fileId] = mediaMap + + return '\n'.join(m3u8List) + + def proxyMedia(self,map): + shareId = map['share_id'] + fileId = map['file_id'] + mediaId = map['media_id'] + shareToken = self.getToken(shareId,'') + + refresh = False + url = '' + ts = 0 + if fileId in self.localMedia: + fileMap = self.localMedia[fileId] + if mediaId in fileMap: + url = fileMap[mediaId] + if len(url) > 0: + ts = int(self.regStr(url,"x-oss-expires=(\\d+)&")) + + # url = self.localMedia[fileId][mediaId] + + # ts = int(self.regStr(url,"x-oss-expires=(\\d+)&")) + + self.localTime = int(time.time()) + + if ts - self.localTime <= 60: + self.getMediaSlice(shareId,shareToken,fileId) + url = self.localMedia[fileId][mediaId] + + action = { + 'url':url, + 'header':self.header, + 'param':'', + 'type':'stream', + 'after':'' + } + print(action) + return [200, "video/MP2T", action, ""] + + def proxyM3U8(self,map): + shareId = map['share_id'] + fileId = map['file_id'] + + shareToken = self.getToken(shareId,'') + content = self.getMediaSlice(shareId,shareToken,fileId) + + action = { + 'url':'', + 'header':'', + 'param':'', + 'type':'string', + 'after':'' + } + + return [200, "application/octet-stream", action, content] + + def localProxy(self,param): + typ = param['type'] + if typ == "m3u8": + return self.proxyM3U8(param) + if typ == "media": + return self.proxyMedia(param) + return None + + def getToken(self,shareId,sharePwd): + self.localTime = int(time.time()) + shareToken = '' + if shareId in self.shareTokenMap: + shareToken = self.shareTokenMap[shareId] + # todo + expire = self.expiresMap[shareId] + if len(shareToken) > 0 and expire - self.localTime > 600: + return shareToken + params = { + 'share_id':shareId, + 'share_pwd':sharePwd + } + url = 'https://api.aliyundrive.com/v2/share_link/get_share_token' + rsp = requests.post(url,json = params,headers=self.header) + jo = json.loads(rsp.text) + newShareToken = jo['share_token'] + self.expiresMap[shareId] = self.localTime + int(jo['expires_in']) + self.shareTokenMap[shareId] = newShareToken + + print(self.expiresMap) + print(self.shareTokenMap) + + return newShareToken + + def listFiles(self,map,shareId,shareToken,fileId): + url = 'https://api.aliyundrive.com/adrive/v3/file/list' + newHeader = self.header.copy() + newHeader['x-share-token'] = shareToken + params = { + 'image_thumbnail_process':'image/resize,w_160/format,jpeg', + 'image_url_process':'image/resize,w_1920/format,jpeg', + 'limit':200, + 'order_by':'updated_at', + 'order_direction':'DESC', + 'parent_file_id':fileId, + 'share_id':shareId, + 'video_thumbnail_process':'video/snapshot,t_1000,f_jpg,ar_auto,w_300' + } + maker = '' + arrayList = [] + for i in range(1,51): + if i >= 2 and len(maker) == 0: + break + params['marker'] = maker + rsp = requests.post(url,json = params,headers=newHeader) + jo = json.loads(rsp.text) + ja = jo['items'] + for jt in ja: + if jt['type'] == 'folder': + arrayList.append(jt['file_id']) + else: + if 'video' in jt['mime_type'] or 'video' in jt['category']: + repStr = jt['name'].replace("#", "_").replace("$", "_") + map[repStr] = shareId + "+" + shareToken + "+" + jt['file_id'] + "+" + jt['category'] + # print(repStr,shareId + "+" + shareToken + "+" + jt['file_id']) + maker = jo['next_marker'] + i = i + 1 + + for item in arrayList: + self.listFiles(map,shareId,shareToken,item) + + def login(self): + self.localTime = int(time.time()) + url = 'https://api.aliyundrive.com/token/refresh' + if len(self.authorization) == 0 or self.timeoutTick - self.localTime <= 600: + form = { + 'refresh_token':'81461f2e9d0b4ffb86612db403824b8a' + } + rsp = requests.post(url,json = form,headers=self.header) + jo = json.loads(rsp.text) + self.authorization = jo['token_type'] + ' ' + jo['access_token'] + self.expiresIn = int(jo['expires_in']) + self.timeoutTick = self.localTime + self.expiresIn + + # print(self.authorization) + # print(self.timeoutTick) + # print(self.localTime) + # print(self.expiresIn) \ No newline at end of file diff --git a/plugin/py_alist.py b/plugin/py_alist.py new file mode 100644 index 0000000..02ad991 --- /dev/null +++ b/plugin/py_alist.py @@ -0,0 +1,166 @@ +# 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 "Alist" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "🔮嗨翻":"https://pan.hikerfans.com", + "🦀9T(Adult)":"https://drive.9t.ee", + "🐱梓澪の妙妙屋":"https://xn--i0v44m.xyz", + "🚆资源小站":"https://pan.142856.xyz", + "🌤晴园的宝藏库":"https://alist.52qy.repl.co", + "🐭米奇妙妙屋":"https://anime.mqmmw.ga", + "💂小兵组网盘影视":"https://6vv.app", + "📀小光盘":"https://alist.xiaoguanxiaocheng.life", + "🐋一只鱼":"https://alist.youte.ml", + "🌊七米蓝":"https://al.chirmyram.com", + "🌴非盘":"http://www.feifwp.top", + "🥼帅盘":"https://hi.shuaipeng.wang", + "🐉神族九帝":"https://alist.shenzjd.com", + "☃姬路白雪":"https://pan.jlbx.xyz", + "🎧听闻网盘":"https://wangpan.sangxuesheng.com", + "💾DISK":"http://124.222.140.243:8080", + "🌨云播放":"https://quanzi.laoxianghuijia.cn", + "✨星梦":"https://pan.bashroot.top", + "🌊小江":"https://dyj.me", + "💫触光":"https://pan.ichuguang.com", + "🕵好汉吧":"https://8023.haohanba.cn", + "🥗AUNEY":"http://121.227.25.116:8008", + "🎡资源小站":"https://960303.xyz/", + "🐝神器云": "https://quanzi.laoxianghuijia.cn", + "🏝fenwe":"http://www.fenwe.tk:5244", + "🎢轻弹浅唱":"https://g.xiang.lol" + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + "type_flag": "1", + '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 = {} + ulen = len(self.config['url']) + pat = tid[ulen:] + '/' + param = { + "path": pat + } + rsp = self.postJson(self.config['url'] + '/api/fs/list', param) + jo = json.loads(rsp.text) + videos = [] + vodList = jo['data']['content'] + for vod in vodList: + img = vod['thumb'] + if len(img) == 0: + if vod['type'] == 1: + img = "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png" + aid = pat + tag = "file" + remark = "文件" + if vod['type'] == 1: + tag = "folder" + remark = "文件夹" + aid = self.config['url'] + aid + vod['name'] + else: + aid = aid + vod['name'] + videos.append({ + "vod_id": aid, + "vod_name": vod['name'], + "vod_pic": img, + "vod_tag": tag, + "vod_remarks": remark + }) + result['list'] = videos + result['page'] = 1 + result['pagecount'] = 1 + result['limit'] = 999 + result['total'] = 999999 + return result + + def detailContent(self, array): + fileName = array[0] + param = { + "path": fileName, + "password": "", + "page_num": 1, + "page_size": 100 + } + rsp = self.postJson(self.config['url'] + '/api/fs/get', param) + jo = json.loads(rsp.text) + videos = [] + vodList = jo['data'] + url = vodList['raw_url'] + vId = self.config['url'] + fileName + name = vodList['name'] + pic = vodList['thumb'] + tag = "file" + if vodList['type'] == 1: + tag = "folder" + vod = { + "vod_id": vId, + "vod_name": name, + "vod_pic": pic, + "vod_tag": tag, + "vod_play_from": "播放", + "vod_play_url": name + '$' + url + } + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + result = { + 'list': [] + } + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + url = id + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + return result + + config = { + "player": {}, + "filter": {}, + "url": 'https://al.chirmyram.com' + } + header = {} + + def localProxy(self, param): + return [200, "video/MP2T", action, ""] diff --git a/plugin/py_bdys.py b/plugin/py_bdys.py new file mode 100644 index 0000000..cfcd0a3 --- /dev/null +++ b/plugin/py_bdys.py @@ -0,0 +1,291 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json + +import time +from urllib.parse import quote_plus +import requests +from bs4 import BeautifulSoup +import ddddocr +import urllib3 +import re +import hashlib +from Crypto.Cipher import AES +from binascii import b2a_hex +from cryptography.hazmat.primitives import padding +from cryptography.hazmat.primitives.ciphers import algorithms +import zlib +import base64 + + +urllib3.util.timeout.Timeout._validate_timeout = lambda *args: 5 if args[2] != 'total' else None + +Tag = "bdys01" +Tag_name = "哔滴影视" +siteUrl = "https://www.bdys01.com" + + +def getHeaders(url): + headers = {} + if url: + headers.setdefault("Referer", url) + headers.setdefault("Accept-Encoding", "gzip, deflate, br") + headers.setdefault("DNT", "1") + headers.setdefault("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0") + headers.setdefault("Accept", "*/*") + headers.setdefault("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2") + return headers + + +def cacu(code): + if "=" in code: + code = code[:code.find("=")] + elif code[-1] == "2" or code[-1] == "7": + code = code[:-1] + if code[-1] == "4" or code[-1] == "-": + code = code[:-1] + code = code.replace("I", "1") + code = code.replace("l", "1") + if code.isdigit(): + if len(code) > 4: + code = code[:4] + return int(code[:2]) - int(code[2:]) + elif "+" in code: + code = code.split("+") + return int(code[0]) + int(code[1]) + elif "-" in code: + code = code.split("-") + return int(code[0]) - int(code[1]) + elif "x" in code: + code = code.split("x") + return int(code[0]) * int(code[1]) + + +def verifyCode(key): + retry = 5 + while retry: + try: + session = requests.session() + ocr = ddddocr.DdddOcr() + img = session.get( + url=f"https://www.bdys01.com/search/verifyCode?t={str(int(round(time.time() * 1000)))}", + headers=getHeaders(siteUrl) + ).content + # with open("verifyCode.jpg", 'wb') as f: + # f.write(img) + code = cacu(ocr.classification(img)) + url = f"{siteUrl}/search/{quote_plus(key)}?code={code}" + res = session.get( + url=url, + headers=getHeaders(url.split("?")[0]) + ).text + if "/search/verifyCode?t=" not in res: + return res + # time.sleep(1) + except Exception as e: + print(e) + if e.__class__.__name__ == 'ConnectTimeout': + break + finally: + retry = retry - 1 + + +def pkcs7_padding(data): + padder = padding.PKCS7(algorithms.AES.block_size).padder() + padded_data = padder.update(data) + padder.finalize() + return padded_data + + +def encrypt(text, key): + cryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB) + ciphertext = cryptor.encrypt(pkcs7_padding(text.encode('utf-8'))) + return b2a_hex(ciphertext).decode().upper() + + +def get_lines(path): + try: + lines = [] + pid = re.search("pid = (\d*)", requests.get(url=f'{siteUrl}{path}', headers=getHeaders(siteUrl)).text).group(1) + t = str(int(round(time.time() * 1000))) + key = hashlib.md5(f"{pid}-{t}".encode(encoding='UTF-8')).hexdigest()[0:16] + sg = encrypt(f"{pid}-{t}", key) + play_url = f"{siteUrl}/lines?t={t}&sg={sg}&pid={pid}" + data = requests.get(url=play_url, headers=getHeaders(play_url)).json()["data"] + if len(data) == 1: + play_line = requests.post( + url=f"{siteUrl}/god/{pid}", + data={ + "t": t, + "sg": sg, + "verifyCode": 666 + }, + headers=getHeaders(siteUrl) + ).json().get("url", "") + if not play_line: + play_line = requests.post( + url=f"{siteUrl}/god/{pid}?type=1", + data={ + "t": t, + "sg": sg, + "verifyCode": 888 + }, + headers=getHeaders(siteUrl) + ).json().get("url", "") + if "rkey" in play_line: + realurl = play_line.replace("?rkey", str(int(round(time.time() * 1000))) + ".mp4?ver=6010&rkey") + elif "ixigua" in play_line: + realurl = play_line + else: + realurl = play_line.replace("http:", "https:") + "/" + str(int(round(time.time() * 1000))) + ".mp4" + lines.append(realurl) + else: + for item in data: + if item == "m3u8_2" or item == "m3u8": + play_lines = data[item].split(",") + for line in play_lines: + if "mp4" in line: + lines.append(line) + else: + lines.append(line.replace("www.bde4.cc", "www.bdys01.com")) + elif item == "url3": + if "mp4" in data[item]: + lines.append(data[item]) + else: + lines.append(data[item]) + return lines + except Exception as e: + print(e) + return [] + + +def add_domain(matched): + url = "https://vod.bdys.me/" + matched.group(0) + return url + + +def searchContent(key, token): + try: + res = verifyCode(key) + searchResult = BeautifulSoup(res, "html.parser") + videos = [] + lists = searchResult.select("div.row.row-0") + for vod in lists: + vod_name = vod.select_one("div.card-body.py-0.pe-1").a["title"] + if key in vod_name: + videos.append({ + "vod_id": f'{Tag}${vod.a["href"].split(".")[0]}', + "vod_name": vod_name, + "vod_pic": vod.img["src"], + "vod_remarks": Tag_name + " " + vod.select_one("div.card-body.py-0.pe-1").a.get_text() + }) + return videos + except Exception as e: + print(e) + return [] + + +def detailContent(ids, token): + try: + id = ids.split("$")[-1] + url = f"{siteUrl}/{id}.htm" + doc = BeautifulSoup(requests.get(url=url, headers=getHeaders(siteUrl)).text, "html.parser").select_one( + "div.container-xl.clear-padding-sm.my-3.py-1") + # 取基本数据 + sourcediv = doc.select_one("div.card-body") + module_info_items = sourcediv.select("p") + director = "" + actor = "" + vod_remarks = "" + type_name = "" + vod_year = "" + vod_area = "" + for item in module_info_items: + if item.strong: + if "导演" in item.strong.get_text(): + director = ",".join(i.get_text() for i in item.select("a")) + elif "主演" in item.strong.get_text(): + actor = ",".join(i.get_text() for i in item.select("a")) + elif "摘要" in item.strong.get_text(): + vod_remarks = item.span.get_text() + elif "类型" in item.strong.get_text(): + type_name = ",".join(i.get_text() for i in item.select("a")) + elif "上映日期" in item.strong.get_text(): + vod_year = ",".join(i.get_text() for i in item.select("a")) + elif "制片国家/地区" in item.strong.get_text(): + vod_area = item.get_text().replace("制片国家/地区", "").replace("[", "").replace("]", "") + vodList = { + "vod_id": f'{Tag}${id}', + "vod_name": sourcediv.h2.get_text(), + "vod_pic": sourcediv.img["src"], + "type_name": type_name, + "vod_year": vod_year, + "vod_area": vod_area, + "vod_remarks": vod_remarks, + "vod_actor": actor, + "vod_director": director, + "vod_content": doc.select_one("div.card.collapse").select_one("div.card-body").get_text().strip(), + } + + vod_play = {} + # 取播放列表数据 + sources = doc.select("a.btn.btn-square") + lines_count = 0 + for source in sources: + lines_count = len(get_lines(source["href"])) + if lines_count: + break + for i in range(lines_count): + sourceName = f"线路{i + 1}" + vodItems = [] + playList = "" + for source in sources: + vodItems.append( + source.get_text() + "$" + f"{Tag}___" + source["href"].split(".")[0] + f"__{(i + 1) % lines_count}") + if len(vodItems): + playList = "#".join(vodItems) + vod_play.setdefault(sourceName, playList) + if len(vod_play): + vod_play_from = "$$$".join(vod_play.keys()) + vod_play_url = "$$$".join(vod_play.values()) + vodList.setdefault("vod_play_from", vod_play_from) + vodList.setdefault("vod_play_url", vod_play_url) + return [vodList] + except Exception as e: + print(e) + return [] + + +def playerContent(ids, flag, token): + try: + ids = ids.split("___") + url = ids[-1].split("__")[0] + play_from = int(ids[-1].split("__")[-1]) + lines = get_lines(f"{url}.htm") + m3u8_url = lines[play_from] + if m3u8_url.endswith("m3u8"): + data = list(requests.get(url=m3u8_url, headers=getHeaders("")).content)[3354:] + data = zlib.decompress(bytes(data), 16 + zlib.MAX_WBITS).decode() + m3u8_raw_data = re.sub(r".*?\.ts", add_domain, data) + m3u8_url = f"data:application/vnd.apple.mpegurl;base64,{base64.b64encode(m3u8_raw_data.encode('utf-8')).decode()}" + return { + "header": "", + "parse": "0", + "playUrl": "", + "url": m3u8_url + } + except Exception as e: + print(e) + return {} + + +if __name__ == '__main__': + # res = searchContent("灰影人", "") + # res = detailContent('bdys01$/dongzuo/22321', "") + # func = "playerContent" + res = playerContent("bdys01___/play/22321-0__0", "", "") + # res = eval(func)("68614-1-1") + # res = get_lines("/play/22321-0.htm") + print(res) \ No newline at end of file diff --git a/plugin/py_bilibili.py b/plugin/py_bilibili.py new file mode 100644 index 0000000..2bf77b2 --- /dev/null +++ b/plugin/py_bilibili.py @@ -0,0 +1,356 @@ +#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 = { +"选美":"选美", +"模特":"模特", +"泳装":"泳装", +"内衣":"内衣", +"腾讯直播":"腾讯直播", +"腾讯演唱会":"腾讯演唱会", +"腾讯音乐会":"腾讯音乐会", +"舞蹈":"舞蹈", +"宅舞":"宅舞", +"街舞":"街舞", +"明星舞蹈":"明星舞蹈", +"韩舞":"韩舞", +"古典舞":"古典舞", +"翻跳":"翻跳", +"中国舞":"中国舞", +"古风舞":"古风舞", +"现代舞":"现代舞", +"爵士舞":"爵士舞", +"芭蕾":"芭蕾", +"编舞":"编舞", +"POPPING":"POPPING", +"极乐净土":"极乐净土", +"桃源恋歌":"桃源恋歌", +"新宝岛":"新宝岛", +"拉丁舞":"拉丁舞", +"蹦迪":"蹦迪", +"民族舞":"民族舞", +"抖肩舞":"抖肩舞", +"齐舞":"齐舞", +"机械舞":"机械舞", +"广场舞":"广场舞", +"BDF":"BDF", +"练习室":"练习室", +"美女舞蹈":"美女舞蹈", +"牛仔裤":"牛仔裤", +"黑丝":"黑丝", +"超短裤":"超短裤", +"超短裙":"超短裙", +"舞蹈综合":"舞蹈综合", +"舞蹈教程":"舞蹈教程", +"华语现场":"华语现场", +"欧美现场":"欧美现场", +"日语现场":"日语现场", +"韩语现场":"韩语现场", +"国语现场":"国语现场", +"粤语现场":"粤语现场", +"live":"live", +"音乐剧":"音乐剧", +"演唱会":"演唱会", +"音乐节":"音乐节", +"MV":"MV", +"华语MV":"华语MV", +"欧美MV":"欧美MV", +"日语MV":"日语MV", +"韩语MV":"韩语MV", +"国语MV":"国语MV", +"粤语MV":"粤语MV", +"闽南语MV":"闽南语MV", +"东南亚MV":"东南亚MV", +"英语MV":"英语MV", +"俄语MV":"俄语MV", +"印度MV":"印度MV", +"自制MV":"自制MV", +"韩国女星MV":"韩国女星MV", +"李孝利MV":"李孝利MV", +"李知恩MV":"李知恩MV", +"林允儿MV":"林允儿MV", +"金泫雅MV":"金泫雅MV", +"金泰妍MV":"金泰妍MV", +"李宣美MV":"李宣美MV", +"崔雪莉MV":"崔雪莉MV", +"安喜延MV":"安喜延MV", +"金亚荣MV":"金亚荣MV", +"李知恩MV":"李知恩MV", +"李贞贤MV":"李贞贤MV", +"洪真英MV":"洪真英MV", +"日本女星MV":"日本女星MV", +"YUIMV":"YUIMV", +"幸田来未MV":"幸田来未MV", +"安室奈美惠MV":"安室奈美惠MV", +"滨崎步MV":"滨崎步MV", +"古谷仁美MV":"古谷仁美MV", +"宇多田光MV":"宇多田光MV", +"伊藤由奈MV":"伊藤由奈MV", +"玉置成实MV":"玉置成实MV", +"仓木麻衣MV":"仓木麻衣MV", +"AngelaAkiMV":"AngelaMV", +"中岛美雪MV":"中岛美雪MV", +"女星MV":"女星MV", +"戴佩妮MV":"戴佩妮MV", +"邓紫棋MV":"邓紫棋MV", +"张韶涵MV":"张韶涵MV", +"蔡健雅MV":"蔡健雅MV", +"莫文蔚MV":"莫文蔚MV", +"刘若英MV":"刘若英MV", +"邓丽君MV":"邓丽君MV", +"蔡依林MV":"蔡依林MV", +"李宇春MV":"李宇春MV", +"徐佳莹MV":"徐佳莹MV", +"杨千嬅MV":"杨千嬅MV", +"张靓颖MV":"张靓颖MV", +"杨丞琳MV":"杨丞琳MV", +"萧亚轩MV":"萧亚轩MV", +"容祖儿MV":"容祖儿MV", +"梅艳芳MV":"梅艳芳MV", +"孙燕姿MV":"孙燕姿MV", +"袁娅维MV":"袁娅维MV", +"王菲MV":"王菲MV", +"梁静茹MV":"梁静茹MV", +"周慧敏MV":"周慧敏MV", +"张惠妹MV":"张惠妹MV", +"周笔畅MV":"周笔畅MV", +"谭维维MV":"谭维维MV", +"陈慧娴MV":"陈慧娴MV", +"郭静MV":"郭静MV", +"那英MV":"那英MV", +"韩红MV":"韩红MV", +"林忆莲MV":"林忆莲MV", +"李玟MV":"李玟MV", +"徐小凤MV":"徐小凤MV", +"卓依婷MV":"卓依婷MV", +"郁可唯MV":"郁可唯MV", +"田震MV":"田震MV", +"凤飞飞MV":"凤飞飞MV", +"谭晶MV":"谭晶MV", +"叶倩文MV":"叶倩文MV", +"王心凌MV":"王心凌MV", +"郭采洁MV":"郭采洁MV", +"阿黛尔MV":"阿黛尔MV", +"LadyGagaMV":"LadyGagaMV", +"布兰妮MV":"布兰妮MV", +"洛天依MV":"洛天依MV", +"初音未来MV":"初音未来MV", +"女团":"女团", +"中国女团":"中国女团", +"SNH48":"SNH48", +"S.H.E":"S.H.E", +"Twins":"Twins", +"火箭少女101":"火箭少女101", +"BY2":"BY2", +"S.I.N.G":"S.I.N.G", +"3unshine":"3unshine", +"蜜蜂少女队":"蜜蜂少女队", +"七朵组合":"七朵组合", +"GNZ48":"GNZ48", +"韩国女团":"韩国女团", +"TWICE":"TWICE", +"4MINUTE":"4MINUTE", +"EXID":"EXID", +"KARA":"KARA", +"TARA":"TARA", +"BLACKPINK":"BLACKPINK", +"LOONA":"LOONA", +"ITZY":"ITZY", +"RedVelvet":"RedVelvet", +"Everglow":"Everglow", +"Mamamoo":"Mamamoo", +"少女时代":"少女时代", +"S.E.S":"S.E.S", +"FIN.K.L":"FIN.K.L", +"2NE1":"2NE1", +"WonderGirls":"WonderGirls", +"IZ*ONE":"IZ*ONE", +"Sistar":"Sistar", +"Apink":"Apink", +"AOA":"AOA", +"GFRIEND":"GFRIEND", +"f(x)":"f(x)", +"(G)I-DLE":"(G)I-DLE", +"Itzy":"Itzy", +"Oh!GG":"Oh!GG", +"GirlCrush":"GirlCrush", +"日本女团":"日本女团", +"AKB48":"AKB48", +"SKE48":"SKE48", +"NMB48":"NMB48", +"JKT48":"JKT48", +"HKT48":"HKT48", +"AKB48TeamTP":"AKB48TeamTP", +"Perfume":"Perfume", +"桃色幸运草Z":"桃色幸运草Z", +"乃木坂46乃":"乃木坂46乃", +"樱坂46":"樱坂46", +"日向坂46":"日向坂46", +"E-girls":"E-girls", +"NiziU":"NiziU", +"BiSH":"BiSH", +"早安少女组":"早安少女组", +"戏曲":"戏曲", +"演唱会":"演唱会", +"相声小品":"相声小品", +"动物世界":"动物世界", +"儿童少儿":"儿童少儿" + } + 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 + cookies = '' + def getCookie(self): + rsp = self.fetch("https://www.bilibili.com/") + self.cookies = rsp.cookies + return rsp.cookies + def categoryContent(self,tid,pg,filter,extend): + result = {} + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&duration=4&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.cookies) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url,cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).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 cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + + rsp = self.fetch(url,headers=self.header) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("","").replace("","") + pic = jo['pic'] + desc = jo['desc'] + typeName = jo['tname'] + vod = { + "vod_id":aid, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":"", + "vod_remarks":"", + "vod_actor":"", + "vod_director":"", + "vod_content":desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'] + playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid) + + vod['vod_play_from'] = 'B站' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + result = { + 'list':[] + } + return result + def playerContent(self,flag,id,vipFlags): + # https://www.555dianying.cc/vodplay/static/js/playerconfig.js + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1]) + rsp = self.fetch(url) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "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 = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_bilimd.py b/plugin/py_bilimd.py new file mode 100644 index 0000000..43b7653 --- /dev/null +++ b/plugin/py_bilimd.py @@ -0,0 +1,214 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +from requests import session, utils +import os +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "B站影视" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "番剧": "1", + "国创": "4", + "电影": "2", + "综艺": "7", + "电视剧": "5", + "纪录片": "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 = { + 'list':[] + } + return result + cookies = '' + def getCookie(self): + #在cookies_str中填入会员或大会员cookie,以获得更好的体验 + cookies_str = "innersign=0; buvid3=606BE156-AE37-AEA8-7052-9DA0B21766E776404infoc; b_nut=1663302976; i-wanna-go-back=-1; b_ut=7; b_lsid=4106252F6_18344933A90; _uuid=586AAEB7-6B88-A691-F7AC-95C27E57F53C43036infoc; buvid4=B6FF1449-4361-1C76-DEFC-4AFCA1777B7E78304-022091612-PdJr0jKE6N5TamfAEX9uACD1RXvklspbNdlcIQEFLMu0d9wS3G3sdA%3D%3D; buvid_fp=2a9b54d5e06aa54293dc7544e000552d" + cookies_dic = dict([co.strip().split('=') for co in cookies_str.split(';')]) + rsp = session() + cookies_jar = utils.cookiejar_from_dict(cookies_dic) + rsp.cookies = cookies_jar + content = self.fetch("http://api.bilibili.com/x/web-interface/nav", cookies=rsp.cookies) + res = json.loads(content.text) + if res["code"] == 0: + self.cookies = rsp.cookies + else: + rsp = self.fetch("https://www.bilibili.com/") + self.cookies = rsp.cookies + return rsp.cookies + + def categoryContent(self,tid,pg,filter,extend): + result = {} + url = 'https://api.bilibili.com/pgc/season/index/result?order=2&season_status=-1&style_id=-1&sort=0&area=-1&pagesize=20&type=1&st={0}&season_type={0}&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url, cookies=self.cookies) + content = rsp.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['season_id']).strip() + title = vod['title'].strip() + img = vod['cover'].strip() + remark = vod['index_show'].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 cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "http://api.bilibili.com/pgc/view/web/season?season_id={0}".format(aid) + rsp = self.fetch(url,headers=self.header) + jRoot = json.loads(rsp.text) + jo = jRoot['result'] + id = jo['season_id'] + title = jo['title'] + pic = jo['cover'] + areas = jo['areas'][0]['name'] + typeName = jo['share_sub_title'] + dec = jo['evaluate'] + remark = jo['new_ep']['desc'] + vod = { + "vod_id":id, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":areas, + "vod_remarks":remark, + "vod_actor":"", + "vod_director":"", + "vod_content":dec + } + ja = jo['episodes'] + playUrl = '' + for tmpJo in ja: + eid = tmpJo['id'] + cid = tmpJo['cid'] + part = tmpJo['title'].replace("#", "-") + playUrl = playUrl + '{0}${1}_{2}#'.format(part, eid, cid) + + vod['vod_play_from'] = 'B站影视' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=media_bangumi&keyword={0}'.format(key) # 番剧搜索 + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url, cookies=self.cookies) + content = rsp.text + jo = json.loads(content) + rs = jo['data'] + if rs['numResults'] == 0: + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=media_ft&keyword={0}'.format(key) # 影视搜索 + rspRetry = self.fetch(url, cookies=self.cookies) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['season_id']).strip() + title = vod['title'].strip().replace("", "").replace("", "") + img = vod['eps'][0]['cover'].strip() + remark = vod['index_show'] + videos.append({ + "vod_id": aid, + "vod_name": title, + "vod_pic": img, + "vod_remarks": remark + }) + result = { + 'list': videos + } + return result + + def playerContent(self,flag,id,vipFlags): + result = {} + ids = id.split("_") + header = { + "Referer": "https://www.bilibili.com", + "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" + } + url = 'https://api.bilibili.com/pgc/player/web/playurl?qn=116&ep_id={0}&cid={1}'.format(ids[0],ids[1]) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.cookies,headers=header) + jRoot = json.loads(rsp.text) + if jRoot['message'] != 'success': + print("需要大会员权限才能观看") + return {} + jo = jRoot['result'] + ja = jo['durl'] + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "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 = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_bilivd.py b/plugin/py_bilivd.py new file mode 100644 index 0000000..f7100cf --- /dev/null +++ b/plugin/py_bilivd.py @@ -0,0 +1,231 @@ +# coding=utf-8 +# !/usr/bin/python +import sys + +sys.path.append('..') +from base.spider import Spider +import json +import requests +from requests import session, utils +import os +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 = { + "Zard": "Zard", + "玩具汽车": "玩具汽车", + "儿童": "儿童", + "幼儿": "幼儿", + "儿童玩具": "儿童玩具", + "昆虫": "昆虫", + "动物世界": "动物世界", + "纪录片": "纪录片", + "相声小品": "相声小品", + "搞笑": "搞笑", + "假窗-白噪音": "窗+白噪音", + "演唱会": "演唱会" + } + 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 + + cookies = '' + + def getCookie(self): + # 在cookies_str中填入会员或大会员cookie,以获得更好的体验。 + cookies_str = "innersign=0; buvid3=606BE156-AE37-AEA8-7052-9DA0B21766E776404infoc; b_nut=1663302976; i-wanna-go-back=-1; b_ut=7; b_lsid=4106252F6_18344933A90; _uuid=586AAEB7-6B88-A691-F7AC-95C27E57F53C43036infoc; buvid4=B6FF1449-4361-1C76-DEFC-4AFCA1777B7E78304-022091612-PdJr0jKE6N5TamfAEX9uACD1RXvklspbNdlcIQEFLMu0d9wS3G3sdA%3D%3D; buvid_fp=2a9b54d5e06aa54293dc7544e000552d" + cookies_dic = dict([co.strip().split('=') for co in cookies_str.split(';')]) + rsp = session() + cookies_jar = utils.cookiejar_from_dict(cookies_dic) + rsp.cookies = cookies_jar + content = self.fetch("http://api.bilibili.com/x/web-interface/nav", cookies=rsp.cookies) + res = json.loads(content.text) + if res["code"] == 0: + self.cookies = rsp.cookies + else: + rsp = self.fetch("https://www.bilibili.com/") + self.cookies = rsp.cookies + return rsp.cookies + + def categoryContent(self, tid, pg, filter, extend): + result = {} + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid, pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url, cookies=self.cookies) + content = rsp.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].replace("", "").replace("", "").replace(""", '"') + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).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 cleanSpace(self, str): + return str.replace('\n', '').replace('\t', '').replace('\r', '').replace(' ', '') + + def detailContent(self, array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + rsp = self.fetch(url, headers=self.header) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("", "").replace("", "") + pic = jo['pic'] + desc = jo['desc'] + timeStamp = jo['pubdate'] + timeArray = time.localtime(timeStamp) + year = str(time.strftime("%Y", timeArray)) + dire = jo['owner']['name'] + typeName = jo['tname'] + remark = str(jo['duration']).strip() + vod = { + "vod_id": aid, + "vod_name": title, + "vod_pic": pic, + "type_name": typeName, + "vod_year": year, + "vod_area": "", + "vod_remarks": remark, + "vod_actor": "", + "vod_director": dire, + "vod_content": desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'].replace("#", "-") + playUrl = playUrl + '{0}${1}_{2}#'.format(part, aid, cid) + + vod['vod_play_from'] = 'B站视频' + vod['vod_play_url'] = playUrl + + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + header = { + "Referer": "https://www.bilibili.com", + "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" + } + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}'.format(key) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url, cookies=self.cookies,headers=header) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url, cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].replace("", "").replace("", "").replace(""", '"') + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id": aid, + "vod_name": title, + "vod_pic": img, + "vod_remarks": remark + }) + result = { + 'list': videos + } + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid={1}&qn=116'.format(ids[0], ids[1]) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url, cookies=self.cookies) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer": "https://www.bilibili.com", + "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 = {} + + def localProxy(self, param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_cctv.py b/plugin/py_cctv.py new file mode 100644 index 0000000..8a359c2 --- /dev/null +++ b/plugin/py_cctv.py @@ -0,0 +1,194 @@ +#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 = { + "等着我": "TOPC1451378757637200", + "我爱发明": "TOPC1569314345479107", + "动物世界": "TOPC1451378967257534", + "我爱发明2021": "TOPC1451557970755294", + "自然传奇": "TOPC1451558150787467", +"探索发现": "TOPC1451557893544236", +"地理中国": "TOPC1451557421544786", +"人与自然": "TOPC1451525103989666", +"人文地理": "TOPC1451469288523874", +"远方的家": "TOPC1451541349400938", +"全景自然": "TOPC1451469617360656", +"魅力纪录": "TOPC1451465982926341", +"秘境之眼": "TOPC1554187056533820", +"自然": "TOPC1451469660736687", +"动画大放映": "TOPC1451559025546574", +"新闻联播": "TOPC1451528971114112", +"焦点访谈": "TOPC1451558976694518", +"海峡两岸": "TOPC1451540328102649", +"今日关注": "TOPC1451540389082713", +"今日亚洲": "TOPC1451540448405749", +"防务新观察": "TOPC1451526164984187", +"共同关注": "TOPC1451558858788377", +"深度国际": "TOPC1451540709098112", +"环宇视野": "TOPC1451469241240836", +"环球视线": "TOPC1451558926200436", +"世界周刊": "TOPC1451558687534149", +"东方时空": "TOPC1451558532019883", +"新闻调查": "TOPC1451558819463311", +"环球科技视野": "TOPC1451463780801881", +"讲武堂": "TOPC1451526241359341", +"国宝发现": "TOPC1571034869935436", +"国宝档案": "TOPC1451540268188575", +"天下财经": "TOPC1451531385787654", +"走进科学": "TOPC1451558190239536", +"解码科技史": "TOPC1570876640457386", +"法律讲堂": "TOPC1451542824484472", +"百家讲坛": "TOPC1451557052519584", +"名家书场": "TOPC1579401761622774", +"星光大道": "TOPC1451467630488780", +"非常6+1": "TOPC1451467940101208", +"中国节拍": "TOPC1570025984977611", +"一鸣惊人": "TOPC1451558692971175", +"金牌喜剧班": "TOPC1611826337610628", +"九州大戏台": "TOPC1451558399948678", +"乡村大舞台": "TOPC1563179546003162", +"家庭幽默大赛": "TOPC1451375222891702", +"综艺盛典": "TOPC1451985071887935", +"环球综艺": "TOPC1571300682556971", +"中国好歌曲": "TOPC1451984949453678", +"广场舞金曲": "TOPC1528685010104859", +"曲苑杂谈": "TOPC1451984417763860", +"锦绣梨园": "TOPC1451558363250650", +"梨园周刊": "TOPC1574909786070351", +"外国人在中国": "TOPC1451541113743615", +"华人世界": "TOPC1451539822927345", +"武林大会": "TOPC1451551891055866", +"棋牌乐": "TOPC1451550531682936", +"动物传奇": "TOPC1451984181884527", +"美食中国": "TOPC1571034804976375", +"田间示范秀": "TOPC1563178908227191", +"三农群英会": "TOPC1600745974233265", +"乡村振兴面对面": "TOPC1568966531726705", +"超级新农人": "TOPC1597627647957699", +"印象乡村": "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, ""] \ No newline at end of file diff --git a/plugin/py_cokemv.py b/plugin/py_cokemv.py new file mode 100644 index 0000000..96bf2aa --- /dev/null +++ b/plugin/py_cokemv.py @@ -0,0 +1,232 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import requests +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "Cokemv" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def homeContent(self,filter): + result = {} + cateManual = { + "抖音电影":"5", + "电视剧":"2", + "电影":"1", + "动漫":"4", + "综艺":"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): + rsp = self.fetch("https://cokemv.me/") + root = self.html(rsp.text) + aList = root.xpath("//div[@class='main']//div[contains(@class,'module-items')]/a") + + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('.//img/@data-original')[0] + mark = a.xpath(".//div[@class='module-item-note']/text()")[0] + sid = a.xpath("./@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 categoryContent(self,tid,pg,filter,extend): + result = {} + + urlParams = ["", "", "", "", "", "", "", "", "", "", "", ""] + urlParams[0] = tid + urlParams[8] = pg + for key in extend: + urlParams[int(key)] = extend[key] + params = '-'.join(urlParams) + url = 'https://cokemv.me/vodshow/{0}.html'.format(params) + rsp = self.fetch(url) + root = self.html(rsp.text) + aList = root.xpath("//div[contains(@class, 'module-items')]/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('.//img/@data-original')[0] + mark = a.xpath(".//div[contains(@class,'module-item-note')]/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid,"/voddetail/(\\d+).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://cokemv.me/voddetail/{0}.html'.format(tid) + rsp = self.fetch(url) + root = self.html(rsp.text) + divContent = root.xpath("//div[@class='module-info-main']")[0] + title = divContent.xpath('.//h1/text()')[0] + year = divContent.xpath('.//div/div/div[1]/a/text()')[0] + area = divContent.xpath('.//div/div/div[2]/a/text()')[0] + typ = divContent.xpath('.//div/div/div[3]/a/text()') + type = ', '.join(typ) + dir = divContent.xpath(".//div[@class='module-info-items']/div[2]/div[1]/a/text()")[0] + act = divContent.xpath(".//div[@class='module-info-items']/div[4]/div/a/text()") + actor = ', '.join(act) + pic = root.xpath(".//div[@class='module-poster-bg']//img/@data-original")[0] + detail = root.xpath(".//div[@class='module-info-introduction-content']/p/text()")[0] + vod = { + "vod_id":tid, + "vod_name":title, + "vod_pic":pic, + "type_name":type, + "vod_year":year, + "vod_area":area, + "vod_remarks":"", + "vod_actor":actor, + "vod_director":dir, + "vod_content":detail + } + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath("//div[@class='module-tab-item tab-item']/span/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath("//div[@class='module-play-list']") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./div/a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('.//span/text()')[0] + 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 verifyCode(self, url): + retry = 5 + 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"} + while retry: + try: + session = requests.session() + img = session.get('https://cokemv.me/index.php/verify/index.html?', headers=header).content + code = session.post('https://api.nn.ci/ocr/b64/text', data=base64.b64encode(img).decode()).text + res = session.post(url=f"https://cokemv.me/index.php/ajax/verify_check?type=search&verify={code}", headers=header).json() + if res["msg"] == "ok": + return session + except Exception as e: + print(e) + finally: + retry = retry - 1 + + def searchContent(self, key, quick): + url = 'https://cokemv.me/vodsearch/-------------.html?wd={0}'.format(key) + session = self.verifyCode(url) + rsp = session.get(url) + root = self.html(rsp.text) + vodList = root.xpath("//div[@class='module-card-item module-item']/a[@class='module-card-item-poster']") + videos = [] + for vod in vodList: + name = vod.xpath(".//img/@alt")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[@class='module-item-note']/text()")[0] + sid = vod.xpath("./@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 + + config = { + "player": {"cokemv0555":{"show":"COKEMV","des":"","ps":"0","parse":""},"cokeqie01":{"show":"極速路線","des":"","ps":"0","parse":""},"xin":{"show":"高速路線","des":"","ps":"0","parse":""},"90mm":{"show":"COKEMV(測試)","des":"","ps":"0","parse":""},"toutiao":{"show":"海外路線","des":"","ps":"0","parse":""},"age01":{"show":"動漫一線","des":"","ps":"0","parse":""},"mahua":{"show":"海外(禁國內)","des":"","ps":"0","parse":""},"age02":{"show":"動漫二線","des":"","ps":"0","parse":""}}, + "filter": {"5":[{"key":3,"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":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"國語","v":"國語"},{"n":"英語","v":"英語"},{"n":"粵語","v":"粵語"},{"n":" 閩南語","v":"閩南語"},{"n":"韓語","v":"韓語"},{"n":"日語","v":"日語"},{"n":"法語","v":"法語"},{"n":"德語","v":"德語"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"时间排序","v":"time"},{"n":"人气排序","v":"hits"},{"n":"评分排序","v":"score"}]}],"2":[{"key":0,"name":"类型","value":[{"n":"全部","v":"2"},{"n":"大陸劇","v":"13"},{"n":"香港劇","v":"14"},{"n":"韓國劇","v":"15"},{"n":"歐美劇","v":"16"},{"n":"日本劇","v":"20"},{"n":"台灣劇","v":"21"},{"n":"泰國劇","v":"22"}]},{"key":1,"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":"其他"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"时间排序","v":"time"},{"n":"人气排序","v":"hits"},{"n":"评分排序","v":"score"}]}],"1":[{"key":0,"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"},{"n":"奇幻片","v":"24"},{"n":"懸疑片","v":"25"},{"n":"記錄片","v":"27"}]},{"key":1,"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":"其他"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"时间排序","v":"time"},{"n":"人气排序","v":"hits"},{"n":"评分排序","v":"score"}]}],"4":[{"key":0,"name":"类型","value":[{"n":"全部","v":"4"},{"n":"動畫電影","v":"41"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"时间排序","v":"time"},{"n":"人气排序","v":"hits"},{"n":"评分排序","v":"score"}]}],"3":[{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"韩国","v":" 韩国"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩 语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":" 时间排序","v":"time"},{"n":"人气排序","v":"hits"},{"n":"评分排序","v":"score"}]}]} + } + header = { + "origin":"https://cokemv.me", + "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", + "Accept":" */*", + "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7", + "Accept-Encoding":"gzip, deflate" + } + def playerContent(self,flag,id,vipFlags): + url = 'https://cokemv.me/vodplay/{0}.html'.format(id) + rsp = self.fetch(url) + root = self.html(rsp.text) + scripts = root.xpath("//script/text()") + jo = {} + result = {} + for script in scripts: + if(script.startswith("var player_")): + target = script[script.index('{'):] + jo = json.loads(target) + break; + parseUrl = "" + playerConfig = self.config['player'] + if jo['from'] in self.config['player']: + playerConfig = self.config['player'][jo['from']] + videoUrl = jo['url'] + playerUrl = playerConfig['parse'] + result["parse"] = playerConfig['ps'] + result["playUrl"] = playerUrl + result["url"] = videoUrl + result["header"] = json.dumps(self.header) + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_cup.py b/plugin/py_cup.py new file mode 100644 index 0000000..c1772d2 --- /dev/null +++ b/plugin/py_cup.py @@ -0,0 +1,241 @@ +#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 homeContent(self,filter): + result = {} + cateManual = { + "电视剧":"20", + "电影":"21", + "动漫":"22", + "综艺":"23", + "纪录片":"24" + } + 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.qifudata.com/") + root = self.html(rsp.text) + aList = root.xpath("//div[@class='stui-vodlist__box']/a") + + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./span[@class='pic-text text-right']/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid,"/spx/(\\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", "lang", "", "", "", "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.qifudata.com/vodshow/{0}.html'.format(suffix) + rsp = self.fetch(url) + root = self.html(rsp.text) + aList = root.xpath("//div[@class='stui-vodlist__box']/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./span[@class='pic-text text-right']/b/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid,"/spx/(\\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.qifudata.com/spx/{0}.html'.format(tid) + rsp = self.fetch(url) + root = self.html(rsp.text) + node = root.xpath("//div[@class='stui-content']")[0] + + pic = node.xpath(".//img/@data-original")[0] + title = node.xpath('.//h1/text()')[0] + detail = node.xpath(".//span[@class='detail-content']/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(".//div[@class='stui-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.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_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath("//div[@class='stui-vodlist__head']/h3/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath("//ul[contains(@class,'stui-content__playlist')]") + 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,'/sp/(\\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.qifudata.com/index.php/ajax/suggest?mid=1&wd={0}'.format(key) + # getHeader() + rsp = self.fetch(url) + jo = json.loads(rsp.text) + result = {} + jArray = [] + if int(jo['total']) > 0: + for j in jo['list']: + jArray.append({ + "vod_id": j['id'], + "vod_name": j['name'], + "vod_pic": j['pic'], + "vod_remarks": "" + }) + result = { + 'list':jArray + } + return result + + config = { + "player": { + "dpp": { + "sh": "DP播放", + "pu": "https://jx.qifudata.com/?url=", + "sn": 1, + "or": 999 + } + }, + "filter": {"20": [{"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": "运动"},{"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": "2007", "v": "2007"}, {"n": "2006", "v": "2006"}, {"n": "2005", "v": "2005"}, {"n": "2004", "v": "2004"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "lang", "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": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "21": [{"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": "运动"},{"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": "lang", "name": "语言", "value": [{"n": "全部", "v": ""}, {"n": "英语", "v": "英语"}, {"n": "法语", "v": "法语"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "22": [{"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": "音乐"},{"n": "奇幻", "v": "奇幻"},{"n": "恐怖", "v": "恐怖"},{"n": "惊悚", "v": "惊悚"},{"n": "犯罪", "v": "犯罪"},{"n": "西部", "v": "西部"},{"n": "灾难", "v": "灾难"},{"n": "古装", "v": "古装"},{"n": "泡面", "v": "泡面"},{"n": "运动", "v": "运动"},{"n": "体育", "v": "体育"},{"n": "青春", "v": "青春"},{"n": "美食", "v": "美食"},{"n": "治愈", "v": "治愈"},{"n": "致郁", "v": "致郁"},{"n": "励志", "v": "励志"},{"n": "历史", "v": "历史"},{"n": "真人", "v": "真人"},{"n": "竞技", "v": "竞技"},{"n": "其他", "v": "其他"}]}, {"key": "year", "name": "年份", "value": [{"n": "全部", "v": ""}, {"n": "2022", "v": "2022"}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014", "v": "2014"}, {"n": "2013", "v": "2013"}, {"n": "2012", "v": "2012"}, {"n": "2011", "v": "2011"}, {"n": "2010", "v": "2010"}, {"n": "2009", "v": "2009"}, {"n": "2008", "v": "2008"}, {"n": "2007", "v": "2007"}, {"n": "2006", "v": "2006"}, {"n": "2005", "v": "2005"}, {"n": "2004", "v": "2004"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "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": "晚会"}]}, {"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"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "24": [{"key": "class", "name": "剧情", "value": [{"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": "lang", "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"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}]} + } + header = { + "origin":"http://www.qifudata.com/", + "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", + "Accept":" */*", + "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7", + "Accept-Encoding":"gzip, deflate" + } + def playerContent(self,flag,id,vipFlags): + result = {} + url = 'http://www.qifudata.com/sp/{0}.html'.format(id) + rsp = self.fetch(url) + 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 = '' + # src="(\S+url=) + # playerConfig = self.config['player'] + # if jo['from'] in self.config['player']: + # playerConfig = self.config['player'][jo['from']] + # parseUrl = playerConfig['pu'] + jo['url'] + scriptUrl = 'http://www.qifudata.com/static/js/playerconfig.js' + scriptRsp = self.fetch(scriptUrl) + scriptRsp = scriptRsp.text + parseUrl = self.regStr(scriptRsp, 'player_list=(.*?),Mac') + if len(parseUrl) > 0: + jo1 = json.loads(parseUrl) + jo1 = jo1[jo['from']] + realUrl = jo['url'] + result["parse"] = 1 + result["playUrl"] = jo1['parse'] + result["url"] = realUrl + result["header"] = json.dumps(self.header) + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_cyys.py b/plugin/py_cyys.py new file mode 100644 index 0000000..a164d4c --- /dev/null +++ b/plugin/py_cyys.py @@ -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, ""] diff --git a/plugin/py_czspp.py b/plugin/py_czspp.py new file mode 100644 index 0000000..73b8eab --- /dev/null +++ b/plugin/py_czspp.py @@ -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://czspp.com") + 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://czspp.com/{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://czspp.com/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://czspp.com/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://czspp.com/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, ""] diff --git a/plugin/py_douyu.py b/plugin/py_douyu.py new file mode 100644 index 0000000..3738024 --- /dev/null +++ b/plugin/py_douyu.py @@ -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, ""] \ No newline at end of file diff --git a/plugin/py_genmov.py b/plugin/py_genmov.py new file mode 100644 index 0000000..b00249b --- /dev/null +++ b/plugin/py_genmov.py @@ -0,0 +1,202 @@ +#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): + # genmov + # https://www.genmov.com/v/yinyue.html + result = {} + cateManual = { + "电影":"dianying", + "连续剧":"lianxuju", + "动漫":"dongman", + "综艺":"zongyi", + "少儿":"shaoer", + "音乐":"yinyue" + } + 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://www.genmov.com/",headers=self.header) + root = self.html(rsp.text) + aList = root.xpath("//div[@class='module module-wrapper']//div[@class='module-item']") + videos = [] + for a in aList: + name = a.xpath(".//div[@class='module-item-pic']/a/@title")[0] + pic = a.xpath(".//div[@class='module-item-pic']/img/@data-src")[0] + mark = a.xpath("./div[@class='module-item-text']/text()")[0] + sid = a.xpath(".//div[@class='module-item-pic']/a/@href")[0] + sid = self.regStr(sid,"/video/(\\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[8] = pg + for key in extend: + urlParams[int(key)] = extend[key] + params = '-'.join(urlParams) + url = 'https://www.genmov.com/vodshow/{0}.html'.format(params) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + aList = root.xpath("//div[@class='module-items']/div[@class='module-item']") + videos = [] + for a in aList: + name = a.xpath(".//div[@class='module-item-pic']/a/@title")[0] + pic = a.xpath(".//div[@class='module-item-pic']/img/@data-src")[0] + mark = a.xpath("./div[@class='module-item-text']/text()")[0] + sid = a.xpath(".//div[@class='module-item-pic']/a/@href")[0] + sid = self.regStr(sid,"/video/(\\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): + # video-info-header + tid = array[0] + url = 'https://www.genmov.com/video/{0}.html'.format(tid) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + title = root.xpath(".//h1[@class='page-title']/text()")[0] + pic = root.xpath(".//div[@class='video-cover']//img/@data-src")[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 = root.xpath(".//div[@class='video-info-items']") + 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_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath(".//main[@id='main']//div[@class='module-heading']//div[contains(@class,'module-tab-item')]/span/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath(".//main[@id='main']//div[contains(@class,'module-list')]//div[@class='sort-item']") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('./span/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): + result = {} + return result + def playerContent(self,flag,id,vipFlags): + # https://www.genmov.com/play/301475-1-1.html + # https://www.genmov.com/static/js/playerconfig.js + url = 'https://www.genmov.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; + result = {} + parseUrl = "" + playerConfig = self.config['player'] + if jo['from'] in self.config['player']: + parser = self.config['player'][jo['from']] + originUrl = jo['url'] + parseUrl = parser['parse'] + + result["parse"] = parser['ps'] + result["playUrl"] = parseUrl + result["url"] = originUrl + result["header"] = '' + return result + + cookie = {} + config = { + "player": {"dplayer":{"show":"默认","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"qqy":{"show":"预告专用","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"qiyi":{"show":"爱奇艺","des":"qiyi.com","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"youku":{"show":"优酷","des":"youku.com","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"qq":{"show":"腾讯","des":"qq.com","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"mgtv":{"show":"芒果","des":"mgtv.com","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"letv":{"show":"乐视","des":"","ps":"1","parse":"https://jx.quanmingjiexi.com/?url="},"m1905":{"show":"电影网","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"bilibili":{"show":"哔哩哔哩","des":"","ps":"1","parse":"https://jx.bozrc.com:4433/player/?url="},"sohu":{"show":"搜狐","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"lzm3u8":{"show":"量子资源1","des":"支持手机电脑在线播放","ps":"0","parse":""},"ss4m3u8":{"show":"松鼠资源4","des":"支持手机电脑在线播放","ps":"0","parse":""},"ss3m3u8":{"show":"松鼠资源3","des":"支持手机电脑在线播放","ps":"0","parse":""},"ss2m3u8":{"show":"松鼠资源2","des":"支持手机电脑在线播放","ps":"0","parse":""},"ss1m3u8":{"show":"松鼠资源1","des":"支持手机电脑在线播放","ps":"0","parse":""},"jinyingm3u8":{"show":"金鹰资源②","des":"支持手机电脑在线播放","ps":"0","parse":""},"cmpyun":{"show":"冠军资源①","des":"支持手机电脑在线播放","ps":"0","parse":""},"kcm3u8":{"show":"快车资源①","des":"支持手机电脑在线播放","ps":"0","parse":""},"xlm3u8":{"show":"新浪资源2","des":"支持手机电脑在线播放","ps":"0","parse":""},"ssyun":{"show":"神速资源1","des":"支持手机电脑在线播放","ps":"0","parse":""},"ssm3u8":{"show":"神速资源2","des":"支持手机电脑在线播放","ps":"0","parse":""},"wolong":{"show":"卧龙资源","des":"支持手机电脑在线播放","ps":"1","parse":"https://vip.2ktvb.com/?url="},"ptzy":{"show":"葡萄资源","des":"支持手机电脑在线播放","ps":"0","parse":""},"zgzy":{"show":"猪哥播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"ukm3u8":{"show":"U酷点播","des":"支持手机电脑在线播放","ps":"0","parse":""},"fsm3u8":{"show":"飞速播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"mim3u8":{"show":"大米播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"if101":{"show":"if101播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"sgm3u8":{"show":"速更播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"kdm3u8":{"show":"酷点播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"xiuse":{"show":"秀色播放","des":"支持手机电脑在线播放","ps":"0","parse":""},"swm3u8":{"show":"丝袜播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"bdxm3u8":{"show":"北斗星m3u8","des":"支持手机电脑在线播放","ps":"0","parse":""},"hjm3u8":{"show":"花椒播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"kbzy":{"show":"快播云播","des":"支持手机电脑在线播放","ps":"0","parse":""},"88zym3u8":{"show":"88在线","des":"支持手机电脑在线播放","ps":"0","parse":""},"lezy":{"show":"乐库云播","des":"支持手机电脑在线播放","ps":"0","parse":""},"kkyun":{"show":"酷酷云播","des":"支持手机电脑在线播放","ps":"0","parse":""},"kkm3u8":{"show":"KK在线","des":"支持手机电脑在线播放","ps":"0","parse":""},"tpm3u8":{"show":"淘片播放器","des":"支持手机电脑在线播放","ps":"0","parse":""},"ckm3u8":{"show":"ck资源","des":"支持手机电脑在线播放","ps":"0","parse":""},"bjyun":{"show":"八戒云播","des":"支持手机电脑在线播放","ps":"0","parse":""},"gsm3u8":{"show":"光速云资源②","des":"支持手机电脑在线播放","ps":"0","parse":""},"m3u8":{"show":"m3u8在线","des":"支持手机电脑在线播放","ps":"0","parse":""},"videojs":{"show":"videojs-H5播放器","des":"videojs.com","ps":"0","parse":""},"iva":{"show":"iva-H5播放器","des":"videojj.com","ps":"0","parse":""},"iframe":{"show":"外链数据","des":"iframe外链数据","ps":"0","parse":""},"link":{"show":"外链数据","des":"外部网站播放链接","ps":"0","parse":""},"swf":{"show":"Flash文件","des":"swf","ps":"0","parse":""},"flv":{"show":"Flv文件","des":"flv","ps":"0","parse":""},"pptv":{"show":"PPTV","des":"pptv","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"migu":{"show":"咪咕","des":"migu","ps":"0","parse":"https://vip.2ktvb.com/player/sg.php?url="},"cctv":{"show":"cctv","des":"cctv","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"cntv":{"show":"cntv","des":"cntv","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"funshion":{"show":"风行","des":"funshion","ps":"1","parse":"hhttps://vip.2ktvb.com/player/sg.php?url="},"wasu":{"show":"华数","des":"wasu","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"605m3u8":{"show":"605线","des":"支持手机电脑在线播放","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"bjm3u8":{"show":"八戒","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"dbm3u8":{"show":"百度线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"hnm3u8":{"show":"牛牛线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"igen":{"show":"爱跟线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"kbm3u8":{"show":"快播线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"lajiao":{"show":"辣椒","des":"","ps":"1","parse":"https://lajiaoapi.com/watch?url="},"tkm3u8":{"show":"天空线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"tsm3u8":{"show":"Ts线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"wjm3u8":{"show":"无尽线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"xigua":{"show":"西瓜线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/sg.php?url="},"xkm3u8":{"show":"想看线","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"jhyun":{"show":"聚合云","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"sdm3u8":{"show":"闪电线","des":"支持手机电脑在线播放","ps":"1","parse":"https://vip.2ktvb.com/player/?url="},"ddzy":{"show":"极速多线","des":"","ps":"1","parse":"https://bo.dd520.cc//xmplayer/?url="},"jscq":{"show":"极速超清","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?xf=languang&url="},"jslg":{"show":"极速蓝光","des":"","ps":"1","parse":"https://vip.2ktvb.com/player/?xf=languang&url="}}, + "filter": {"dianying":[{"key":3,"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":1,"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":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"lianxuju":[{"key":3,"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":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"dongman":[{"key":3,"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":"其他"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"zongyi":[{"key":3,"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":"音乐MV","v":"音乐MV"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"其它","v":"其它"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"shaoer":[{"key":3,"name":"分类","value":[{"n":"全部","v":""},{"n":"历险","v":"历险"},{"n":"奇幻","v":"奇幻"},{"n":"教育","v":"教 育"},{"n":"搞笑","v":"搞笑"},{"n":"教育","v":"教育"},{"n":"益智","v":"益智"}]},{"key":1,"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":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":11,"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":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"yinyue":[{"key":3,"name":"分类","value":[{"n":"全部","v":""},{"n":"MV","v":"MV"},{"n":"演唱会","v":"演唱会"},{"n":"音频","v":"音频"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"}]},{"key":4,"name":"语言","value":[{"n":"全部","v":""},{"n":"韩语","v":"韩语"},{"n":"粤语","v":"粤语"},{"n":"日语","v":"日语"},{"n":"英语","v":"英语"},{"n":"泰语","v":"泰语"},{"n":"国语","v":"国语"}]},{"key":11,"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"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + 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, ""] \ No newline at end of file diff --git a/plugin/py_gimytv.py b/plugin/py_gimytv.py new file mode 100644 index 0000000..669fced --- /dev/null +++ b/plugin/py_gimytv.py @@ -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, ""] \ No newline at end of file diff --git a/plugin/py_gitcafe.py b/plugin/py_gitcafe.py new file mode 100644 index 0000000..7f4c2f1 --- /dev/null +++ b/plugin/py_gitcafe.py @@ -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, ""] \ No newline at end of file diff --git a/plugin/py_huya.py b/plugin/py_huya.py new file mode 100644 index 0000000..7649af5 --- /dev/null +++ b/plugin/py_huya.py @@ -0,0 +1,883 @@ +#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 = { + "一起看": "一起看", + "三国杀": "三国杀", + "网游竞技": "网游竞技", +"英雄联盟": "英雄联盟", +"王者荣耀": "王者荣耀", +"英雄联盟电竞经理": "英雄联盟电竞经理", +"一起看": "一起看", +"星秀": "星秀", +"暗黑破坏神:不朽": "暗黑破坏神:不朽", +"暗区突围": "暗区突围", +"生死狙击2": "生死狙击2", +"户外": "户外", +"金铲铲之战": "金铲铲之战", +"和平精英": "和平精英", +"英雄联盟手游": "英雄联盟手游", +"天天吃鸡": "天天吃鸡", +"lol云顶之弈": "lol云顶之弈", +"剑侠世界3": "剑侠世界3", +"不良人3": "不良人3", +"二次元": "二次元", +"穿越火线": "穿越火线", +"主机游戏": "主机游戏", +"美食": "美食", +"综合手游": "综合手游", +"暴雪专区": "暴雪专区", +"颜值": "颜值", +"CF手游": "CF手游", +"交友": "交友", +"地下城与勇士": "地下城与勇士", +"新游广场": "新游广场", +"体育": "体育", +"棋牌桌游": "棋牌桌游", +"我的世界": "我的世界", +"炉石传说": "炉石传说", +"魔兽世界": "魔兽世界", +"QQ飞车手游": "QQ飞车手游", +"DOTA2": "DOTA2", +"方舟": "方舟", +"跑跑卡丁车手游": "跑跑卡丁车手游", +"火影忍者手游": "火影忍者手游", +"球球大作战": "球球大作战", +"CS:GO": "CS:GO", +"DOTA1": "DOTA1", +"QQ飞车": "QQ飞车", +"问道": "问道", +"魔兽争霸3": "魔兽争霸3", +"逆战": "逆战", +"梦三国": "梦三国", +"三国杀": "三国杀", +"网游竞技": "网游竞技", +"手游休闲": "手游休闲", +"娱乐天地": "娱乐天地", +"放映厅": "放映厅", +"单机热游": "单机热游", +"组队": "组队", +"二次元手游": "二次元手游", +"吃喝玩乐": "吃喝玩乐", +"原神": "原神", +"MMORPG": "MMORPG", +"互动点播": "互动点播", +"动作游戏": "动作游戏", +"永劫无间": "永劫无间", +"原创": "原创", +"虎牙地方": "虎牙地方", +"传奇": "传奇", +"御龙在天": "御龙在天", +"军事游戏": "军事游戏", +"传奇类游戏": "传奇类游戏", +"射击综合游戏": "射击综合游戏", +"幻塔": "幻塔", +"战争冲突": "战争冲突", +"虎牙领主争霸": "虎牙领主争霸", +"王者模拟战": "王者模拟战", +"坦克世界": "坦克世界", +"一起玩": "一起玩", +"传奇手游": "传奇手游", +"天龙八部手游": "天龙八部手游", +"虎牙文化": "虎牙文化", +"明日之后": "明日之后", +"Dread Hunger": "Dread Hunger", +"艾尔登法环": "艾尔登法环", +"永恒之塔": "永恒之塔", +"英魂之刃": "英魂之刃", +"第五人格": "第五人格", +"COD手游": "COD手游", +"虚拟偶像": "虚拟偶像", +"音乐": "音乐", +"彩虹岛Online": "彩虹岛Online", +"趣分享": "趣分享", +"逃离塔科夫": "逃离塔科夫", +"狼人杀手游": "狼人杀手游", +"探索": "探索", +"剑灵": "剑灵", +"Apex英雄": "Apex英雄", +"炉石战棋": "炉石战棋", +"DNF手游": "DNF手游", +"欢乐麻将": "欢乐麻将", +"天涯明月刀手游": "天涯明月刀手游", +"怀旧游戏": "怀旧游戏", +"冒险岛": "冒险岛", +"俄罗斯钓鱼4": "俄罗斯钓鱼4", +"欢乐斗地主": "欢乐斗地主", +"神武4手游": "神武4手游", +"起凡:群雄逐鹿": "起凡:群雄逐鹿", +"部落:上升": "部落:上升", +"御龙在天手游": "御龙在天手游", +"体育游戏": "体育游戏", +"神武4电脑版": "神武4电脑版", +"诛仙3": "诛仙3", +"CFHD": "CFHD", +"热血江湖": "热血江湖", +"枪神纪": "枪神纪", +"QQ三国": "QQ三国", +"英雄杀": "英雄杀", +"九阴真经": "九阴真经", +"三国志战略版": "三国志战略版", +"天天狼人": "天天狼人", +"NBA2KOL系列": "NBA2KOL系列", +"征途": "征途", +"多乐棋牌": "多乐棋牌", +"问道手游": "问道手游", +"寻仙": "寻仙", +"龙之谷": "龙之谷", +"草根传奇": "草根传奇", +"阴阳师": "阴阳师", +"暗黑破坏神": "暗黑破坏神", +"直播购": "直播购", +"忍者必须死3": "忍者必须死3", +"DayZ独立版": "DayZ独立版", +"荒野行动PC版": "荒野行动PC版", +"斗战神": "斗战神", +"迷你世界": "迷你世界", +"逆水寒": "逆水寒", +"恐惧之间": "恐惧之间", +"斗罗大陆:魂师对决": "斗罗大陆:魂师对决", +"战舰世界": "战舰世界", +"反恐精英Online": "反恐精英Online", +"狼人杀": "狼人杀", +"妄想山海": "妄想山海", +"旅游": "旅游", +"刀剑英雄": "刀剑英雄", +"流放之路": "流放之路", +"摔跤城大乱斗": "摔跤城大乱斗", +"诛仙世界": "诛仙世界", +"QQ华夏": "QQ华夏", +"奶块": "奶块", +"生死狙击": "生死狙击", +"部落冲突": "部落冲突", +"魔兽世界怀旧服": "魔兽世界怀旧服", +"香肠派对": "香肠派对", +"恐鬼症": "恐鬼症", +"创造与魔法": "创造与魔法", +"完美世界手游": "完美世界手游", +"率土之滨": "率土之滨", +"星球大战系列": "星球大战系列", +"SKY光遇": "SKY光遇", +"铁甲雄兵": "铁甲雄兵", +"JJ棋牌": "JJ棋牌", +"派对": "派对", +"大唐无双零": "大唐无双零", +"梦幻新诛仙": "梦幻新诛仙", +"巅峰战舰": "巅峰战舰", +"星际战甲": "星际战甲", +"崩坏3": "崩坏3", +"欧洲卡车模拟": "欧洲卡车模拟", +"绿茵信仰": "绿茵信仰", +"狼人杀官方": "狼人杀官方", +"逃跑吧!少年": "逃跑吧!少年", +"征途2": "征途2", +"新倩女幽魂": "新倩女幽魂", +"天涯明月刀": "天涯明月刀", +"天天象棋": "天天象棋", +"倩女幽魂手游": "倩女幽魂手游", +"武侠乂手游": "武侠乂手游", +"怪物猎人:崛起": "怪物猎人:崛起", +"中国象棋": "中国象棋", +"怪物猎人物语": "怪物猎人物语", +"饥荒": "饥荒", +"失落的方舟": "失落的方舟", +"天谕手游": "天谕手游", +"重返帝国": "重返帝国", +"梦想世界3": "梦想世界3", +"大话西游2": "大话西游2", +"互动剧游": "互动剧游", +"万国觉醒": "万国觉醒", +"完美端游系列": "完美端游系列", +"斗破苍穹手游": "斗破苍穹手游", +"新笑傲江湖": "新笑傲江湖", +"多多自走棋": "多多自走棋", +"天天酷跑": "天天酷跑", +"天翼决": "天翼决", +"甜蜜之家": "甜蜜之家", +"守望先锋": "守望先锋", +"弹弹堂手游": "弹弹堂手游", +"反恐行动online": "反恐行动online", +"新剑侠情缘手游": "新剑侠情缘手游", +"英魂之刃口袋版": "英魂之刃口袋版", +"云上城之歌": "云上城之歌", +"FIFA Online系列": "FIFA Online系列", +"奇迹MU:觉醒": "奇迹MU:觉醒", +"千年3": "千年3", +"无期迷途": "无期迷途", +"造梦西游OL": "造梦西游OL", +"SCUM": "SCUM", +"超击突破": "超击突破", +"港诡实录": "港诡实录", +"丝路传说2": "丝路传说2", +"纸人": "纸人", +"无神之界": "无神之界", +"战争雷霆": "战争雷霆", +"剑网3": "剑网3", +"武林外传一世琴缘": "武林外传一世琴缘", +"命运2": "命运2", +"最强NBA": "最强NBA", +"QQ自由幻想": "QQ自由幻想", +"时空猎人3": "时空猎人3", +"逆水寒手游": "逆水寒手游", +"星际争霸": "星际争霸", +"航海王热血航线": "航海王热血航线", +"王牌竞速": "王牌竞速", +"战地5": "战地5", +"精灵盛典:黎明": "精灵盛典:黎明", +"永恒纪元:戒": "永恒纪元:戒", +"神泣": "神泣", +"骑马与砍杀系列": "骑马与砍杀系列", +"只狼:影逝二度": "只狼:影逝二度", +"北凉悍刀行": "北凉悍刀行", +"洛克王国": "洛克王国", +"植物大战僵尸": "植物大战僵尸", +"三国战纪2": "三国战纪2", +"跑跑卡丁车": "跑跑卡丁车", +"全民枪战2": "全民枪战2", +"远征Online梦想版": "远征Online梦想版", +"诛仙手游": "诛仙手游", +"方舟手游": "方舟手游", +"混沌起源": "混沌起源", +"雷曼:传奇": "雷曼:传奇", +"怪物猎人世界": "怪物猎人世界", +"育碧游戏": "育碧游戏", +"FIFA足球世界": "FIFA足球世界", +"黎明觉醒": "黎明觉醒", +"荒野乱斗": "荒野乱斗", +"007:传奇": "007:传奇", +"天下": "天下", +"极限竞速:地平线": "极限竞速:地平线", +"龙之谷2手游": "龙之谷2手游", +"蛋仔派对": "蛋仔派对", +"虎牙球球": "虎牙球球", +"Badlanders": "Badlanders", +"激战2": "激战2", +"征途2手游": "征途2手游", +"剑灵:革命": "剑灵:革命", +"绝世仙王": "绝世仙王", +"超激斗梦境": "超激斗梦境", +"航海王:燃烧意志": "航海王:燃烧意志", +"红警OL": "红警OL", +"使命召唤系列": "使命召唤系列", +"QQ幻想": "QQ幻想", +"岛": "岛", +"消逝的光芒2": "消逝的光芒2", +"海岛奇兵": "海岛奇兵", +"战意": "战意", +"三国志": "三国志", +"荒野大镖客2": "荒野大镖客2", +"黑色沙漠": "黑色沙漠", +"极光世界 弑神传": "极光世界 弑神传", +"音乐游戏": "音乐游戏", +"九灵神域": "九灵神域", +"QQ幻想世界": "QQ幻想世界", +"Lost Light(萤火突击国际服)": "Lost Light(萤火突击国际服)", +"新飞飞(FlyFF)": "新飞飞(FlyFF)", +"深空之眼": "深空之眼", +"新斗罗大陆": "新斗罗大陆", +"坦克大战": "坦克大战", +"三国战纪": "三国战纪", +"猎人:荒野的召唤": "猎人:荒野的召唤", +"真·三国无双OL": "真·三国无双OL", +"VALORANT": "VALORANT", +"风云": "风云", +"贪玩蓝月": "贪玩蓝月", +"决战平安京": "决战平安京", +"拳皇命运": "拳皇命运", +"其他单机": "其他单机", +"QQ仙侠传": "QQ仙侠传", +"奥拉星": "奥拉星", +"荣耀新三国": "荣耀新三国", +"寻仙手游": "寻仙手游", +"罗布乐思": "罗布乐思", +"盗贼之海": "盗贼之海", +"一念逍遥": "一念逍遥", +"一梦江湖": "一梦江湖", +"实况足球": "实况足球", +"Among Us": "Among Us", +"热血江湖手游": "热血江湖手游", +"皇室战争": "皇室战争", +"FIFA Online4": "FIFA Online4", +"糖豆人:终极淘汰赛": "糖豆人:终极淘汰赛", +"轩辕传奇": "轩辕传奇", +"哈利波特:魔法觉醒": "哈利波特:魔法觉醒", +"无尽的拉格朗日": "无尽的拉格朗日", +"明日方舟": "明日方舟", +"都市:天际线": "都市:天际线", +"醉逍遥": "醉逍遥", +"使命召唤:战区": "使命召唤:战区", +"王牌战争:文明重启": "王牌战争:文明重启", +"诺亚传说": "诺亚传说", +"黑色沙漠手游": "黑色沙漠手游", +"真三国无双霸": "真三国无双霸", +"希望OL": "希望OL", +"梦三国手游": "梦三国手游", +"斗罗大陆": "斗罗大陆", +"天谕": "天谕", +"梦幻诛仙手游": "梦幻诛仙手游", +"大话西游手游": "大话西游手游", +"新剑侠情缘": "新剑侠情缘", +"天天吃鸡手机版": "天天吃鸡手机版", +"九霄缳神记": "九霄缳神记", +"夜族崛起": "夜族崛起", +"雀魂麻将": "雀魂麻将", +"魂斗罗:归来": "魂斗罗:归来", +"游戏王:决斗链接": "游戏王:决斗链接", +"天命西游": "天命西游", +"笑傲江湖": "笑傲江湖", +"QQ炫舞": "QQ炫舞", +"帝国时代4": "帝国时代4", +"征途手游": "征途手游", +"漫威超级战争": "漫威超级战争", +"奥奇传说手游": "奥奇传说手游", +"双人成行": "双人成行", +"完美世界:诸神之战": "完美世界:诸神之战", +"指尖四川麻将": "指尖四川麻将", +"幽灵线:东京": "幽灵线:东京", +"庆余年手游": "庆余年手游", +"拳皇98终极之战OL": "拳皇98终极之战OL", +"剑侠世界": "剑侠世界", +"海底大作战": "海底大作战", +"单机手游": "单机手游", +"全面战争:三国": "全面战争:三国", +"鸿图之下": "鸿图之下", +"刺客信条": "刺客信条", +"青云诀2": "青云诀2", +"火影忍者OL": "火影忍者OL", +"泡泡堂": "泡泡堂", +"装甲战争": "装甲战争", +"QQ炫舞手游": "QQ炫舞手游", +"星辰变": "星辰变", +"战术小队": "战术小队", +"枪火重生": "枪火重生", +"洛奇英雄传": "洛奇英雄传", +"真三国无双": "真三国无双", +"起凡游戏三国争霸": "起凡游戏三国争霸", +"死亡之夜": "死亡之夜", +"极品飞车系列": "极品飞车系列", +"堡垒之夜": "堡垒之夜", +"任天堂专区": "任天堂专区", +"霸王2": "霸王2", +"魔戒:中土大战": "魔戒:中土大战", +"APEX手游": "APEX手游", +"猫和老鼠": "猫和老鼠", +"文明与征服": "文明与征服", +"幻世九歌": "幻世九歌", +"灵魂筹码": "灵魂筹码", +"仁王2": "仁王2", +"帝国时代系列": "帝国时代系列", +"梦幻诛仙2": "梦幻诛仙2", +"少年三国志2": "少年三国志2", +"摩尔庄园": "摩尔庄园", +"魔力宝贝": "魔力宝贝", +"球球英雄": "球球英雄", +"坦克世界闪击战": "坦克世界闪击战", +"决胜三国": "决胜三国", +"风云岛行动": "风云岛行动", +"仙境传说RO": "仙境传说RO", +"剑侠世界2手游": "剑侠世界2手游", +"时空召唤": "时空召唤", +"全面战争": "全面战争", +"鬼泣": "鬼泣", +"鬼谷八荒": "鬼谷八荒", +"地铁跑酷": "地铁跑酷", +"决斗之城": "决斗之城", +"我的勇者": "我的勇者", +"QQ华夏手游": "QQ华夏手游", +"黑暗与光明手游": "黑暗与光明手游", +"腾讯桌球": "腾讯桌球", +"帝国神话": "帝国神话", +"王牌战士": "王牌战士", +"赛尔号": "赛尔号", +"奥奇传说": "奥奇传说", +"模拟农场": "模拟农场", +"火线精英": "火线精英", +"天堂 W": "天堂 W", +"仙剑奇侠传七": "仙剑奇侠传七", +"古剑奇谭OL": "古剑奇谭OL", +"千古风流": "千古风流", +"释厄英雄": "释厄英雄", +"影之刃3": "影之刃3", +"太荒初境": "太荒初境", +"奥比岛:梦想国度": "奥比岛:梦想国度", +"机动都市阿尔法": "机动都市阿尔法", +"奥拉星手游": "奥拉星手游", +"电竞传奇": "电竞传奇", +"轩辕传奇手游": "轩辕传奇手游", +"军棋": "军棋", +"新大话西游3": "新大话西游3", +"斗罗大陆-斗神再临": "斗罗大陆-斗神再临", +"使命召唤:黑色行动4": "使命召唤:黑色行动4", +"猎魂觉醒": "猎魂觉醒", +"第九大陆": "第九大陆", +"对马岛之魂": "对马岛之魂", +"剑网1:归来": "剑网1:归来", +"疾风之刃": "疾风之刃", +"神武2": "神武2", +"口袋觉醒": "口袋觉醒", +"天堂": "天堂", +"流星群侠传": "流星群侠传", +"我叫MT4": "我叫MT4", +"飙酷车神": "飙酷车神", +"看门狗:军团": "看门狗:军团", +"绝区零": "绝区零", +"全球使命": "全球使命", +"泰坦陨落": "泰坦陨落", +"武魂2": "武魂2", +"三国之刃": "三国之刃", +"深海迷航": "深海迷航", +"宝可梦:剑盾": "宝可梦:剑盾", +"冒险男爵": "冒险男爵", +"龙武手游": "龙武手游", +"传奇天下": "传奇天下", +"热血江湖2": "热血江湖2", +"魔侠传": "魔侠传", +"火炬之光:无限": "火炬之光:无限", +"封印者": "封印者", +"新盗墓笔记": "新盗墓笔记", +"一拳超人:最强之男": "一拳超人:最强之男", +"剑侠情缘2剑歌行": "剑侠情缘2剑歌行", +"凡人修仙传Online": "凡人修仙传Online", +"非人学园": "非人学园", +"全球行动": "全球行动", +"仙剑奇侠传五": "仙剑奇侠传五", +"流放者柯南": "流放者柯南", +"封神榜(国际版)": "封神榜(国际版)", +"热血街篮": "热血街篮", +"石油骚动": "石油骚动", +"奇葩战斗家": "奇葩战斗家", +"传世无双": "传世无双", +"流星蝴蝶剑": "流星蝴蝶剑", +"武装突袭": "武装突袭", +"蛇蛇争霸": "蛇蛇争霸", +"环世界": "环世界", +"极品飞车Online": "极品飞车Online", +"霸刀群侠传online": "霸刀群侠传online", +"保卫萝卜3": "保卫萝卜3", +"渡神记": "渡神记", +"EVE星战前夜:无烬星河": "EVE星战前夜:无烬星河", +"幽灵行动:荒野": "幽灵行动:荒野", +"永恒轮回": "永恒轮回", +"三国志:幻想大陆": "三国志:幻想大陆", +"虎牙吃鸡": "虎牙吃鸡", +"天使之战": "天使之战", +"绿色征途": "绿色征途", +"炫舞时代": "炫舞时代", +"霓虹深渊": "霓虹深渊", +"四海兄弟": "四海兄弟", +"无尽传奇": "无尽传奇", +"归家异途": "归家异途", +"魔力宝贝:旅人": "魔力宝贝:旅人", +"逆境求生": "逆境求生", +"猫之城": "猫之城", +"英雄三国": "英雄三国", +"新游推荐": "新游推荐", +"赤壁": "赤壁", +"成吉思汗怀旧版": "成吉思汗怀旧版", +"无人深空": "无人深空", +"战争怒吼": "战争怒吼", +"街机游戏": "街机游戏", +"一刀流": "一刀流", +"米加小镇": "米加小镇", +"剑网3指尖对弈": "剑网3指尖对弈", +"风云龙战天下": "风云龙战天下", +"时空猎人": "时空猎人", +"天国:拯救": "天国:拯救", +"荣耀大天使": "荣耀大天使", +"龙与家园": "龙与家园", +"橙光": "橙光", +"斗罗大陆:武魂觉醒": "斗罗大陆:武魂觉醒", +"元气骑士": "元气骑士", +"无尽神域": "无尽神域", +"新水浒Q传": "新水浒Q传", +"月圆之夜": "月圆之夜", +"台球大师": "台球大师", +"圣境传说": "圣境传说", +"梦幻龙族II": "梦幻龙族II", +"仙魔决": "仙魔决", +"欢喜斗地主": "欢喜斗地主", +"未来之役": "未来之役", +"天使纪元": "天使纪元", +"天堂2:血盟": "天堂2:血盟", +"三国群英传7": "三国群英传7", +"玄中记": "玄中记", +"我在江湖之神魔道": "我在江湖之神魔道", +"战地之王": "战地之王", +"热血三国": "热血三国", +"刀塔传奇": "刀塔传奇", +"神雕侠侣2": "神雕侠侣2", +"成吉思汗3": "成吉思汗3", +"全球使命3": "全球使命3", +"九界": "九界", +"劲舞团": "劲舞团", +"皇帝成长计划2": "皇帝成长计划2", +"乱世王者": "乱世王者", +"火星求生": "火星求生", +"Party Animals": "Party Animals", +"这是我的战争": "这是我的战争", +"山海经之魔蛙传说": "山海经之魔蛙传说", +"DJMAX三部曲": "DJMAX三部曲", +"足球小将": "足球小将", +"重生细胞": "重生细胞", +"狂野飙车9:竞速传奇": "狂野飙车9:竞速传奇", +"漫威蜘蛛侠": "漫威蜘蛛侠", +"文明6": "文明6", +"反恐精英Online 2": "反恐精英Online 2", +"街头篮球": "街头篮球", +"圣斗士星矢(腾讯)": "圣斗士星矢(腾讯)", +"战舰世界闪击战": "战舰世界闪击战", +"漫漫长夜": "漫漫长夜", +"缺氧": "缺氧", +"星露谷物语": "星露谷物语", +"蘑菇战争2": "蘑菇战争2", +"神之浩劫": "神之浩劫", +"虎豹骑": "虎豹骑", +"全面战争:阿提拉": "全面战争:阿提拉", +"皇家塔防": "皇家塔防", +"泰拉瑞亚手游": "泰拉瑞亚手游", +"乱世逐鹿": "乱世逐鹿", +"戴森球计划": "戴森球计划", +"提灯与地下城": "提灯与地下城", +"禁闭求生": "禁闭求生", +"动物派对手游": "动物派对手游", +"新世界": "新世界", +"喷射战士3": "喷射战士3", +"无限法则": "无限法则", +"魔渊之刃": "魔渊之刃", +"十二之天系列": "十二之天系列", +"魔之精灵": "魔之精灵", +"马里奥专区": "马里奥专区", +"星之海洋5": "星之海洋5", +"死亡细胞": "死亡细胞", +"狩猎时刻": "狩猎时刻", +"欢乐升级": "欢乐升级", +"围棋": "围棋", +"失落的王座": "失落的王座", +"全境封锁": "全境封锁", +"伤害世界": "伤害世界", +"超神传": "超神传", +"恶魔之魂": "恶魔之魂", +"战双:帕弥什": "战双:帕弥什", +"剑网3:指尖江湖": "剑网3:指尖江湖", +"雨中冒险": "雨中冒险", +"哈迪斯": "哈迪斯", +"自由幻想手游": "自由幻想手游", +"反恐精英": "反恐精英", +"斗破仙途": "斗破仙途", +"蜘蛛侠系列": "蜘蛛侠系列", +"魔法门之英雄无敌系列": "魔法门之英雄无敌系列", +"武魂": "武魂", +"骑士物语": "骑士物语", +"剑与家园": "剑与家园", +"三界争锋": "三界争锋", +"金星登陆器": "金星登陆器", +"SD敢达Online": "SD敢达Online", +"马里奥赛车8": "马里奥赛车8", +"最终幻想系列": "最终幻想系列", +"烽火三国": "烽火三国", +"永劫无间手游": "永劫无间手游", +"航海王:启航": "航海王:启航", +"女鬼桥:开魂路": "女鬼桥:开魂路", +"武侠乂": "武侠乂", +"龙武": "龙武", +"造梦西游4手机版": "造梦西游4手机版", +"火影忍者:究极风暴系列": "火影忍者:究极风暴系列", +"Steamcraft": "Steamcraft", +"忍者村大战2": "忍者村大战2", +"新挑战": "新挑战", +"圣斗士星矢ol": "圣斗士星矢ol", +"仙之痕手游": "仙之痕手游", +"挨饿荒野": "挨饿荒野", +"攻城掠地": "攻城掠地", +"龙之国物语": "龙之国物语", +"戎马丹心之汉匈决战": "戎马丹心之汉匈决战", +"仙剑奇侠传OL手游": "仙剑奇侠传OL手游", +"群侠传": "群侠传", +"美丽水世界": "美丽水世界", +"斩魂": "斩魂", +"闪克": "闪克", +"蚁族崛起": "蚁族崛起", +"口袋妖怪": "口袋妖怪", +"全民斩仙": "全民斩仙", +"航海世纪": "航海世纪", +"野兽传奇": "野兽传奇", +"龙与地下城Online": "龙与地下城Online", +"小缇娜的奇幻之地": "小缇娜的奇幻之地", +"紫塞秋风": "紫塞秋风", +"荒野行动": "荒野行动", +"保卫萝卜2": "保卫萝卜2", +"战神": "战神", +"黄易群侠传2": "黄易群侠传2", +"全面战争:竞技场": "全面战争:竞技场", +"玄真道": "玄真道", +"蜀山剑侠传": "蜀山剑侠传", +"古剑奇谭3": "古剑奇谭3", +"有杀气童话2": "有杀气童话2", +"神将三国": "神将三国", +"原始征途": "原始征途", +"斗斗堂": "斗斗堂", +"领地人生": "领地人生", +"小森生活": "小森生活", +"塞尔达传说:荒野之息": "塞尔达传说:荒野之息", +"国战ONLINE": "国战ONLINE", +"真武传": "真武传", +"轩辕剑外传:云之遥": "轩辕剑外传:云之遥", +"禅游斗地主": "禅游斗地主", +"梦幻模拟战": "梦幻模拟战", +"大唐2": "大唐2", +"重力": "重力", +"蜀山神话": "蜀山神话", +"微软模拟飞行2020": "微软模拟飞行2020", +"狙击手:幽灵战士": "狙击手:幽灵战士", +"飞龙在天传奇": "飞龙在天传奇", +"闪烁之光": "闪烁之光", +"火影小时代": "火影小时代", +"狂刃": "狂刃", +"复仇者联盟": "复仇者联盟", +"神佑释放": "神佑释放", +"全球使命(国际版)": "全球使命(国际版)", +"环形战争": "环形战争", +"新射雕群侠传": "新射雕群侠传", +"远古战争国度(古域之战)": "远古战争国度(古域之战)", +"龙族幻想": "龙族幻想", +"剑侠情缘手游": "剑侠情缘手游", +"剑与远征手游": "剑与远征手游", +"创世理想乡": "创世理想乡", +"幻想神域": "幻想神域", +"警匪杀": "警匪杀", +"地城之光": "地城之光", +"新惊天动地": "新惊天动地", +"一剑斩仙": "一剑斩仙", +"FF14": "FF14", +"不良人2": "不良人2", +"坎公骑冠剑": "坎公骑冠剑", +"瑞奇与叮当": "瑞奇与叮当", +"最终幻想:起源": "最终幻想:起源", +"玄天之剑": "玄天之剑", +"逃脱者2": "逃脱者2", +"远征军:征服者": "远征军:征服者", +"黑暗领域2": "黑暗领域2", +"精灵与萤火意志": "精灵与萤火意志", +"三国": "三国", +"神界2": "神界2", +"诺亚之心": "诺亚之心", +"梦想世界3手游": "梦想世界3手游", +"一起玩农场": "一起玩农场", +"EVE Online": "EVE Online", +"龙族血统": "龙族血统", +"切尔诺贝利突击队": "切尔诺贝利突击队", +"蜀门": "蜀门", +"鹿鼎记": "鹿鼎记", +"五子棋": "五子棋", +"格斗游戏": "格斗游戏", +"环绕走廊": "环绕走廊", +"天穗之咲稻姬": "天穗之咲稻姬", +"重写三国志": "重写三国志", +"Factorio": "Factorio", +"废品机械师": "废品机械师", +"血染钟楼": "血染钟楼", +"神魔": "神魔", +"逆战手游": "逆战手游", +"大唐仙妖劫": "大唐仙妖劫", +"猎杀:恶魔熔炉": "猎杀:恶魔熔炉", +"头文字D": "头文字D", +"暗黑血统2": "暗黑血统2", +"奥日与黑暗森林": "奥日与黑暗森林", +"吞食天地3": "吞食天地3", +"风暴英雄": "风暴英雄", +"最后一炮": "最后一炮", +"人类一败涂地": "人类一败涂地", +"轩辕剑三:天之痕": "轩辕剑三:天之痕", +"黑暗地带:51区": "黑暗地带:51区", +"异能都市": "异能都市", +"订阅": "订阅", +"直播": "直播", +"赛事": "赛事", +"网游": "网游", +"单机": "单机", +"娱乐": "娱乐", +"手游": "手游", +"QQ飞车全国公开赛端游赛道": "QQ飞车全国公开赛端游赛道", +"暴雪游戏频道": "暴雪游戏频道", +"LCK夏季赛": "LCK夏季赛", +"英雄联盟": "英雄联盟", +"LOL云顶之弈": "LOL云顶之弈", +"穿越火线": "穿越火线", +"DNF": "DNF", +"射击综合": "射击综合", +"炉石传说": "炉石传说", +"DOTA2": "DOTA2", +"魔兽争霸3": "魔兽争霸3", +"CS:GO": "CS:GO", +"逆战": "逆战", +"生死狙击2": "生死狙击2", +"QQ飞车": "QQ飞车", +"天天吃鸡": "天天吃鸡", +"主机游戏": "主机游戏", +"我的世界": "我的世界", +"方舟": "方舟", +"永劫无间": "永劫无间", +"逃离塔科夫": "逃离塔科夫", +"怀旧游戏": "怀旧游戏", +"互动点播": "互动点播", +"Dread Hunger": "Dread Hunger", +"星秀": "星秀", +"户外": "户外", +"二次元": "二次元", +"一起看": "一起看", +"美食": "美食", +"颜值": "颜值", +"交友": "交友", +"体育": "体育", +"组队": "组队", +"王者荣耀": "王者荣耀", +"和平精英": "和平精英", +"LOL电竞经理": "LOL电竞经理", +"LOL手游": "LOL手游", +"新游广场": "新游广场", +"金铲铲之战": "金铲铲之战", +"暗区突围": "暗区突围", +"火影忍者手游": "火影忍者手游", +"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=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['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=huya&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 = 'https://mp.huya.com/cache.php?m=Live&do=profileRoom&roomid={0}'.format(id) + rsp = self.fetch(url) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['stream']['baseSteamInfoList'][0]['sStreamName'] + url = 'http://txtest-xp2p.p2p.huya.com/src/' + ja + '.xs?ratio=4000' + + 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, ""] \ No newline at end of file diff --git a/plugin/py_kuaikan.py b/plugin/py_kuaikan.py new file mode 100644 index 0000000..c6c4287 --- /dev/null +++ b/plugin/py_kuaikan.py @@ -0,0 +1,105 @@ +#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 homeContent(self,filter): + result = {} + cateManual = { + "电视剧":"2", + "电影":"1", + "综艺":"3", + "动漫":"4", + "纪录片": "5" + } + 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://api.8a5.cn/parse/kuaikan/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 = 'http://api.8a5.cn/parse/kuaikan/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 = 'http://api.8a5.cn/parse/kuaikan/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 = 'http://api.8a5.cn/parse/kuaikan/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 = {} + if 'api.8a5.cn' in id: + rsp = self.fetch(id) + alists = json.loads(rsp.text) + id = alists['url'] + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = id + return result + + config = { + "player": {}, + "filter":{"2":[{"key":"area","name":"地区","value":[{"n":"全部","v":0},{"n":"内地","v":1},{"n":"中国香港","v":2},{"n":"中国台湾","v":3},{"n":"韩国","v":4},{"n":"日本","v":5},{"n":"泰国","v":6},{"n":"美国","v":7},{"n":"英国","v":8},{"n":"新加坡","v":9},{"n":"法国","v":10},{"n":"德国","v":11},{"n":"印度","v":12},{"n":"欧美","v":13},{"n":"其他","v":14}]},{"key":"year","name":"年份","value":[{"n":"全部","v":0},{"n":"2022","v":20},{"n":"2021","v":19},{"n":"2020","v":18},{"n":"2019","v":17},{"n":"2018","v":16},{"n":"2017","v":15},{"n":"2016","v":14},{"n":"2015","v":13},{"n":"2014","v":12},{"n":"2013","v":11},{"n":"2012","v":10},{"n":"2011","v":9},{"n":"2010","v":8},{"n":"2009","v":7},{"n":"2008","v":6},{"n":"2007","v":5},{"n":"2006","v":4},{"n":"2005","v":3},{"n":"2004","v":2},{"n":"更早","v":1}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":0},{"n":"剧情","v":2},{"n":"爱情","v":21},{"n":"犯罪","v":23},{"n":"搞笑","v":34},{"n":"武侠","v":19},{"n":"都市","v":6},{"n":"家庭","v":16},{"n":"职场","v":42},{"n":"国产","v":112},{"n":"国产剧","v":113},{"n":"年代","v":110},{"n":"文化","v":84},{"n":"网络剧","v":114},{"n":"芒果出品","v":115},{"n":"言情","v":1},{"n":"古装","v":8},{"n":"青春","v":15},{"n":"偶像","v":7},{"n":"伦理","v":3},{"n":"喜剧","v":4},{"n":"悬疑","v":5},{"n":"神话","v":13},{"n":"警匪","v":10},{"n":"历史","v":11},{"n":"励志","v":12},{"n":"情感","v":38},{"n":"战争","v":25},{"n":"电影版","v":74},{"n":"其他","v":79},{"n":"谍战","v":14},{"n":"校园","v":61},{"n":"农村","v":88},{"n":"动作","v":17},{"n":"传记","v":29},{"n":"科幻","v":20},{"n":"惊悚","v":31},{"n":"冒险","v":56},{"n":"同性","v":111},{"n":"恋爱","v":58},{"n":"奇幻","v":24},{"n":"生活","v":39},{"n":"歌舞","v":30},{"n":"恐怖","v":22},{"n":"原创","v":86},{"n":"魔幻","v":85},{"n":"战斗","v":80},{"n":"军旅","v":104},{"n":"文艺","v":27},{"n":"音乐","v":41},{"n":"新番动画","v":77},{"n":"刑侦","v":87},{"n":"情景","v":18},{"n":"玄幻","v":60},{"n":"军事","v":9},{"n":"经典","v":55},{"n":"推理","v":57},{"n":"革命","v":109},{"n":"纪录","v":28},{"n":"运动","v":66},{"n":"热血","v":53},{"n":"竞技","v":70},{"n":"童话","v":69},{"n":"友情","v":72},{"n":"少儿","v":46},{"n":"真人秀","v":33},{"n":"动画","v":26},{"n":"灾难","v":103},{"n":"纪实","v":48},{"n":"机战","v":63},{"n":"治愈","v":59},{"n":"时尚","v":44},{"n":"脱口秀","v":32},{"n":"美食","v":43},{"n":"戏曲","v":108},{"n":"人文","v":83},{"n":"完结动画","v":78},{"n":"社会","v":71},{"n":"益智","v":68},{"n":"亲子","v":64},{"n":"访谈","v":37},{"n":"游戏","v":45},{"n":"晚会","v":40},{"n":"美少女","v":54},{"n":"动物","v":62},{"n":"真人版","v":73},{"n":"科学","v":92},{"n":"内地","v":117}]}],"1":[{"key":"area","name":"地区","value":[{"n":"全部","v":0},{"n":"中国","v":1},{"n":"中国香港","v":2},{"n":"中国台湾","v":3},{"n":"韩国","v":4},{"n":"日本","v":5},{"n":"泰国","v":6},{"n":"美国","v":7},{"n":"英国","v":8},{"n":"新加坡","v":9},{"n":"法国","v":10},{"n":"德国","v":11},{"n":"印度","v":12},{"n":"欧美","v":13},{"n":"其他","v":14}]},{"key":"year","name":"年份","value":[{"n":"全部","v":0},{"n":"2022","v":20},{"n":"2021","v":19},{"n":"2020","v":18},{"n":"2019","v":17},{"n":"2018","v":16},{"n":"2017","v":15},{"n":"2016","v":14},{"n":"2015","v":13},{"n":"2014","v":12},{"n":"2013","v":11},{"n":"2012","v":10},{"n":"2011","v":9},{"n":"2010","v":8},{"n":"2009","v":7},{"n":"2008","v":6},{"n":"2007","v":5},{"n":"2006","v":4},{"n":"2005","v":3},{"n":"2004","v":2},{"n":"更早","v":1}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":0},{"n":"言情","v":1},{"n":"动作","v":17},{"n":"惊悚","v":31},{"n":"剧情","v":2},{"n":"科幻","v":20},{"n":"喜剧","v":4},{"n":"冒险","v":56},{"n":"动画","v":26},{"n":"悬疑","v":5},{"n":"恐怖","v":22},{"n":"文艺","v":27},{"n":"纪实","v":48},{"n":"爱情","v":21},{"n":"历史","v":11},{"n":"犯罪","v":23},{"n":"战争","v":25},{"n":"青春","v":15},{"n":"家庭","v":16},{"n":"传记","v":29},{"n":"奇幻","v":24},{"n":"电影版","v":74},{"n":"古装","v":8},{"n":"纪录","v":28},{"n":"恋爱","v":58},{"n":"伦理","v":3},{"n":"歌舞","v":30},{"n":"音乐","v":41},{"n":"推理","v":57},{"n":"武侠","v":19},{"n":"警匪","v":10},{"n":"科普","v":102},{"n":"灾难","v":103},{"n":"军旅","v":104},{"n":"戏曲","v":108},{"n":"革命","v":109},{"n":"文化","v":84},{"n":"运动","v":66},{"n":"社会","v":71},{"n":"年代","v":110},{"n":"同性","v":111},{"n":"励志","v":12},{"n":"热血","v":53},{"n":"教育","v":90},{"n":"神话","v":13},{"n":"谍战","v":14},{"n":"搞笑","v":34},{"n":"情感","v":38},{"n":"治愈","v":59},{"n":"校园","v":61},{"n":"枪战","v":98},{"n":"玄幻","v":60},{"n":"魔幻","v":85},{"n":"友情","v":72},{"n":"少儿","v":46},{"n":"体育","v":47},{"n":"经典","v":55},{"n":"军事","v":9},{"n":"脱口秀","v":32},{"n":"刑侦","v":87},{"n":"农村","v":88},{"n":"美食","v":43},{"n":"竞技","v":70},{"n":"都市","v":6},{"n":"其他","v":79},{"n":"真人版","v":73},{"n":"战斗","v":80},{"n":"完结动画","v":78},{"n":"美少女","v":54},{"n":"亲子","v":64},{"n":"生活","v":39},{"n":"时尚","v":44},{"n":"美术","v":49},{"n":"动物","v":62},{"n":"自然","v":89},{"n":"旅游","v":82},{"n":"人文","v":83},{"n":"真人秀","v":33},{"n":"访谈","v":37},{"n":"晚会","v":40},{"n":"职场","v":42},{"n":"财经","v":50},{"n":"偶像","v":7},{"n":"科学","v":92},{"n":"解说","v":93},{"n":"新闻","v":96},{"n":"内地","v":117},{"n":"明星","v":116},{"n":"国产","v":112},{"n":"益智","v":68},{"n":"儿歌","v":65},{"n":"相声","v":81}]}],"3":[{"key":"area","name":"地区","value":[{"n":"全部","v":0},{"n":"内地","v":1},{"n":"中国香港","v":2},{"n":"中国台湾","v":3},{"n":"韩国","v":4},{"n":"日本","v":5},{"n":"泰国","v":6},{"n":"美国","v":7},{"n":"英国","v":8},{"n":"新加坡","v":9},{"n":"法国","v":10},{"n":"德国","v":11},{"n":"印度","v":12},{"n":"欧美","v":13},{"n":"其他","v":14}]},{"key":"year","name":"年份","value":[{"n":"全部","v":0},{"n":"2022","v":20},{"n":"2021","v":19},{"n":"2020","v":18},{"n":"2019","v":17},{"n":"2018","v":16},{"n":"2017","v":15},{"n":"2016","v":14},{"n":"2015","v":13},{"n":"2014","v":12},{"n":"2013","v":11},{"n":"2012","v":10},{"n":"2011","v":9},{"n":"2010","v":8},{"n":"2009","v":7},{"n":"2008","v":6},{"n":"2007","v":5},{"n":"2006","v":4},{"n":"2005","v":3},{"n":"2004","v":2},{"n":"更早","v":1}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":0},{"n":"游戏","v":45},{"n":"推理","v":57},{"n":"真人秀","v":33},{"n":"生活","v":39},{"n":"言情","v":1},{"n":"青春","v":15},{"n":"爱情","v":21},{"n":"情感","v":38},{"n":"恋爱","v":58},{"n":"都市","v":6},{"n":"家庭","v":16},{"n":"电影版","v":74},{"n":"育儿","v":100},{"n":"脱口秀","v":32},{"n":"少儿","v":46},{"n":"动画","v":26},{"n":"教育","v":90},{"n":"亲子","v":64},{"n":"竞赛","v":101},{"n":"搞笑","v":34},{"n":"原创","v":86},{"n":"文化","v":84},{"n":"科普","v":102},{"n":"体育","v":47},{"n":"灾难","v":103},{"n":"同性","v":111},{"n":"时实","v":103},{"n":"军事","v":9},{"n":"军旅","v":104},{"n":"战争","v":25},{"n":"启蒙","v":105},{"n":"舞蹈","v":106},{"n":"竞技","v":70},{"n":"采访","v":107},{"n":"访谈","v":37},{"n":"戏曲","v":108},{"n":"革命","v":109},{"n":"历史","v":11},{"n":"纪录","v":28},{"n":"文艺","v":27},{"n":"传记","v":29},{"n":"人文","v":83},{"n":"文献","v":91},{"n":"音乐","v":41},{"n":"励志","v":12},{"n":"选秀","v":35},{"n":"动作","v":17},{"n":"冒险","v":56},{"n":"偶像","v":7},{"n":"剧情","v":2},{"n":"农村","v":88},{"n":"神话","v":13},{"n":"奇幻","v":24},{"n":"经典","v":55},{"n":"谍战","v":14},{"n":"歌舞","v":30},{"n":"美术","v":49},{"n":"校园","v":61},{"n":"社会","v":71},{"n":"旅游","v":82},{"n":"喜剧","v":4},{"n":"伦理","v":3},{"n":"悬疑","v":5},{"n":"科幻","v":20},{"n":"犯罪","v":23},{"n":"惊悚","v":31},{"n":"古装","v":8},{"n":"恐怖","v":22},{"n":"警匪","v":10},{"n":"纪实","v":48},{"n":"美食","v":43},{"n":"动物","v":62},{"n":"友情","v":72},{"n":"儿歌","v":65},{"n":"热血","v":53},{"n":"治愈","v":59},{"n":"运动","v":66},{"n":"魔幻","v":85},{"n":"晚会","v":40},{"n":"真人版","v":73},{"n":"益智","v":68},{"n":"分享","v":98},{"n":"其他","v":79},{"n":"自然","v":89},{"n":"相声","v":81},{"n":"八卦","v":36},{"n":"播报","v":52},{"n":"时尚","v":44},{"n":"汽车","v":51},{"n":"职场","v":42},{"n":"新闻","v":96},{"n":"财经","v":50},{"n":"科学","v":92},{"n":"教学","v":99},{"n":"解说","v":93},{"n":"枪战","v":98},{"n":"宣传","v":97},{"n":"战斗","v":80},{"n":"刑侦","v":87},{"n":"童话","v":69},{"n":"怪物","v":67},{"n":"武侠","v":19},{"n":"演讲","v":95},{"n":"明星","v":116},{"n":"游戏竞技","v":124}]}],"4":[{"key":"area","name":"\u5730\u533a","value":[{"n":"\u5168\u90e8","v":0},{"n":"\u5185\u5730","v":1},{"n":"\u4e2d\u56fd\u9999\u6e2f","v":2},{"n":"\u4e2d\u56fd\u53f0\u6e7e","v":3},{"n":"\u97e9\u56fd","v":4},{"n":"\u65e5\u672c","v":5},{"n":"\u6cf0\u56fd","v":6},{"n":"\u7f8e\u56fd","v":7},{"n":"\u82f1\u56fd","v":8},{"n":"\u65b0\u52a0\u5761","v":9},{"n":"\u6cd5\u56fd","v":10},{"n":"\u5fb7\u56fd","v":11},{"n":"\u5370\u5ea6","v":12},{"n":"\u6b27\u7f8e","v":13},{"n":"\u5176\u4ed6","v":14}]},{"key":"year","name":"\u5e74\u4efd","value":[{"n":"\u5168\u90e8","v":0},{"n":"2022","v":20},{"n":"2021","v":19},{"n":"2020","v":18},{"n":"2019","v":17},{"n":"2018","v":16},{"n":"2017","v":15},{"n":"2016","v":14},{"n":"2015","v":13},{"n":"2014","v":12},{"n":"2013","v":11},{"n":"2012","v":10},{"n":"2011","v":9},{"n":"2010","v":8},{"n":"2009","v":7},{"n":"2008","v":6},{"n":"2007","v":5},{"n":"2006","v":4},{"n":"2005","v":3},{"n":"2004","v":2},{"n":"\u66f4\u65e9","v":1}]},{"key":"class","name":"\u5267\u60c5","value":[{"n":"\u5168\u90e8","v":0},{"n":"\u559c\u5267","v":4},{"n":"\u53e4\u88c5","v":8},{"n":"\u6b66\u4fa0","v":19},{"n":"\u52a8\u753b","v":26},{"n":"\u8a00\u60c5","v":1},{"n":"\u5386\u53f2","v":11},{"n":"\u641e\u7b11","v":34},{"n":"\u5192\u9669","v":56},{"n":"\u9b54\u5e7b","v":85},{"n":"\u52b1\u5fd7","v":12},{"n":"\u9752\u6625","v":15},{"n":"\u7231\u60c5","v":21},{"n":"\u6821\u56ed","v":61},{"n":"\u5bb6\u5ead","v":16},{"n":"\u5947\u5e7b","v":24},{"n":"\u7ecf\u5178","v":55},{"n":"\u4eb2\u5b50","v":64},{"n":"\u5267\u60c5","v":2},{"n":"\u604b\u7231","v":58},{"n":"\u7f8e\u5c11\u5973","v":54},{"n":"\u8fd0\u52a8","v":66},{"n":"\u52a8\u4f5c","v":17},{"n":"\u4f26\u7406","v":3},{"n":"\u70ed\u8840","v":53},{"n":"\u60ac\u7591","v":5},{"n":"\u6050\u6016","v":22},{"n":"\u60ca\u609a","v":31},{"n":"\u5076\u50cf","v":7},{"n":"\u7384\u5e7b","v":60},{"n":"\u5e7b\u60f3","v":60},{"n":"\u7535\u5f71\u7248","v":74},{"n":"\u79d1\u5e7b","v":20},{"n":"\u804c\u573a","v":42},{"n":"\u5176\u4ed6","v":79},{"n":"\u6cbb\u6108","v":59},{"n":"\u90fd\u5e02","v":6},{"n":"\u65b0\u756a\u52a8\u753b","v":77},{"n":"\u751f\u6d3b","v":39},{"n":"\u6218\u6597","v":80},{"n":"\u80b2\u513f","v":100},{"n":"\u76ca\u667a","v":68},{"n":"\u6587\u5316","v":84},{"n":"\u771f\u4eba\u7248","v":73},{"n":"\u79d1\u666e","v":102},{"n":"\u52a8\u7269","v":62},{"n":"\u821e\u8e48","v":106},{"n":"\u795e\u8bdd","v":13},{"n":"\u6218\u4e89","v":25},{"n":"\u771f\u4eba\u79c0","v":33},{"n":"\u5c11\u513f","v":46},{"n":"\u7ae5\u8bdd","v":69},{"n":"\u5b8c\u7ed3\u52a8\u753b","v":78},{"n":"\u6559\u80b2","v":90},{"n":"\u7ade\u6280","v":70},{"n":"\u4f53\u80b2","v":47},{"n":"\u673a\u6218","v":63},{"n":"\u539f\u521b","v":86},{"n":"\u63a8\u7406","v":57},{"n":"\u6587\u827a","v":27},{"n":"\u60c5\u611f","v":38},{"n":"\u7f8e\u98df","v":43},{"n":"\u97f3\u4e50","v":41},{"n":"\u513f\u6b4c","v":65},{"n":"\u602a\u7269","v":67},{"n":"\u793e\u4f1a","v":71},{"n":"\u53cb\u60c5","v":72},{"n":"\u72af\u7f6a","v":23},{"n":"\u6b4c\u821e","v":30},{"n":"\u707e\u96be","v":103},{"n":"\u519b\u65c5","v":104},{"n":"\u5e74\u4ee3","v":110},{"n":"\u6e38\u620f","v":45},{"n":"\u540c\u6027","v":111},{"n":"\u5211\u4fa6","v":87},{"n":"TV\u7248","v":76},{"n":"\u8c0d\u6218","v":14},{"n":"OVA\u7248","v":75},{"n":"\u7eaa\u5f55","v":28},{"n":"\u4f20\u8bb0","v":29},{"n":"\u7f8e\u672f","v":49},{"n":"\u64ad\u62a5","v":52},{"n":"\u516b\u5366","v":36},{"n":"\u542f\u8499","v":105},{"n":"\u67aa\u6218","v":98},{"n":"\u81ea\u7136","v":89},{"n":"\u8131\u53e3\u79c0","v":32},{"n":"\u9009\u79c0","v":35},{"n":"\u65c5\u6e38","v":82},{"n":"\u7eaa\u5b9e","v":48},{"n":"\u60c5\u666f","v":18},{"n":"\u665a\u4f1a","v":40},{"n":"\u8bbf\u8c08","v":37},{"n":"\u65f6\u5c1a","v":44},{"n":"\u79d1\u5b66","v":92},{"n":"\u519b\u4e8b","v":9},{"n":"\u6587\u732e","v":91},{"n":"\u519c\u6751","v":88},{"n":"\u89e3\u8bf4","v":93},{"n":"\u65b0\u95fb","v":96},{"n":"\u8d22\u7ecf","v":50},{"n":"\u6c7d\u8f66","v":51},{"n":"\u56fd\u4ea7","v":112}]}],"5":[{"key":"area","name":"\u5730\u533a","value":[{"n":"\u5168\u90e8","v":0},{"n":"\u5185\u5730","v":1},{"n":"\u4e2d\u56fd\u9999\u6e2f","v":2},{"n":"\u4e2d\u56fd\u53f0\u6e7e","v":3},{"n":"\u97e9\u56fd","v":4},{"n":"\u65e5\u672c","v":5},{"n":"\u7f8e\u56fd","v":7},{"n":"\u82f1\u56fd","v":8},{"n":"\u6cd5\u56fd","v":10},{"n":"\u5fb7\u56fd","v":11},{"n":"\u5370\u5ea6","v":12},{"n":"\u6b27\u7f8e","v":13},{"n":"\u5176\u4ed6","v":14}]},{"key":"year","name":"\u5e74\u4efd","value":[{"n":"\u5168\u90e8","v":0},{"n":"2022","v":20},{"n":"2021","v":19},{"n":"2020","v":18},{"n":"2019","v":17},{"n":"2018","v":16},{"n":"2017","v":15},{"n":"2016","v":14},{"n":"2015","v":13},{"n":"2014","v":12},{"n":"2013","v":11},{"n":"2012","v":10},{"n":"2011","v":9},{"n":"2010","v":8},{"n":"2009","v":7},{"n":"2008","v":6},{"n":"2007","v":5},{"n":"2006","v":4},{"n":"2005","v":3},{"n":"2004","v":2},{"n":"\u66f4\u65e9","v":1}]},{"key":"class","name":"\u5267\u60c5","value":[{"n":"\u5168\u90e8","v":0},{"n":"\u5386\u53f2","v":11},{"n":"\u52b1\u5fd7","v":12},{"n":"\u72af\u7f6a","v":23},{"n":"\u793e\u4f1a","v":71},{"n":"\u6218\u4e89","v":25},{"n":"\u7eaa\u5f55","v":28},{"n":"\u7eaa\u5b9e","v":48},{"n":"\u81ea\u7136","v":89},{"n":"\u6587\u5316","v":84},{"n":"\u4f20\u8bb0","v":29},{"n":"\u97f3\u4e50","v":41},{"n":"\u89e3\u8bf4","v":93},{"n":"\u79d1\u666e","v":102},{"n":"\u795e\u8bdd","v":13},{"n":"\u9752\u6625","v":15},{"n":"\u5bb6\u5ead","v":16},{"n":"\u5267\u60c5","v":2},{"n":"\u7f8e\u98df","v":43},{"n":"\u5c11\u513f","v":46},{"n":"\u8fd0\u52a8","v":66},{"n":"\u5176\u4ed6","v":79},{"n":"\u79d1\u5e7b","v":20},{"n":"\u60ca\u609a","v":31},{"n":"\u52a8\u753b","v":26},{"n":"\u5192\u9669","v":56},{"n":"\u6587\u827a","v":27},{"n":"\u8131\u53e3\u79c0","v":32},{"n":"\u65b0\u95fb","v":96},{"n":"\u771f\u4eba\u79c0","v":33},{"n":"\u751f\u6d3b","v":39},{"n":"\u4f53\u80b2","v":47},{"n":"\u8d22\u7ecf","v":50},{"n":"\u52a8\u7269","v":62},{"n":"\u60c5\u611f","v":38},{"n":"\u7535\u5f71\u7248","v":74},{"n":"\u65c5\u6e38","v":82},{"n":"\u4eba\u6587","v":83},{"n":"\u519b\u4e8b","v":9},{"n":"\u6559\u80b2","v":90},{"n":"\u559c\u5267","v":4},{"n":"\u60ac\u7591","v":5},{"n":"\u6821\u56ed","v":61},{"n":"\u91c7\u8bbf","v":107},{"n":"\u79d1\u5b66","v":92}]}]} + } + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] diff --git a/plugin/py_lezhu.py b/plugin/py_lezhu.py new file mode 100644 index 0000000..00416d9 --- /dev/null +++ b/plugin/py_lezhu.py @@ -0,0 +1,230 @@ +# 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.lezhutv.com/ + result = {} + cateManual = { + "电影": "1", + "连续剧": "2", + "动漫": "4", + "综艺": "3", + "韩剧": "12", + "美剧": "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.lezhutv.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.lezhutv.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.lezhutv.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='module-info-item']") + 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") + + 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, '/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.lezhutv.com/index.php?m=vod-search&wd={0}".format(key) + rsp = self.fetch(url, headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[@class='tbox']/ul[@class='tbox_m']/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 playerContent(self, flag, id, vipFlags): + # https://meijuchong.cc/static/js/playerconfig.js + result = {} + url = 'http://www.lezhutv.com/play/{0}.html'.format(id) + rsp = self.fetch(url, headers=self.header) + view_path = self.regStr(rsp.text, 'var view_path = \'(\\S+)\';') + result["parse"] = 1 + result["playUrl"] = 'http://www.lezhutv.com/hls2/index.php?url=' + result["url"] = view_path + 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, ""] diff --git a/plugin/py_pansou.py b/plugin/py_pansou.py new file mode 100644 index 0000000..54fab0f --- /dev/null +++ b/plugin/py_pansou.py @@ -0,0 +1,92 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def getDependence(self): + return ['py_ali'] + def getName(self): + return "py_pansou" + def init(self,extend): + self.ali = extend[0] + print("============py_pansou============") + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + + def detailContent(self,array): + tid = array[0] + print(self.getName()) + pattern = '(https:\\/\\/www.aliyundrive.com\\/s\\/[^\\\"]+)' + url = self.regStr(tid,pattern) + if len(url) > 0: + return self.ali.detailContent(array) + + rsp = self.fetch('https://www.alipansou.com'+tid) + url = self.regStr(rsp.text,pattern) + if len(url) == 0: + return "" + url = url.replace('\\','') + newArray = [url] + print(newArray) + return self.ali.detailContent(newArray) + + + def searchContent(self,key,quick): + map = { + '7':'文件夹', + '1':'视频' + } + ja = [] + for tKey in map.keys(): + url = "https://www.alipansou.com/search?k={0}&t={1}".format(key,tKey) + rsp = self.fetch(url) + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//van-row/a") + for a in aList: + title = '' + # title = a.xpath('string(.//template/div)') + # title = self.cleanText(title).strip() + + divList = a.xpath('.//template/div') + for div in divList: + t = div.xpath('string(.)') + t = self.cleanText(t).strip() + title = title + t + if key in title: + pic = 'https://www.alipansou.com'+ self.xpText(a,'.//van-card/@thumb') + jo = { + 'vod_id': a.xpath('@href')[0], + 'vod_name': '[{0}]{1}'.format(key,title), + 'vod_pic': pic + } + ja.append(jo) + result = { + 'list':ja + } + return result + + def playerContent(self,flag,id,vipFlags): + return self.ali.playerContent(flag,id,vipFlags) + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_star.py b/plugin/py_star.py new file mode 100644 index 0000000..01bb898 --- /dev/null +++ b/plugin/py_star.py @@ -0,0 +1,156 @@ +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 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): + rsp = self.fetch("http://43.155.75.36:1069/api.php?do=index_list") + alist = json.loads(rsp.text) + alist = alist['list'] + videos = [] + + for a in alist: + videos.append({ + "vod_id":a['id'], + "vod_name":a['name'], + "vod_pic":a['pic'], + "vod_remarks":a['text'] + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if 'name' not in extend.keys(): + extend['name'] = tid + extend['page'] = pg + filterParams = ["name", "area", "by", "n", "lang", "", "", "", "p", "", "", "year"] + params = [] + for idx in range(len(filterParams)): + fp = filterParams[idx] + if fp in extend.keys(): + + params.append(fp + '=' + extend[fp]) + suffix = '&'.join(params) + url = 'http://43.155.75.36:1069/api.php?do=class_list&{0}'.format(suffix) + rsp = self.fetch(url) + alists = json.loads(rsp.text) + alist = alists['list'] + videos = [] + for a in alist: + videos.append({ + "vod_id":a['id'], + "vod_name":a['name'], + "vod_pic":a['pic'], + "vod_remarks":a['progress'] + }) + + 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://43.155.75.36:1069/api.php?do=detail_info&id={0}'.format(tid) + rsp = self.fetch(url) + alists = json.loads(rsp.text) + alist = alists['info'] + vod = { + "vod_id": alist['id'], + "vod_name": alist['name'], + "vod_pic": alist['pic'], + "type_name": alist['vclass'], + "vod_year": alist['year'], + "vod_area": alist['area'], + "vod_remarks": alist['progress'], + "vod_actor": "", + "vod_director": "", + "vod_play_from":alist['form'], + "vod_play_url":alist['playurl'], + "vod_content": alist['introduce'] + } + + result = { + 'list':[ + vod + ] + } + return result + + def searchContent(self,key,quick): + url = 'http://43.155.75.36:1069/api.php?do=search&wd={0}'.format(key) + # getHeader() + rsp = self.fetch(url) + jo = json.loads(rsp.text) + result = {} + jArray = [] + if int(jo['count']) > 0: + for a in jo['list']: + jArray.append({ + "vod_id": a['id'], + "vod_name": a['name'], + "vod_pic": a['pic'], + "vod_remarks": a['text'] + }) + result = { + 'list':jArray + } + return result + cookie = {} + config = { + "filter":{"电视剧":[{"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":"运动"},{"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":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","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":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"电影":[{"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":"运动"},{"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":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"英语","v":"英语"},{"n":"法语","v":"法语"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"动漫":[{"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":"音乐"},{"n":"奇幻","v":"奇幻"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"犯罪","v":"犯罪"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"古装","v":"古装"},{"n":"泡面","v":"泡面"},{"n":"运动","v":"运动"},{"n":"体育","v":"体育"},{"n":"青春","v":"青春"},{"n":"美食","v":"美食"},{"n":"治愈","v":"治愈"},{"n":"致郁","v":"致郁"},{"n":"励志","v":"励志"},{"n":"历史","v":"历史"},{"n":"真人","v":"真人"},{"n":"竞技","v":"竞技"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"综艺":[{"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":"晚会"}]},{"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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"记录片":[{"key":"class","name":"剧情","value":[{"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":"lang","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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + def playerContent(self,flag,id,vipFlags): + if "STAR@" in id: + id = id.split('@') + url = 'http://43.155.75.36:1069/api.php?do=Ooo0oo0O0oOo&url={0}'.format(id[1]) + rsp = self.fetch(url) + jo = json.loads(rsp.text) + id = jo['url'] + result = {} + result["parse"] = 0 + result["playUrl"] = "" + result["url"] = id + result["header"] = "" + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] + header = { + "origin":"https://www.5dy6.vip", + "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", + "Accept":" */*", + "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7", + "Accept-Encoding":"gzip, deflate" + } \ No newline at end of file diff --git a/plugin/py_voflix.py b/plugin/py_voflix.py new file mode 100644 index 0000000..1f60675 --- /dev/null +++ b/plugin/py_voflix.py @@ -0,0 +1,228 @@ +#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 "Voflix" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + # https://meijuchong.cc/ + result = {} + cateManual = { + "电影": "1", + "剧集": "2", + "综艺": "3", + "动漫": "4" + } + 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://www.voflix.com/",headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[@class='module']/div[contains(@class,'tab-list')]//a") + videos = [] + for vod in vodList: + name = vod.xpath("./@title")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[@class='module-item-note']/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 = 'https://www.voflix.com/show/{0}.html'.format(suffix) + + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[contains(@class, 'module-items')]/a") + videos = [] + for vod in vodList: + name = vod.xpath("./@title")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[contains(@class,'module-item-note')]/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 = 'https://www.voflix.com/detail/{0}.html'.format(tid) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + node = root.xpath("//div[@class='main']")[0] + title = node.xpath(".//div[@class='module-info-heading']/h1/text()")[0] + pic = root.xpath(".//div[@class='module-item-pic']/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='module-info-item']") + 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'] = node.xpath(".//div[contains(@class,'module-info-introduction-content')]/p/text()")[0].replace('\n','').replace('\t','') + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath(".//div[contains(@class,'module-tab-items-box')]/div/span/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[contains(@class,'module-play-list-content')]") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('.//span/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 = "https://www.voflix.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 = 'https://www.voflix.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':'https://www.voflix.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':'https://www.voflix.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"}]}],"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"}]}],"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"}]}]} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_wmkk.py b/plugin/py_wmkk.py new file mode 100644 index 0000000..b01572c --- /dev/null +++ b/plugin/py_wmkk.py @@ -0,0 +1,176 @@ +# coding=utf-8 +# !/usr/bin/python +import sys +import re +sys.path.append('..') +from base.spider import Spider + + + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "完美看看" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "1", + "国产剧": "5", + "欧美剧": "2", + "韩剧": "3", + "泰剧": "9", + "日剧": "4", + "动漫": "6", + "综艺": "7", + "纪录片": "10" + } + 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 = {} + url = 'https://www.wanmeikk.film/category/{0}-{1}.html'.format(tid, pg) + rsp = self.fetch(url) + root = self.html(rsp.text) + aList = root.xpath("//div[@class='stui-pannel_bd']/ul[1]/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[@class='pic-text text-right']/text()")[0] + sid = a.xpath("./div/a/@href")[0].replace("/", "").replace("project", "").replace(".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://www.wanmeikk.film/project/{0}.html'.format(tid) + 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"} + rsp = self.fetch(url, headers=header) + root = self.html(rsp.content) + divContent = root.xpath("//div[@class='col-lg-wide-75 col-xs-1']")[0] + title = divContent.xpath(".//h1[@class='title']/text()")[0] + pic = divContent.xpath(".//a[@class='stui-vodlist__thumb picture v-thumb']/img/@data-original")[0] + detail = divContent.xpath(".//p[@class='desc detail hidden-xs']/span[@class='detail-content']/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 = divContent.xpath(".//div[@class='stui-content__detail']/p[@class='data']") + for info in infoArray: + content = info.xpath('string(.)') + if content.startswith('类型'): + infon = content.split('\xa0') + 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("主演:", "") + if content.startswith('导演'): + vod['vod_director'] = content.replace("\xa0", "").replace("导演:", "") + vod_play_url = '$$$' + vod['vod_play_from'] = '完美看看' + purl = divContent.xpath(".//div[@class='stui-pannel_bd col-pd clearfix']/ul/li") + playList = [] + vodItems = [] + for plurl in purl: + plaurl = plurl.xpath(".//a/@href")[0] + name = plurl.xpath(".//a/text()")[0] + tId = self.regStr(plaurl, '/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_url'] = vod_play_url + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + result = {} + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + url = 'https://www.wanmeikk.film/play/{0}.html'.format(id) + rsp = self.fetch(url) + root = self.html(rsp.text) + scripts = root.xpath("//div[@class='stui-player__video embed-responsive embed-responsive-16by9 clearfix']/script/text()")[0] + key = scripts.split("url")[1].replace('"', "").replace(':', "").replace(',', "").replace("'", "") + surl = 'https://www.wanmeikk.film/dplayer.php?url={0}'.format(key) + srsp = self.fetch(surl) + sroot = self.html(srsp.text) + murl = sroot.xpath("//script[@type='text/javascript']/text()")[0] + mp4url = re.findall(r"var urls = '(.*)';", murl)[0] + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = mp4url + 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, ""] \ No newline at end of file diff --git a/plugin/py_xmaomi.py b/plugin/py_xmaomi.py new file mode 100644 index 0000000..83e6b7f --- /dev/null +++ b/plugin/py_xmaomi.py @@ -0,0 +1,258 @@ +#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 "x小猫咪" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "电影":"1", + "电视剧":"2", + "综艺":"3", + "动漫":"4", + "纪录":"5" + } + 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): + tmpRsp = self.fetch("https://xmaomi.net/") + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + # self.cookie = rsp.cookies + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + aList = root.xpath("//ul[contains(@class,'hl-vod-list')]/li/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./div[@class='hl-pic-text']/span/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[8] = pg + for key in extend: + urlParams[int(key)] = extend[key] + params = '-'.join(urlParams) + url = 'https://xmaomi.net/vod_____show/{0}.html'.format(params) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = 'https://xmaomi.net'+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + aList = root.xpath("//ul[contains(@class,'hl-vod-list')]/li/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./div[@class='hl-pic-text']/span/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://xmaomi.net/{0}.html'.format(tid) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + divContent = root.xpath("//div[contains(@class,'hl-full-box')]")[0] + title = divContent.xpath("./div[@class='hl-item-pic']/span/@title")[0] + pic = divContent.xpath("./div[@class='hl-item-pic']/span/@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":"" + } + liArray = divContent.xpath(".//li") + for li in liArray: + content = li.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_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath("//div[contains(@class,'hl-rb-tips')]//span[@class='hl-text-site']/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath(".//div[contains(@class,'hl-play-source')]//ul") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./li/a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('string(.)') + 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://xmaomi.net/v_search/{0}-------------.html'.format(key) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + aList = root.xpath("//ul[contains(@class,'hl-one-list')]/li//a[contains(@class,'hl-item-thumb')]") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + print(name) + pic = a.xpath('./@data-original')[0] + print(pic) + mark = a.xpath("./div[@class='hl-pic-text']/span/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 playerContent(self,flag,id,vipFlags): + url = 'https://xmaomi.net/{0}.html'.format(id) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + 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 = "" + print(jo) + htmlUrl = 'https://play.fositv.com/?url={0}&tm={1}&key={2}&next=&title='.format(jo['url'],jo['tm'],jo['key']) + htmlRsp = self.fetch(htmlUrl) + htmlRoot = self.html(htmlRsp.text) + configScripts = htmlRoot.xpath("//script/text()") + configJo = {} + for script in configScripts: + if(script.strip().startswith("var config")): + target = script[script.index('{'):(script.index('}')+1)] + configJo = json.loads(target) + break; + param = { + 'url': configJo['url'], + 'time': configJo['time'], + 'key': configJo['key'] + } + postRsp = self.post('https://play.fositv.com/API.php',param) + resultJo = json.loads(postRsp.text) + result = { + 'parse':0, + 'playUrl':'', + 'url':resultJo['url'], + 'header':{ + 'User-Agent':resultJo['ua'] + } + } + return result + + cookie = {} + config = { + "player": {}, + "filter": {"1":[{"key":0,"name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作","v":"101"},{"n":"喜剧","v":"102"},{"n":"爱情","v":"103"},{"n":"科幻","v":"104"},{"n":"剧情","v":"105"},{"n":"悬疑","v":"106"},{"n":"惊悚","v":"107"},{"n":"恐怖","v":"108"},{"n":"犯罪","v":"109"},{"n":"谍战","v":"110"},{"n":"冒险","v":"111"},{"n":"奇幻","v":"112"},{"n":"灾难","v":"113"},{"n":"战争","v":"114"},{"n":"动画","v":"115"},{"n":"歌舞","v":"116"},{"n":"历史","v":"117"},{"n":"传记","v":"118"},{"n":"纪录","v":"119"},{"n":"其他","v":"120"}]},{"key":1,"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":"其他"}]},{"key":11,"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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":0,"name":"分类","value":[{"n":"全部","v":"2"},{"n":"武侠","v":"201"},{"n":"喜剧","v":"202"},{"n":"爱情","v":"203"},{"n":"剧情","v":"204"},{"n":"青春","v":"205"},{"n":"悬疑","v":"206"},{"n":"科幻","v":"207"},{"n":"军事","v":"208"},{"n":"警匪","v":"209"},{"n":"谍战","v":"210"},{"n":"奇幻","v":"211"},{"n":"偶 像","v":"212"},{"n":"年代","v":"213"},{"n":"乡村","v":"214"},{"n":"都市","v":"215"},{"n":"家庭","v":"216"},{"n":"古装","v":"217"},{"n":"历史","v":"218"},{"n":"神话","v":"219"},{"n":"其他","v":"220"}]},{"key":1,"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":"其他"}]},{"key":11,"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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":0,"name":"分类","value":[{"n":"全部","v":"3"},{"n":"脱口秀","v":"301"},{"n":"真人秀","v":"302"},{"n":"搞笑","v":"303"},{"n":"访谈","v":"304"},{"n":"生活","v":"305"},{"n":"晚会","v":"306"},{"n":"美食","v":"307"},{"n":"游戏","v":"308"},{"n":"亲子","v":"309"},{"n":"旅游","v":"310"},{"n":"文化","v":"311"},{"n":"体育","v":"312"},{"n":"时尚","v":"313"},{"n":"纪实","v":"314"},{"n":"益智","v":"315"},{"n":"演艺","v":"316"},{"n":"歌舞","v":"317"},{"n":"音乐","v":"318"},{"n":"播报","v":"319"},{"n":"其他","v":"320"}]},{"key":1,"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":"其他"}]},{"key":11,"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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":0,"name":"分类","value":[{"n":"全部","v":"4"},{"n":"热血","v":"401"},{"n":"格斗","v":"402"},{"n":"恋爱","v":"403"},{"n":"美少女","v":"404"},{"n":"校园","v":"405"},{"n":"搞笑","v":"406"},{"n":"LOLI","v":"407"},{"n":"神魔","v":"408"},{"n":"机战","v":"409"},{"n":"科幻","v":"410"},{"n":"真人","v":"411"},{"n":"青春","v":"412"},{"n":"魔法","v":"413"},{"n":"神话","v":"414"},{"n":"冒险","v":"415"},{"n":"运动","v":"416"},{"n":"竞技","v":"417"},{"n":"童话","v":"418"},{"n":"亲子","v":"419"},{"n":"教育","v":"420"}]},{"key":1,"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":"其他"}]},{"key":11,"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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"5":[{"key":0,"name":"分类","value":[{"n":"全部","v":"5"},{"n":"人物","v":"501"},{"n":"军事","v":"502"},{"n":"历史","v":"503"},{"n":"自然","v":"504"},{"n":"探险","v":"505"},{"n":"科技","v":"506"},{"n":"文化","v":"507"},{"n":"刑侦","v":"508"},{"n":"社会","v":"509"},{"n":"旅游","v":"510"},{"n":"其他","v":"511"}]},{"key":1,"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":"其他"}]},{"key":11,"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"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_yiso.py b/plugin/py_yiso.py new file mode 100644 index 0000000..4ce5f65 --- /dev/null +++ b/plugin/py_yiso.py @@ -0,0 +1,63 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import requests + +class Spider(Spider): + def getDependence(self): + return ['py_ali'] + def getName(self): + return "py_yiso" + def init(self,extend): + self.ali = extend[0] + print("============py_yiso============") + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + 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://yiso.fun/" + } + def detailContent(self,array): + return self.ali.detailContent(array) + + def searchContent(self,key,quick): + url = "https://yiso.fun/api/search?name={0}&from=ali".format(key) + vodList = requests.get(url=url, headers=self.header, verify=False).json()["data"]["list"] + videos = [] + for vod in vodList: + videos.append({ + "vod_id": vod["url"], + "vod_name": vod["fileInfos"][0]["fileName"], + "vod_pic": "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000", + "vod_remarks": vod['gmtCreate'] + }) + result = { + 'list':videos + } + return result + + def playerContent(self,flag,id,vipFlags): + return self.ali.playerContent(flag,id,vipFlags) + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_zhaozy.py b/plugin/py_zhaozy.py new file mode 100644 index 0000000..f2039e0 --- /dev/null +++ b/plugin/py_zhaozy.py @@ -0,0 +1,85 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def getDependence(self): + return ['py_ali'] + def getName(self): + return "py_zhaozy" + def init(self,extend): + self.ali = extend[0] + print("============py_zhaozy============") + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + 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", + "Referer": "https://zhaoziyuan.me/" + } + def detailContent(self,array): + tid = array[0] + print(self.getName()) + pattern = '(https://www.aliyundrive.com/s/[^\"]+)' + url = self.regStr(tid,pattern) + if len(url) > 0: + return self.ali.detailContent(array) + + rsp = self.fetch('https://zhaoziyuan.me/'+tid) + url = self.regStr(rsp.text,pattern) + if len(url) == 0: + return "" + newArray = [url] + print(newArray) + return self.ali.detailContent(newArray) + + def searchContent(self,key,quick): + map = { + '7':'文件夹', + '1':'视频' + } + ja = [] + for tKey in map.keys(): + url = "https://zhaoziyuan.me/so?filename={0}&t={1}".format(key,tKey) + rsp = self.fetch(url,headers=self.header) + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//li[@class='clear']//a") + for a in aList: + # title = a.xpath('./h3/text()')[0] + a.xpath('./p/text()')[0] + title = self.xpText(a,'./h3/text()') + self.xpText(a,'./p/text()') + pic = 'https://img0.baidu.com/it/u=603086994,1727626977&fm=253&fmt=auto?w=500&h=667' + jo = { + 'vod_id': self.xpText(a,'@href'), + 'vod_name': '[{0}]{1}'.format(key,title), + 'vod_pic': pic + } + ja.append(jo) + result = { + 'list':ja + } + return result + + def playerContent(self,flag,id,vipFlags): + return self.ali.playerContent(flag,id,vipFlags) + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_zxzj.py b/plugin/py_zxzj.py new file mode 100644 index 0000000..aab5bb7 --- /dev/null +++ b/plugin/py_zxzj.py @@ -0,0 +1,246 @@ +#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 homeContent(self,filter): + result = {} + cateManual = { + "电影":"1", + "美剧":"2", + "韩剧":"3", + "日剧":"4", + "泰剧":"5", + "动漫":"6" + } + 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://zxzj.vip/") + root = self.html(rsp.text) + aList = root.xpath("//div[@class='stui-vodlist__box']/a") + + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./span[@class='pic-text text-right']/text()")[0] + sid = a.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", "lang", "", "", "", "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 = 'https://zxzj.vip/vodshow/{0}.html'.format(suffix) + rsp = self.fetch(url) + root = self.html(rsp.text) + aList = root.xpath("//div[@class='stui-vodlist__box']/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./span[@class='pic-text text-right']/text()")[0] + sid = a.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 = 'https://zxzj.vip/detail/{0}.html'.format(tid) + rsp = self.fetch(url) + root = self.html(rsp.text) + node = root.xpath("//div[@class='stui-content']")[0] + + pic = node.xpath(".//img/@data-original")[0] + title = node.xpath('.//h1/text()')[0] + detail = node.xpath(".//span[@class='detail-content']/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(".//div[@class='stui-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.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_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath("//div[@class='stui-vodlist__head']/h3/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath("//ul[contains(@class,'stui-content__playlist')]") + 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,'/video/(\\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://zxzj.vip/index.php/ajax/suggest?mid=1&wd={0}'.format(key) + # getHeader() + rsp = self.fetch(url) + jo = json.loads(rsp.text) + result = {} + jArray = [] + if int(jo['total']) > 0: + for j in jo['list']: + jArray.append({ + "vod_id": j['id'], + "vod_name": j['name'], + "vod_pic": j['pic'], + "vod_remarks": "" + }) + result = { + 'list':jArray + } + return result + + config = { + "player": { + "dpp": { + "sh": "DP播放", + "pu": "https://jx.zxzj.vip/dplayer.php?url=", + "sn": 1, + "or": 999 + } + }, + "filter": {"1": [{"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": "情色"}]}, {"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": "2007", "v": "2007"}, {"n": "2006", "v": "2006"}, {"n": "2005", "v": "2005"}, {"n": "2004", "v": "2004"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "lang", "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": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "2": [{"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": "其他"}]}, {"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": "lang", "name": "语言", "value": [{"n": "全部", "v": ""}, {"n": "英语", "v": "英语"}, {"n": "法语", "v": "法语"}]}, {"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": "其他"}]}, {"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"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"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": "其他"}]}, {"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"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "5": [{"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"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}], "6": [{"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": "lang", "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"}, {"n": "2003", "v": "2003"}, {"n": "2002", "v": "2002"}, {"n": "2001", "v": "2001"}, {"n": "2000", "v": "2000"}]}, {"key": "by", "name": "排序", "value": [{"n": "最新", "v": "time"}, {"n": "最热", "v": "hits"}, {"n": "评分", "v": "score"}]}]} + } + header = { + "origin":"https://zxzj.vip", + "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", + "Accept":" */*", + "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7", + "Accept-Encoding":"gzip, deflate" + } + def playerContent(self,flag,id,vipFlags): + result = {} + url = 'https://zxzj.vip/video/{0}.html'.format(id) + rsp = self.fetch(url) + 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 = '' + # src="(\S+url=) + # playerConfig = self.config['player'] + # if jo['from'] in self.config['player']: + # playerConfig = self.config['player'][jo['from']] + # parseUrl = playerConfig['pu'] + jo['url'] + scriptUrl = 'https://zxzj.vip/static/player/{0}.js'.format(jo['from']) + scriptRsp = self.fetch(scriptUrl) + parseUrl = self.regStr(scriptRsp.text,'src="(\\S+url=)') + if len(parseUrl) > 0: + parseRsp = self.fetch(parseUrl+jo['url']) + realUrl = self.regStr(parseRsp.text,"(?<=urls\\s=\\s').*?(?=')",0) + if len(realUrl) > 0 : + result["parse"] = 0 + result["playUrl"] = "" + result["url"] = realUrl + result["header"] = json.dumps(self.header) + else: + result["parse"] = 1 + result["playUrl"] = "" + result["url"] = jo['url'] + result["header"] = json.dumps(self.header) + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/plugin/py_小纸条.py b/plugin/py_小纸条.py new file mode 100644 index 0000000..7f4c2f1 --- /dev/null +++ b/plugin/py_小纸条.py @@ -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, ""] \ No newline at end of file diff --git a/plugin/tvbox.json b/plugin/tvbox.json new file mode 100644 index 0000000..fc11d23 --- /dev/null +++ b/plugin/tvbox.json @@ -0,0 +1,577 @@ +{ +"spider":"clan://tvbox/jar/0920.jar", +"wallpaper":"http://maoyingshi.cc/api.php", +"lives":[ +{ +"group":"redirect", +"channels":[ +{ +"name":"live", +"urls":[ +"proxy://do=live&type=txt&ext=clan://TVBox/tv/live.txt"]}]}], +"sites":[ +{ +"key":"py_kuaikan", +"name":"快看〔PY〕", +"type":3, +"api":"py_kuaikan", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_kuaikan.py" +}, +{ +"key":"py_lezhu", +"name":"乐猪〔PY〕", +"type":3, +"api":"py_lezhu", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_lezhu.py" +}, +{ +"key":"py_3qu", +"name":"3QU〔PY〕", +"type":3, +"api":"py_3qu", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_3qu.py" +}, +{ +"key":"py_cyys", +"name":"创艺〔PY〕", +"type":3, +"api":"py_cyys", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_cyys.py" +}, +{ +"key":"py_wmkk", +"name":"完美看看〔PY〕", +"type":3, +"api":"py_wmkk", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_wmkk.py" +}, +{ +"key":"py_cup", +"name":"茶杯〔PY〕", +"type":3, +"api":"py_cup", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_cup.py" +}, +{ +"key":"py_star", +"name":"星光〔PY〕", +"type":3, +"api":"py_star", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_star.py" +}, +{ +"key":"py_bilibili", +"name":"哔哩〔PY〕", +"type":3, +"api":"py_bilibili", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_bilibili.py" +}, +{ +"key":"py_bilivd", +"name":"B站(带搜索)", +"type":3, +"api":"py_bilivd", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_bilivd.py" +}, +{ +"key":"py_cctv", +"name":"央视〔PY〕", +"type":3, +"api":"py_cctv", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_cctv.py" +}, +{ +"key":"py_czspp", +"name":"厂长〔PY〕", +"type":3, +"api":"py_czspp", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_czspp.py" +}, +{ +"key":"py_zxzj", +"name":"在线之家〔PY〕", +"type":3, +"api":"py_zxzj", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_zxzj.py" +}, +{ +"key":"py_voflix", +"name":"Voflix〔PY〕", +"type":3, +"api":"py_voflix", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_voflix.py" +}, +{ +"key":"py_bilimd", +"name":"🔥B站影视〔PY〕", +"type":3, +"api":"py_bilimd", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_bilimd.py" +}, +{ +"key":"py_gimytv", +"name":"剧迷〔PY〕", +"type":3, +"api":"py_gimytv", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_gimytv.py" +}, +{ +"key":"py_genmov", +"name":"跟剧〔PY〕", +"type":3, +"api":"py_genmov", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_genmov.py" +}, +{ +"key":"py_huya", +"name":"🔥虎牙〔PY〕", +"type":3, +"api":"py_huya", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_huya.py" +}, +{ +"key":"py_douyu", +"name":"🔥斗鱼〔PY〕", +"type":3, +"api":"py_douyu", +"searchable":0, +"quickSearch":0, +"filterable":1, +"ext":"./py_douyu.py" +}, +{ +"key":"py_cokemv", +"name":"COKE", +"type":3, +"api":"py_cokemv", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_cokemv.py" +}, +{ +"key":"py_xmaomi", +"name":"猫咪〔PY〕", +"type":3, +"api":"py_xmaomi", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_xmaomi.py" +}, +{ +"key":"py_gitcafe", +"name":"小纸条〔PY〕", +"type":3, +"api":"py_gitcafe", +"searchable":1, +"quickSearch":1, +"filterable":0, +"ext":"./py_gitcafe.py" +}, +{ +"key":"py_zhaozy", +"name":"找资源〔PY〕", +"type":3, +"api":"py_zhaozy", +"searchable":1, +"quickSearch":1, +"filterable":0, +"ext":"./py_zhaozy.py" +}, +{ +"key":"py_yiso", +"name":"易搜〔PY〕", +"type":3, +"api":"py_yiso", +"searchable":1, +"quickSearch":1, +"filterable":0, +"ext":"./py_yiso.py" +}, +{ +"key":"py_pansou", +"name":"盘搜〔PY〕", +"type":3, +"api":"py_pansou", +"searchable":1, +"quickSearch":1, +"filterable":0, +"ext":"./py_pansou.py" +}, +{ +"key":"push_agent", +"name":"阿里〔PY〕", +"type":3, +"api":"py_ali", +"searchable":0, +"quickSearch":0, +"filterable":0, +"ext":"./py_ali.py" +}, +{ +"key":"py_alist", +"name":"🦂Alist〔PY〕", +"type":3, +"api":"py_alist", +"searchable":1, +"quickSearch":1, +"filterable":1, +"ext":"./py_alist.py" +}, +{"key":"csp_AppTT","name":"图图影视〔SP〕","type":3,"api":"csp_AppTT","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_Kunyu77","name":"七七〔SP〕","type":3,"api":"csp_Kunyu77","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_Lib","name":"LIBVIO〔SP〕","type":3,"api":"csp_Lib","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_LiteApple","name":"小苹果〔SP〕","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"厂长影视","name":"厂长资源〔SP〕","type":3,"api":"csp_Czsapp","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_Cokemv","name":"Cokemv〔SP〕","type":3,"api":"csp_Cokemv","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_Kuaikan","name":"快看〔SP〕","type":3,"api":"csp_Kuaikan","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"spider_IKan","name":"爱看〔SP〕","type":3,"api":"csp_IKan","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"KanSJ_spider","name":"看视界〔SP〕","api":"csp_KanSJ","type":3,"filterable":1,"quickSearch":1,"searchable":1,"ext":""}, +{"key":"Smdyy_spider","name":"神马影视〔SP〕","api":"csp_Smdyy","type":3,"filterable":1,"quickSearch":1,"searchable":1}, +{"key":"追剧喵","name":"追剧喵〔SP〕","type":3,"api":"csp_ZJMiao","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"Lezhu_spider","name":"乐猪影视〔SP〕","api":"csp_Lezhu","type":3,"filterable":1,"quickSearch":1,"searchable":1}, +{"key":"csp_Wmkk","name":"完美看看〔SP〕","api":"csp_Wmkk","type":3,"filterable":1,"quickSearch":1,"searchable":1}, +{"key":"csp_Bttoo","name":"两个BT〔SP〕","type":3,"api":"csp_Bttoo","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_Auete","name":"Auete〔SP〕","type":3,"api":"csp_Auete","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_EEEDY","name":"3EDY(EXO)","type":3,"api":"csp_EEEDY","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"mjxq_spider","name":"美剧星球〔SP〕","type":3,"api":"csp_Mjxq","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_IQIYI","name":"爱奇艺〔SP〕","type":3,"api":"csp_IQIYI","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_QQ","name":"企鹅〔SP〕","type":3,"api":"csp_QQ","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_MGTV","name":"芒果TV〔SP〕","type":3,"api":"csp_MGTV","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_Lib","name":"LIBVIO〔SP〕","type":3,"api":"csp_Lib","searchable":1,"quickSearch":1,"filterable":1}, +{"key":"csp_SP360","name":"360〔SP〕","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1}, +{"key": "剧荒TV(SP)","name": "剧荒TV(SP)","type": 3,"api": "csp_Juhuang","searchable": 1,"quickSearch": 1,"filterable": 1}, +{"key": "csp_Dy555","name":"555影院〔SP〕","type": 3,"api": "csp_Dy555","searchable": 1,"quickSearch": 1,"filterable": 1}, +{"key":"csp_Bili","name":"哔哩套餐〔SP〕","type": 3,"api":"csp_Bili","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/哔哩哔哩.json"}, +{"key": "csp_Yj1211","name": "️直播合集〔SP〕","type": 3,"api": "csp_Yj1211","searchable": 1,"quickSearch": 1,"filterable": 1}, +{"key": "csp_Anime1","name": "小日本动漫〔SP〕","type": 3,"api": "csp_Anime1","searchable": 1,"quickSearch": 1,"filterable": 1}, +{"key":"csp_bendi","name":"本地文件(打开存储权限)","type":3,"api":"csp_LocalFile","searchable":0,"quickSearch":0,"filterable":0,"type_flag":1"}, +{"key":"csp_Alist2","name":"Alist合集(SP)","type":3,"api":"csp_Alist","searchable":0,"quickSearch":0,"filterable":0,"ext":"clan://tvbox/xb/Alist.json"}, +{"key": "bdys","name": "哔嘀(磁力测试)","type": 3,"api": "csp_XPbd","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/bdys.json"}, +{"key":"t4public","name":"T4公共(仅搜索)","type":4,"api":"https://t4.secan.icu/vod?sites=all&ali_token=阿里token&timeout=10","searchable":1,"quickSearch":1,"filterable":0}, +{"key": "Gitcafe","name":"小纸条〔SP〕","type": 3,"api": "csp_Gitcafe","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"}, +{"key":"AliPS","name":"盘搜(仅搜索)","type":3,"api":"csp_AliPS","searchable":1,"quickSearch":1,"filterable":1,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"}, +{"key":"FindZY","name":"找资源(仅搜索)","type":3,"api":"csp_Zhaozy","searchable":1,"quickSearch":1,"filterable":1,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"}, +{"key":"csp_Yiso","name":"易搜(仅搜索)","type":3,"api":"csp_Yiso","searchable":1,"quickSearch":1,"filterable":0,"ext":"7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"}, +{"key": "push_agent","name":"推送(阿里/磁力)","type":3,"api":"csp_PushAgent","searchable":0,"quickSearch":0,"filterable":0,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"}, + + +{"key":"天堂资源〔官源〕","name":"天堂资源〔官源〕","type":1,"api":"http://vipmv.cc/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["电影","连续剧","综艺","动漫","国产剧","港台剧","日韩剧","欧美剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","哔哩哔哩"]}, +{"key":"多多资源","name":"多多资源〔官源〕","type":1,"api":"https://www.ddzyz1.com/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","泰国剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","灾难片","犯罪片","悬疑片","惊悚片","奇幻片","冒险片","武侠片","记录片","伦理","综艺","动漫","动画片","国产动漫","日韩动漫","欧美动漫","海外剧","国内综艺","海外综艺"]}, +{"key":"北雁影视〔官源〕","name":"北雁影视〔官源〕","type":1,"api":"https://zy.beiyan.cc:4433/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"filterable":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","综艺","动漫"]}, +{"key":"诺讯资源〔官源〕","name":"诺讯资源〔官源〕","type":1,"api":"http://caiji.nxflv.com/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","综艺频道","动漫频道","综合频道"]}, +{"key":"忆梦","name":"忆梦〔官源〕","type":1,"api":"http://anltv.cn/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","电影(B站)","电视剧(B站)","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","犯罪片","悬疑片","惊悚片","奇幻片","冒险片","武侠片","动漫画","动画","番剧(B站)","国创(B站)","综艺","记录片(B站)","纪录片/微电影"]}, +{"key":"木子看剧〔官源〕","name":"木子看剧〔官源〕","type":1,"api":"https://mzkj.maccms.cf/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["电影","连续剧","综艺","动漫","哔哩哔哩","直播"]}, +{"key": "M3U8资源","name": "M3U8资源〔官源〕","type": 1,"api": "https://www.zycaiji.net:7788/api.php/provide/vod/","searchable": 1,"quickSearch": 1,"categories":["国产剧","港台剧","日韩剧","欧美剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","犯罪片","悬疑片","惊悚片","奇幻片","冒险片","记录片","动画片","综艺","动漫","番剧(B站专用)","国创(B站专用)","电影(B站专用)","电视剧(B站专用)"]}, +{"key":"ASMR","name":" ASMR19〔官源〕","type":1,"api":"http://www.asmr19.in/api.php/provide/vod/","searchable":0,"quickSearch":0}, + + +{"key":"csp_AppYsV2_优众影视","name":"优众影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://121.205.88.194:7878/xgapp.php/v2/"}, +{"key":"csp_appysv2_零刻影院〔APP〕","name":"零刻影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://ys.ling00.cn/api.php/v1.vod"}, +{"key":"快播资源","name":"快播资源〔APP〕","type":1,"api":"http://www.kuaibozy.com/api.php/provide/vod/","searchable":1,"quickSearch":1}, +{"key":"csp_appysv2_萌蛋蛋〔APP〕","name":"萌蛋蛋〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.mengdandan.com/xgapp.php/v1/"}, +{"key":"csp_appysv2_群鑫影视〔APP〕","name":"群鑫影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.qunxinys.com/api.php/v1.vod"}, +{"key":"csp_appysv2_渔渔影视〔APP〕","name":"渔渔影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://luobo.yugenye.site/api.php/v1.vod"}, +{"key": "影图","name": "影图〔APP〕","type": 1,"api": "https://cj.vodimg.top/api.php/provide/vod/","searchable": 1,"quickSearch": 1}, +{"key":"csp_appysv2_️美剧范〔APP〕","name":"️美剧范〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://ttzmz.net/api.php/v1.vod"}, +{"key":"csp_appysv2_万能影院〔APP〕","name":"万能影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.wnvod.net/lvdou_api.php/v1.vod"}, +{"key":"csp_appysv2_段友影视〔APP〕","name":"段友影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://js.66app.me/api.php/app/"}, +{"key":"csp_appysv2_淘剧社〔APP〕","name":"淘剧社〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://app.shuhai99.com/api.php/v1.vod"}, +{"key":"csp_appysv2_迷你库","name":"迷你库〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.miniku.cc/xgapp.php/v1/"}, +{"key":"csp_appysv2_筑梦云影视","name":"筑梦云影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://wzys.scp00.cn/api.php/v1.vod"}, +{"key":"csp_appysv2_一站VIP影视","name":"一站VIP影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.dpp8.xyz/api.php/v1.vod"}, +{"key":"csp_appysv2_影库","name":"影库〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://yingkudy.com/lvdou_api.php/v1.vod"}, +{"key":"csp_appysv2_鑫总资源","name":"鑫总资源〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.mmhkj.xyz/lvdou_api.php/v1.vod"}, +{"key":"csp_appysv2_悟空影院","name":"悟空影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://dapi.pntao.com/api.php/v1.vod"}, +{"key":"csp_appysv2_天诚影视","name":"天诚影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tcspvip.cn/api.php/v1.vod"}, +{"key":"csp_appysv2_枇杷影院","name":"枇杷影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.pipamovie.com/api.php/v1.vod"}, +{"key":"csp_appysv2_诺诺影视","name":"诺诺影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://nnys.cuicanys.cn/lvdou_api.php/v1.vod"}, +{"key":"csp_appysv2_可乐影视","name":"可乐影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://klyingshi.com/api.php/v1.vod"}, +{"key":"csp_appysv2_玖卿乐播","name":"玖卿乐播〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://vod.nqcode.cn/api.php/v1.vod"}, +{"key":"csp_appysv2_佳佳影视","name":"佳佳影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.jiajia.pub/api.php/v1.vod"}, +{"key":"csp_appysv2_豆芽视频","name":"豆芽视频〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://bdintv.cn/lvdou_api.php/v1.vod"}, +{"key":"csp_appysv2_兜里TV","name":"兜里TV〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://app.douli.cc/api.php/v1.vod"}, +{"key":"csp_appysv2_百淘影视","name":"百淘影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://ys.58g8.com/lvdou_api.php/v1.vod"}, +{"key":"csp_appysv2_爱电影","name":"爱电影〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.idianying.com.cn/mogai_api.php/v1.vod"}, +{"key":"csp_appysv2_MX影院","name":"MX影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.889998.xyz/api.php/v1.vod"}, +{"key":"csp_appysv2_OK影视","name":"OK影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://123.ok00.xyz/api.php/v1.vod"}, +{"key":"csp_appysv2_52看剧","name":"52看剧〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tool.xxmlb.com/qingdoujiekou.php/v1.vod"}, +{"key":"csp_appysv2_521看剧","name":"521看剧〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://521kanju.com/api.php/v1.vod"}, +{"key":"csp_appysv2_迪迪影院","name":"迪迪影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://dd88.icu:6080/xgapp.php/v2/"}, +{"key":"csp_appysv2_爱酷影视","name":"爱酷影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.zhanlangbu.com/ruifenglb_api.php/v1.vod"}, +{"key":"csp_appysv2_益达影院","name":"益达影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://luobu.yss6080.com/mogai_api.php/v1.vod"}, +{"key":"csp_appysv2_555电影","name":"555电影〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://555dy3.com/api.php/app/"}, +{"key":"csp_appysv2_懒猫影视","name":"懒猫影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lanmao.lanmaoymw.cn/api.php/v1.vod"}, +{"key":"csp_appysv2_冷视TV","name":"冷视TV〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://len.tv/api.php/v1.vod"}, +{"key":"csp_appysv2_星辰TV","name":"星辰TV〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.xingchentv.cn/mogai_api.php/v1.vod"}, +{"key":"csp_appysv2_沭阳影视","name":"沭阳影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://zjr.jurentiaodeng.com/api.php/v1.vod"}, +{"key":"csp_appysv2_月儿影视","name":"月儿影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://yue52.xyz/api.php/v1.vod"}, +{"key":"csp_appysv2_️瑞丰影视〔APP〕","name":"️瑞丰影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://121.204.249.135:4433/ruifenglb_api.php/v1.vod"}, +{"key":"csp_appysv2_QC影视〔APP〕","name":"QC影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.qcsvip.com/mogai_api.php/v1.vod"}, +{"key": "csp_app_小鸟动漫","name": "小鸟动漫〔APP〕","type": 3,"api": "csp_AppYsV2","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "http://xydm.baicai.buzz/mogai_api.php/v1.vod"}, + + +{"key":"csp_xpath_yinfans","name":"音范丝4K(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/yinfans.json"}, +{"key":"csp_xpath_农民影视","name":"农民影视(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/nongminyingshi.json"}, +{"key":"csp_xpath_zxzj","name":"在线之家(XPF)","type":3,"api":"csp_XPathFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/zxzj.json"}, +{"key":"csp_xpath_libvio","name":"LIBVIO(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/libvio.json"}, +{"key":"csp_xpath_cokemv","name":"COKEMV(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/cokemv.json"}, +{"key":"csp_xpath_dadagui","name":"达达龟(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/dadagui.json"}, +{"key":"csp_xpath_jbb","name":"剧白白(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/jubaibai.json"}, +{"key":"csp_xpath_bttwoo","name":"两个BT(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/bttwoo.json"}, +{"key":"csp_xpath_6d","name":"六度TV(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/6d.json"}, +{"key":"csp_xpath_94sm","name":"94神马(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/94sm.json"}, +{"key":"csp_xpath_saohuotv","name":"骚火影视(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/saohuotv.json"}, +{"key":"csp_xpath_zbkyy","name":"真不卡影院(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/zbkyy.json"}, +{"key":"csp_xpath_czspp","name":"厂长资源(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/czspp.json"}, +{"key": "csp_xpath_wanmeikk","name": "完美看看(XP)","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/wanmeikk.json"}, +{"key":"csp_xpath_rttks","name":"人人影视(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/rttks.json"}, +{"key":"csp_xpath_vip1280","name":"VIP电影(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/vip1280.json"}, +{"key":"csp_xpath_tjyy","name":"奇优影院(XP)","type":3,"api":"csp_XPathMac","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/huigutongying.json"}, +{"key":"csp_xpath_lezhutv","name":"乐猪TV(XPMac)","type":3,"api":"csp_XPathMac","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/lezhutv.json"}, +{"key":"csp_xpath_jpys","name":"极品影视(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/jpys.json"}, +{"key":"csp_xpath_lranc","name":"天天影视(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/lranc.json"}, +{"key":"csp_xpath_maole","name":"喵乐影视(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/maole.json"}, +{"key":"csp_xpath_xuangz","name":"尘落电影(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/xuangz.json"}, +{"key":"csp_xpath_qdytv","name":"米来影视(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/qdytv.json"}, +{"key":"csp_xpath_xqmi","name":"小强迷(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/xqmi.json"}, +{"key":"csp_xpath_135kan","name":"135看看(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/135kan.json"}, +{"key":"csp_xpath_miaomiao","name":"喵喵(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/miaomiao.json"}, +{"key":"csp_xpath_hyingku","name":"海影库(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/hyingku.json"}, +{"key": "csp_xpath_蚂蚁影视","name": "蚂蚁影视(XPF)️","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/myys.json"}, +{"key": "csp_xpath_电影迷","name": "电影迷(XPF)️","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/dym8.json"}, +{"key": "csp_xpath_meiju56","name": "美剧网(XPF)","type": 3,"api": "csp_XPathFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/meiju56.json"}, +{"key":"csp_xpath_555dy","name":"555影视(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/555dy.json"}, +{"key":"csp_xpath_mp4dy","name":"mp4电影(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/mp4dy.json"}, +{"key": "csp_xpath_bidiys","name": "哔嘀影视(XP)","type": 3,"api": "csp_XPath","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/bidiys.json"}, +{"key": "csp_xpath_xfeiji","name": "小小影视(XP)","type": 3,"api": "csp_XPath","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/xfeiji.json"}, +{"key": "csp_xpath_dmd","name": "动漫岛(XPF)","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/dmd.json"}, +{"key": "csp_xpath_dm84","name": "动漫巴士(XP)","type": 3,"api": "csp_XPathFilter","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/dm84.json"}, + + +{"key":"csp_XYQBiu_氢视频","name":"氢视频(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/氢视频.json"}, +{"key":"csp_XYQBiu_凌云影视","name":"凌云影视(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/凌云影视.json"}, +{"key":"csp_XYQBiu_555影视","name":"555影视(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/555影视.json"}, +{"key":"csp_XYQBiu_大米星球","name":"大米星球(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/大米星球.json"}, +{"key":"csp_XYQBiu_影视工厂","name":"影视工厂(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/影视工厂.json"}, +{"key":"csp_XYQBiu_片吧影院","name":"片吧影院(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/片吧影院.json"}, +{"key":"csp_XYQBiu_vofix","name":"VOFIX(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/vofix.json"}, +{"key":"csp_XYQBiu_莫扎兔","name":"莫扎兔(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/莫扎兔.json"}, +{"key":"csp_XYQBiu_聚合电影","name":"聚合电影(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/聚合电影.json"}, +{"key":"csp_XYQBiu_剧荒","name":"剧荒TV(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/剧荒.json"}, +{"key":"csp_XYQBiu_斗鱼直播","name":"斗鱼直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/斗鱼直播.json"}, +{"key":"csp_XYQBiu_虎牙直播","name":"虎牙直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/虎牙直播.json"}, +{"key":"csp_XYQBiu_网易CC直播","name":"网易CC直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/网易CC直播.json"}, +{"key":"csp_XYQBiu_17klive","name":"体育直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/17klive.json"}, +{"key":"csp_XYQBiu_萌番组","name":"萌番组(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/萌番组.json"}, +{"key":"csp_XYQBiu_酷狗MV","name":"酷狗MV(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/酷狗MV.json"}, +{"key":"csp_XYQBiu_酷奇MV","name":"酷奇MV(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/酷奇MV.json"}, +{"key":"csp_XYQBiu_好恐怖磁力","name":"好恐怖磁力(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/好恐怖磁力.json"}, + + +{"key":"csp_XYQHiker_回响影视","name":"回响影视(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyqh/回响影视.json"}, +{"key":"csp_XYQHiker_在线之家","name":"在线之家(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyqh/在线之家.json"}, +{"key":"csp_XYQHiker_无插件直播","name":"体育直播(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyqh/无插件直播.json"}, + + + +{"key":"csp_QXBiubiu_TVB云播","name":"TVB云播(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0, +"ext":"clan://tvbox/xb/TVB云播.json"}, +{"key":"csp_QXBiubiu_555电影","name":"555电影(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0, +"ext":"clan://tvbox/xb/555电影.json"}, +{"key":"csp_QXBiubiu_影视工厂","name":"影视工厂(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/影视工厂.json"}, +{"key":"csp_QXBiubiu_剧白白","name":"剧白白(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/剧白白.json"}, +{"key":"csp_QXBiubiu_600影视","name":"600影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/600影视.json"}, +{"key":"csp_QXBiubiu_小强迷","name":"小强迷(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/小强迷.json"}, +{"key":"csp_QXBiubiu_歪片星球","name":"歪片星球(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/歪片星球.json"}, +{"key":"csp_biubiu_voflixHD","name":"VOFLIX HD(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/voflixHD.json"}, +{"key":"csp_biubiu_黑狐影院","name":"黑狐影院(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/黑狐影院.json"}, +{"key":"csp_biubiu_真不卡影院","name":"真不卡影院(XB)","type":3,"api":"csp_XBiubiu","searchable":0,"quickSearch":0,"filterable":0,"ext":"clan://tvbox/xb/真不卡影院.json"}, +{"key":"csp_XBiubiu_速搜影视","name":"速搜影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/速搜影视.json"}, +{"key":"csp_XBiubiu_极品影视","name":"极品影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/极品影视.json"}, +{"key":"csp_biubiu_米来影视","name":"米来影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/米来影视.json"}, +{"key":"csp_biubiu_旧梦影视","name":"旧梦影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/旧梦影视.json"}, +{"key":"csp_biubiu_达达龟","name":"达达龟(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/达达龟.json"}, +{"key":"csp_XBiubiu_宝仙HD","name":"宝仙HD(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/宝仙HD.json"}, +{"key":"csp_XBiubiu_私人影院","name":"私人影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/私人影院.json"}, +{"key":"csp_XBiubiu_夜空蓝光","name":"夜空蓝光(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/夜空蓝光.json"}, +{"key":"csp_XBiubiu_AB影院","name":"AB影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/AB影院.json"}, +{"key":"csp_biubiu_看一看影视","name":"看一看影视(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/看一看影视.json"}, +{"key":"csp_XBiubiu_UM影院","name":"UM影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/UM影院.json"}, +{"key":"csp_XBiubiu_厂长资源","name":"厂长资源(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/厂长资源.json"}, +{"key":"csp_biubiu_干饭影视","name":"干饭影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/干饭影视.json"}, +{"key":"'csp_biubiu_骚火电影","name":"骚火电影(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/骚火电影.json"}, +{"key":"csp_biubiu_瓜皮TV","name":"瓜皮TV(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/瓜皮TV.json"}, +{"key":"csp_biubiu_在线之家","name":"在线之家(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/在线之家.json"}, +{"key":"csp_biubiu_花猫TV","name":"花猫TV(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/花猫TV.json"}, +{"key":"csp_biubiu_饭团","name":"饭团(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/饭团.json"}, +{"key":"csp_biubiu_搜狗影院","name":"搜狗影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/搜狗影院.json"}, +{"key":"csp_biubiu_口袋影院","name":"口袋影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/口袋影院.json"}, +{"key":"csp_biubiu_蓝莓影视","name":"蓝莓影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/蓝莓影视.json"}, +{"key":"csp_biubiu_乐猪影视","name":"乐猪影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/乐猪影视.json"}, +{"key":"csp_biubiu_七年影视","name":"七年影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/七年影视.json"}, +{"key":"csp_biubiu_人人影视","name":"人人影视(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/人人影视.json"}, +{"key":"csp_biubiu_蓝豆TV","name":"蓝豆TV(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/蓝豆TV.json"}, +{"key":"csp_biubiu_桔子TV","name":"桔子TV(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/桔子tv.json"}, +{"key":"csp_biubiu_哔嘀影视","name":"哔嘀影视(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/哔嘀影视.json"}, +{"key":"csp_biubiu_GIMY影视","name":"GIMY影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/GIMY影视.json"}, +{"key":"csp_biubiu_看片网","name":"看片网(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/看片网.json"}, +{"key":"csp_biubiu_茶杯狐","name":"茶杯狐(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/茶杯狐.json"}, +{"key":"csp_biubiu_GimyTV","name":"GimyTV(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/GimyTV.json"}, +{"key":"csp_biubiu_F7好看剧","name":"F7好看剧(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/F7好看剧.json"}, +{"key":"csp_biubiu_大米星球","name":"大米星球(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/大米星球.json"}, +{"key":"csp_biubiu_听书网","name":"听书网(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/听书网.json"}, + + +{"key":"csp_biubiu_四虎影院","name":"四虎影院(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/四虎影院.json"}, +{"key":"csp_biubiu_爱看影院","name":"爱看影院(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/爱看影院.json"}, +{"key":"csp_biubiu_GAOAA","name":"GAOAA(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/GAOAA.json"}, +{"key":"csp_biubiu_香蕉视频","name":"香蕉视频(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/香蕉视频.json"}, +{"key":"csp_biubiu_黄仓库","name":"黄仓库(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/黄仓库.json"}, +{"key":"哥哥妹妹","name":"哥哥妹妹","type":0,"api":"http://www.ggmmzy.com:9999/inc/xml","searchable":0,"quickSearch":0,"filterable":0}, +{"key":"秀色资源","name":"秀色资源","type":0,"api":"https://api.xiuseapi.com/api.php/provide/vod/from/xiuse/at/xml/","playUrl":"https://api.xiusebf.com/m3u8/?url=","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"爱播资源","name":"爱播资源","type":1,"api":"https://cj1.apiabzy.com/api.php/provide/vod/?ac=list","playUrl":"https://player.aibozyplayer.com/m3u8/?url=","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"小姐姐资源","name":"小姐姐资源","type":0,"api":"https://xjjzyapi.com/home/cjapi/askl/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"乐播资源","name":"乐播资源","type":0,"api":"https://lbapi9.com/api.php/provide/vod/at/xml/","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"番号资源","name":"番号资源","type":0,"api":"http://fhapi9.com/api.php/provide/vod/at/xml","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"老鸭资源","name":"老鸭资源","type":0,"api":"https://api.apilyzy.com/api.php/provide/vod/at/xml","playUrl":"https://player.77lehuo.com/aliplayer/?url=","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"花椒资源","name":"花椒资源","type":0,"api":"https://apihjzy.com/api.php/provide/vod/at/xml/","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"酷豆资源网","name":"酷豆资源网","type":1,"api":"https://api.kdapi.info/api.php/provide/vod/?ac=list","playUrl":"https://jx.kubohk.com/jx/?url=","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"探探资源","name":"探探资源","type":1,"api":"https://apittzy.com/api.php/provide/vod/","searchable":0,"quickSearch":0}, +{"key":"奶茶资源","name":"奶茶资源","type":1,"api":"https://caiji.naichaapi.com/inc/apijson_vod.php","searchable":0,"quickSearch":0}, +{"key":"美少女源","name":"美少女源","type":0,"api":"https://www.msnii.com/api/xml.php","searchable":0,"quickSearch":0}, +{"key":"淫水机源","name":"饮水机源","type":0,"api":"https://www.xrbsp.com/api/xml.php","searchable":0,"quickSearch":0}, +{"key":"香奶儿源","name":"香奶儿源","type":0,"api":"https://www.gdlsp.com/api/xml.php","searchable":0,"quickSearch":0}, +{"key":"白嫖资源","name":"白嫖资源","type":0,"api":"https://www.kxgav.com/api/xml.php","searchable":0,"quickSearch":0}, +{"key":"小湿妹源","name":"湿妹资源","type":0,"api":"https://www.afasu.com/api/xml.php","searchable":0,"quickSearch":0}, +{"key":"大地资源","name":"大地资源","type":0,"api":"https://dadiapi.com/api.php","searchable":0,"quickSearch":0}, +{"key":"速度资源","name":"速度资源","type":0,"api":"http://www.ggmmzy.com:9999/inc/xml","searchable":0,"quickSearch":0}, +{"key":"色窝资源","name":"色窝资源","type":1,"api":"https://sewozyapi.com/api.php/provide/vod/?ac=list","playUrl":"https://player.sewozyplayer.com/m3u8/?url=","searchable":1,"quickSearch":0,"filterable":0}, +{"key":"精工厂资源","name":"精工厂资源","type":0,"api":"https://jgczyapi.com/home/cjapi/kld2/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"52AV资源","name":"52AV资源","type":0,"api":"https://52zyapi.com/home/cjapi/asda/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"大MM资源","name":"大MM资源","type":0,"api":"https://www.dmmapi.com/home/cjapi/asd2c7/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"玖玖资源","name":"玖玖资源","type":0,"api":"http://99zywcj.com/inc/sapi.php?ac=videolist","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"狼少年","name":"狼少年","type":0,"api":"http://cjmygzy.com/inc/sapi.php?ac=videolist","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"环亚资源","name":"环亚资源","type":0,"api":"http://wmcj8.com/inc/sapi.php?ac=videolist","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"黄瓜TV资源","name":"黄瓜TV资源","type":0,"api":"https://www.caiji10.com/home/cjapi/cfs6/mc10/vod/xml","searchable":0,"quickSearch":0}, +{"key":"草榴视频","name":"草榴视频","type":0,"api":"https://www.caiji02.com/home/cjapi/cfas/mc10/vod/xml","searchable":0,"quickSearch":0}, +{"key":"佳丽资源","name":"佳丽资源","type":1,"api":"http://www.jializyzapi.com/api.php/provide/vod/","searchable":0,"quickSearch":0}, +{"key":"影库资源-伦理","name":"影库资源-伦理","type":1,"api":"https://api.ykapi.net/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"酷伦理","name":"酷伦理-伦理","type":1,"api":"https://api.kudian70.com/api.php/provide/vod/","searchable":1,"quickSearch":1,"filterable":0}, +{"key":"博天堂","name":"博天堂-伦理","type":0,"api":"http://bttcj.com/inc/sapi.php","searchable":1,"quickSearch":1,"filterable":0} +], +"parses":[ +{"name":"解析聚合","type":3,"url":"Demo"}, +{"name":"Json并发","type":2,"url":"Parallel"}, +{"name":"Json轮询","type":2,"url":"Sequence"}, +{"name":"手动解析 1","type":0,"url":"https://vip.parwix.com:4433/player/?url=","ext":{"flag":["qq","腾讯","qiyi","iqiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"]}}, +{"name": "手动解析 2","type": 0,"url": "https://jx.bozrc.com:4433/player/?url=","ext": {"flag": ["qq", "腾讯", "qiyi", "爱奇艺", "奇艺", "youku", "优酷", "mgtv", "芒果", "letv", "乐视", "pptv", "PPTV", "sohu", "bilibili", "哔哩哔哩", "哔哩"]}}, +{"name":"手动解析 3","type":0,"url":"https://jx.m3u8.tv/jiexi/?url="}, +{"name":"手动解析 4","type":0,"url": "https://chaxun.truechat365.com/?url=","ext":{"flag":["qq","腾讯","qiyi","iqiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"]}}, +{"name": "OK手动解析","type": 0,"url": "https://okjx.cc/?url="}, +{"name": "ZNJSON解析","type": 1,"url": "https://svip.znjson.com/api/?key=gX8j9IPvoQ5mFmlIzu&url="}, +{"name": "绿叶解析","type": 1,"url": "https://hc.izny.cn/json.php?url="}, +{"name": "爱酷","type": 1,"url": "https://jx.zhanlangbu.com/API.php?appkey=53df3aa2fdb66bcbc4d05730b6fbfc71&url="}, +{"name":"不知名1","type":1,"url":"http://api.ckflv.cn/?url="}, +{"name": "懒人","type": 1,"url": "http://120.53.102.254/jx1/jx75.php?url="}, +{"name": "江湖","type": 1,"url": "http://211.99.99.236:4567/jhjson/ceshi.php?url="}, +{"name": "GGTV自用","type": 1,"url": "https://play.fuqizhishi.com/jx/API.php?appkey=xiaobai666&url="}, +{"name": "GGTV搜集","type": 1,"url": "https://play.fuqizhishi.com/juhe/API.php?appkey=caijijuhe220902&url="}, +{"name": "keyu","type": 1,"url": "http://newjiexi.gotka.top/keyu3.php?url=","ext": {"flag": ["qq", "腾讯", "qiyi", "爱奇艺", "奇艺", "youku", "优酷", "mgtv", "芒果", "letv", "乐视", "pptv", "PPTV", "sohu", "bilibili", "哔哩哔哩", "哔哩"],"header": {"User-Agent": "okhttp/4.1.0"}}}, +{"name": "爱酷看看","type": 1,"url": "http://www.ikukk.com/?ac=1&url="}, +{"name": "油果","type": 1,"url": "http://json.youguo520.top/fufeng/?url=","ext":{"flag":["qq","腾讯","qiyi","iqiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"],"header": {"User-Agent": "Dart/2.14 (dart:io)"}}}, +{"name":"乐多","type":1,"url":"https://api.ldjx.cc/wp-api/getvodurl.php?token=1001&vid=","ext":{"flag":["leduo"]}}, +{"name": "星辰手动","type": 0,"url": "https://svip.spchat.top/api/?key=s0rhPxBRt8u8YqmPtO&url="} +], + +"flags":["youku","qq","iqiyi","qiyi","letv","sohu","tudou","pptv","mgtv","wasu","bilibili","renrenmi","1905", "xigua","ltnb","CL4K"], +"ijk":[ +{"group":"软解码","options":[ +{"category":4,"name":"opensles","value":"0"}, +{"category":4,"name":"overlay-format","value":"842225234"}, +{"category":4,"name":"framedrop","value":"1"}, +{"category":4,"name":"soundtouch","value":"1"}, +{"category":4,"name":"start-on-prepared","value":"1"}, +{"category":1,"name":"http-detect-range-support","value":"0"}, +{"category":1,"name":"fflags","value":"fastseek"}, +{"category":2,"name":"skip_loop_filter","value":"48"}, +{"category":4,"name":"reconnect","value":"1"}, +{"category":4,"name":"enable-accurate-seek","value":"0"}, +{"category":4,"name":"mediacodec","value":"0"}, +{"category":4,"name":"mediacodec-auto-rotate","value":"0"}, +{"category":4,"name":"mediacodec-handle-resolution-change","value":"0"}, +{"category":4,"name":"mediacodec-hevc","value":"0"}, +{"category":1,"name":"dns_cache_timeout","value":"600000000"} +]}, +{"group":"硬解码","options":[ +{"category":4,"name":"opensles","value":"0"}, +{"category":4,"name":"overlay-format","value":"842225234"}, +{"category":4,"name":"framedrop","value":"1"}, +{"category":4,"name":"soundtouch","value":"1"}, +{"category":4,"name":"start-on-prepared","value":"1"}, +{"category":1,"name":"http-detect-range-support","value":"0"}, +{"category":1,"name":"fflags","value":"fastseek"}, +{"category":2,"name":"skip_loop_filter","value":"48"}, +{"category":4,"name":"reconnect","value":"1"}, +{"category":4,"name":"enable-accurate-seek","value":"0"}, +{"category":4,"name":"mediacodec","value":"1"}, +{"category":4,"name":"mediacodec-auto-rotate","value":"1"}, +{"category":4,"name":"mediacodec-handle-resolution-change","value":"1"}, +{"category":4,"name":"mediacodec-hevc","value":"1"}, +{"category":1,"name":"dns_cache_timeout","value":"600000000"} +]} +], +"ads":["mimg.0c1q0l.cn","www.googletagmanager.com","www.google-analytics.com","mc.usihnbcq.cn","mg.g1mm3d.cn","mscs.svaeuzh.cn","cnzz.hhttm.top","tp.vinuxhome.com","cnzz.mmstat.com","www.baihuillq.com","s23.cnzz.com","z3.cnzz.com","c.cnzz.com","stj.v1vo.top","z12.cnzz.com","img.mosflower.cn","tips.gamevvip.com","ehwe.yhdtns.com","xdn.cqqc3.com","www.jixunkyy.cn","sp.chemacid.cn","hm.baidu.com","s9.cnzz.com","z6.cnzz.com","um.cavuc.com","mav.mavuz.com","wofwk.aoidf3.com","z5.cnzz.com","xc.hubeijieshikj.cn","tj.tianwenhu.com","xg.gars57.cn","k.jinxiuzhilv.com","cdn.bootcss.com","ppl.xunzhuo123.com","xomk.jiangjunmh.top","img.xunzhuo123.com","z1.cnzz.com","s13.cnzz.com","xg.huataisangao.cn","z7.cnzz.com","xg.huataisangao.cn","z2.cnzz.com","s96.cnzz.com","q11.cnzz.com","thy.dacedsfa.cn","xg.whsbpw.cn","s19.cnzz.com","z8.cnzz.com","s4.cnzz.com","f5w.as12df.top","ae01.alicdn.com","www.92424.cn","k.wudejia.com","vivovip.mmszxc.top","qiu.xixiqiu.com","cdnjs.hnfenxun.com","cms.qdwght.com"] +} \ No newline at end of file