From dd783d3b5348b0a8fe9f9782d0aea80a15c65af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E5=90=8D=E7=9A=84=E6=82=B2=E4=BC=A4?= <96115498+Dong-learn9@users.noreply.github.com> Date: Thu, 15 Dec 2022 00:26:58 +0800 Subject: [PATCH] Delete plugin directory --- plugin/0.jar | Bin 264577 -> 0 bytes plugin/pluto.json | 687 -------------------------------- plugin/py_3qu.py | 191 --------- plugin/py_ali.py | 405 ------------------- plugin/py_alist.py | 166 -------- plugin/py_bdys.py | 291 -------------- plugin/py_bilibili.py | 356 ----------------- plugin/py_bilimd.py | 214 ---------- plugin/py_bilivd.py | 231 ----------- plugin/py_cctv.py | 194 ---------- plugin/py_cokemv.py | 232 ----------- plugin/py_cup.py | 241 ------------ plugin/py_cyys.py | 216 ----------- plugin/py_czspp.py | 244 ------------ plugin/py_douyu.py | 147 ------- plugin/py_genmov.py | 202 ---------- plugin/py_gimytv.py | 216 ----------- plugin/py_gitcafe.py | 136 ------- plugin/py_huya.py | 883 ------------------------------------------ plugin/py_kuaikan.py | 105 ----- plugin/py_lezhu.py | 230 ----------- plugin/py_pansou.py | 92 ----- plugin/py_star.py | 156 -------- plugin/py_voflix.py | 228 ----------- plugin/py_wmkk.py | 176 --------- plugin/py_xmaomi.py | 258 ------------ plugin/py_yiso.py | 63 --- plugin/py_zhaozy.py | 85 ---- plugin/py_zxzj.py | 246 ------------ plugin/py_小纸条.py | 136 ------- plugin/tvbox.json | 577 --------------------------- 31 files changed, 7604 deletions(-) delete mode 100644 plugin/0.jar delete mode 100644 plugin/pluto.json delete mode 100644 plugin/py_3qu.py delete mode 100644 plugin/py_ali.py delete mode 100644 plugin/py_alist.py delete mode 100644 plugin/py_bdys.py delete mode 100644 plugin/py_bilibili.py delete mode 100644 plugin/py_bilimd.py delete mode 100644 plugin/py_bilivd.py delete mode 100644 plugin/py_cctv.py delete mode 100644 plugin/py_cokemv.py delete mode 100644 plugin/py_cup.py delete mode 100644 plugin/py_cyys.py delete mode 100644 plugin/py_czspp.py delete mode 100644 plugin/py_douyu.py delete mode 100644 plugin/py_genmov.py delete mode 100644 plugin/py_gimytv.py delete mode 100644 plugin/py_gitcafe.py delete mode 100644 plugin/py_huya.py delete mode 100644 plugin/py_kuaikan.py delete mode 100644 plugin/py_lezhu.py delete mode 100644 plugin/py_pansou.py delete mode 100644 plugin/py_star.py delete mode 100644 plugin/py_voflix.py delete mode 100644 plugin/py_wmkk.py delete mode 100644 plugin/py_xmaomi.py delete mode 100644 plugin/py_yiso.py delete mode 100644 plugin/py_zhaozy.py delete mode 100644 plugin/py_zxzj.py delete mode 100644 plugin/py_小纸条.py delete mode 100644 plugin/tvbox.json diff --git a/plugin/0.jar b/plugin/0.jar deleted file mode 100644 index daabb789ed7ca3464591fb2f10cf14313ce9aaab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264577 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

5h5k0x*F{)qBnE4%x4Z|FRb-Z+{O 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

Uq@~JN~qZkCeV@Om69FA&#^d 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%0DANU2@0K1l86U|&|# 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 WO0uwU|Fwep{CI!G( diff --git a/plugin/pluto.json b/plugin/pluto.json deleted file mode 100644 index 9a8250c..0000000 --- a/plugin/pluto.json +++ /dev/null @@ -1,687 +0,0 @@ -{ - "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 deleted file mode 100644 index a897313..0000000 --- a/plugin/py_3qu.py +++ /dev/null @@ -1,191 +0,0 @@ -# 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 deleted file mode 100644 index 1c93b17..0000000 --- a/plugin/py_ali.py +++ /dev/null @@ -1,405 +0,0 @@ -#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 deleted file mode 100644 index 02ad991..0000000 --- a/plugin/py_alist.py +++ /dev/null @@ -1,166 +0,0 @@ -# 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 deleted file mode 100644 index cfcd0a3..0000000 --- a/plugin/py_bdys.py +++ /dev/null @@ -1,291 +0,0 @@ -#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 deleted file mode 100644 index 2bf77b2..0000000 --- a/plugin/py_bilibili.py +++ /dev/null @@ -1,356 +0,0 @@ -#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 deleted file mode 100644 index 43b7653..0000000 --- a/plugin/py_bilimd.py +++ /dev/null @@ -1,214 +0,0 @@ -#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 deleted file mode 100644 index f7100cf..0000000 --- a/plugin/py_bilivd.py +++ /dev/null @@ -1,231 +0,0 @@ -# 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 deleted file mode 100644 index 8a359c2..0000000 --- a/plugin/py_cctv.py +++ /dev/null @@ -1,194 +0,0 @@ -#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 deleted file mode 100644 index 96bf2aa..0000000 --- a/plugin/py_cokemv.py +++ /dev/null @@ -1,232 +0,0 @@ -#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 deleted file mode 100644 index c1772d2..0000000 --- a/plugin/py_cup.py +++ /dev/null @@ -1,241 +0,0 @@ -#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 deleted file mode 100644 index a164d4c..0000000 --- a/plugin/py_cyys.py +++ /dev/null @@ -1,216 +0,0 @@ -# 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 deleted file mode 100644 index 73b8eab..0000000 --- a/plugin/py_czspp.py +++ /dev/null @@ -1,244 +0,0 @@ -# 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 deleted file mode 100644 index 3738024..0000000 --- a/plugin/py_douyu.py +++ /dev/null @@ -1,147 +0,0 @@ -#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 deleted file mode 100644 index b00249b..0000000 --- a/plugin/py_genmov.py +++ /dev/null @@ -1,202 +0,0 @@ -#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 deleted file mode 100644 index 669fced..0000000 --- a/plugin/py_gimytv.py +++ /dev/null @@ -1,216 +0,0 @@ -#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 deleted file mode 100644 index 7f4c2f1..0000000 --- a/plugin/py_gitcafe.py +++ /dev/null @@ -1,136 +0,0 @@ -#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 deleted file mode 100644 index 7649af5..0000000 --- a/plugin/py_huya.py +++ /dev/null @@ -1,883 +0,0 @@ -#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 deleted file mode 100644 index c6c4287..0000000 --- a/plugin/py_kuaikan.py +++ /dev/null @@ -1,105 +0,0 @@ -#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 deleted file mode 100644 index 00416d9..0000000 --- a/plugin/py_lezhu.py +++ /dev/null @@ -1,230 +0,0 @@ -# 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 deleted file mode 100644 index 54fab0f..0000000 --- a/plugin/py_pansou.py +++ /dev/null @@ -1,92 +0,0 @@ -#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 deleted file mode 100644 index 01bb898..0000000 --- a/plugin/py_star.py +++ /dev/null @@ -1,156 +0,0 @@ -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 deleted file mode 100644 index 1f60675..0000000 --- a/plugin/py_voflix.py +++ /dev/null @@ -1,228 +0,0 @@ -#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 deleted file mode 100644 index b01572c..0000000 --- a/plugin/py_wmkk.py +++ /dev/null @@ -1,176 +0,0 @@ -# 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 deleted file mode 100644 index 83e6b7f..0000000 --- a/plugin/py_xmaomi.py +++ /dev/null @@ -1,258 +0,0 @@ -#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 deleted file mode 100644 index 4ce5f65..0000000 --- a/plugin/py_yiso.py +++ /dev/null @@ -1,63 +0,0 @@ -#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 deleted file mode 100644 index f2039e0..0000000 --- a/plugin/py_zhaozy.py +++ /dev/null @@ -1,85 +0,0 @@ -#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 deleted file mode 100644 index aab5bb7..0000000 --- a/plugin/py_zxzj.py +++ /dev/null @@ -1,246 +0,0 @@ -#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 deleted file mode 100644 index 7f4c2f1..0000000 --- a/plugin/py_小纸条.py +++ /dev/null @@ -1,136 +0,0 @@ -#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 deleted file mode 100644 index fc11d23..0000000 --- a/plugin/tvbox.json +++ /dev/null @@ -1,577 +0,0 @@ -{ -"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