├── 4K-2.bmp ├── JAR ├── 0706.jar ├── MQiTV.jar ├── XBPQ.jar ├── XMKY.jar ├── XYQ.jar ├── XYQ2.jar ├── custom_spider.jar ├── fm.jar ├── fty.jar ├── gm.jar ├── huaren.jar ├── ok.jar ├── okjpg.txt ├── okpng.txt ├── pg.jar ├── py.jar ├── short.jar ├── spider.jar ├── update_TV.jar ├── update_tvbox.jar ├── wex.jar ├── wex.txt ├── xyqxbpq.jar ├── yt32.jar └── yt64.jar ├── KTV.bmp ├── MTV.txt ├── MV.bmp ├── Plugin ├── py_1080P.py ├── py_4KAV.py ├── py_51.py ├── py_95wm.py ├── py_CliCli.py ├── py_Gold.py ├── py_MiFun.py ├── py_NO3.py ├── py_Phub.py ├── py_Twitter.py ├── py_Xhm.py ├── py_Xvd.py ├── py_aigua.py ├── py_aowu.py ├── py_appV2.py ├── py_apple.py ├── py_beesport.py ├── py_cenguigui.py ├── py_cloud.py ├── py_cloudspeed.py ├── py_cube.py ├── py_dcmovie.py ├── py_dsys.py ├── py_edge.py ├── py_feifanziyuan.py ├── py_fish.py ├── py_fullhd.py ├── py_guowa.py ├── py_hitv.py ├── py_hongguodj.py ├── py_hszy.py ├── py_huadu.py ├── py_iqiyi.py ├── py_jdys.py ├── py_jiangsu.py ├── py_jianpian.py ├── py_jieyingshi.py ├── py_jubaba.py ├── py_keke.py ├── py_libvio.py ├── py_litv.py ├── py_live.py ├── py_lm.py ├── py_lreeok.py ├── py_mgtv.py ├── py_missav.py ├── py_moviehunter.py ├── py_mp.py ├── py_nhsyy.py ├── py_nivod.py ├── py_novipnoad.py ├── py_ppx.py ├── py_qj1080.py ├── py_qq.py ├── py_rbotv.py ├── py_redbook.py ├── py_sebo.py ├── py_shijue.py ├── py_smt.py ├── py_speed.py ├── py_subaibai.py ├── py_tgydy.py ├── py_toule.py ├── py_want.py ├── py_wow.py ├── py_xhamster.py ├── py_xiaohys.py ├── py_xiaoji.py ├── py_yemu.py ├── py_youku.py ├── py_yyys.py └── py_zero.py ├── README.md ├── YogurtTv.m3u ├── api.bmp ├── img ├── 1868.png ├── ATV.png ├── ELTA8.png ├── Globetrotter.png ├── K_Channel.png ├── Pandora.png ├── RTHK34.png ├── RTHK35.png ├── Songshi_1.png ├── Songshi_2.png ├── Songshi_3.png ├── ZWTV.png ├── banana.png ├── huayi4.png ├── iQIYI.png ├── ofiii1048_tv.png ├── ofiii32_tv.png ├── ofiii82_tv.png └── ofiii_tv.png ├── js ├── 1080kanju.js ├── 123kubo.js ├── 139ys.js ├── 188kan.js ├── 18ha.js ├── 360.js ├── 420.js ├── 4K4K.js ├── 4kdyw.js ├── 4khdr.js ├── 4kvcd.js ├── 555dy.js ├── 555dy_open.js ├── 6dtv.js ├── 777tv.js ├── 996w.js ├── 99itv.js ├── Auete.js ├── HDmoli.js ├── Jpys.js ├── KOK.js ├── KTV.js ├── LIBVIO.js ├── Mengdandan.js ├── Panghuys.js ├── Voflix.js ├── aidiapp.js ├── aikan.js ├── aiqiyi.js ├── bahaoys.js ├── bear.js ├── bili_open.js ├── bilibili.js ├── bowang.js ├── bpys_open.js ├── bttwo.js ├── caigou.js ├── chinaqtv.js ├── cilixiong.js ├── cokemv.js ├── cpldq.js ├── cttv.js ├── czspp.js ├── czzy_open.js ├── dandanju.js ├── ddys.js ├── dmxq.js ├── douban.js ├── drpy.js ├── dsxys.js ├── duanju.js ├── duboku.js ├── duboku_open.js ├── duonaovod.js ├── dygang.json ├── dyxs.js ├── emofun.js ├── feitu.js ├── ffzy.js ├── focus_hua.js ├── giant.js ├── gimyai.js ├── gimyim.js ├── gimymore.js ├── gimysapp.js ├── gimysu.js ├── gimytw.js ├── haitu.js ├── hgyx.js ├── hoho.js ├── huale.js ├── huamaotv.js ├── if101.js ├── ihoho.js ├── ikanbot2.js ├── ikanbot3.js ├── ikanbot_open.js ├── imaple.js ├── inmi.js ├── iyf1.js ├── jinmantv.js ├── jiohub_open.js ├── jqqzx.js ├── jsencrypt.js ├── keke5.js ├── kkys.js ├── kkys_open.js ├── ktv_open.js ├── kuin.js ├── kunyu77_open.js ├── l0l.js ├── lenxitv.js ├── lf_ikanbot5_2_min.js ├── lf_live10_min.js ├── lf_live_min.js ├── lf_pushagent_min.js ├── lf_search3_min.js ├── lfyttv.js ├── lggys.js ├── lgyy.js ├── littleapple_open.js ├── live2vod.js ├── lyys8.js ├── lzizy9.js ├── mangguo.js ├── mgtvfun.js ├── miai.js ├── mitu.js ├── momovod.js ├── naifei.js ├── nanguatv.js ├── netflixdog.js ├── newvision.js ├── ng_open.js ├── nivod_op.js ├── nmddd.js ├── nycvod.js ├── pipiya.js ├── pipiyacc.js ├── qfitv.js ├── reboku.js ├── rebozj.js ├── redme.txt ├── rttks.js ├── shdy3.js ├── shigys.js ├── smart.js ├── tengxun.js ├── trj.js ├── waipian.js ├── weixiaolove.js ├── wogg_open.js ├── xb6v.js ├── xiaobaotv.js ├── yanetflix.js ├── yingszj.js ├── yingzhazha.js ├── yinyuetai_open.js ├── youku.js ├── yqktv_open.js ├── ysfp.user.js ├── ysgc.js ├── ystp.js └── zxzj.js ├── json ├── MayiTube.json ├── Pornhub.json ├── bestpipe.json ├── bilibili.json ├── biliych.json ├── douban.json ├── duboku.json ├── dygang.json ├── euvod.json ├── feikuai.json ├── hanjukankan.json ├── hoho.json ├── jianpian.json ├── lzizy9.json ├── market.json ├── moli.json ├── naifei.json ├── nivod.json ├── nmys.json ├── redme.txt ├── renren.json ├── wogg.json ├── yanetflix.json ├── youtube.json ├── ysgc.json └── yt.json ├── lf_live.txt ├── lib ├── 2.15.so ├── ali.js ├── ali_api.js ├── caiji.js ├── cat.js ├── crypto-js.js ├── drpy2.js ├── drpy2.min.js ├── gbk.js ├── geoip.dat.gz ├── js │ ├── APPV2.js │ ├── AppYsV2.js │ ├── alist.min.js │ ├── caiji.js │ ├── cheerio.min.js │ ├── crypto-hiker.js │ ├── crypto-js.js │ ├── drT.js │ ├── drpy.js │ ├── drpy.min.js │ ├── drpy.ym.js │ ├── drpy2.js │ ├── drpy2.min.js │ ├── drpy2.min.txt │ ├── gbk.js │ ├── jinja.js │ ├── jinja.min.js │ ├── jsencrypt.js │ ├── json5.js │ ├── mod.js │ ├── node-rsa.js │ ├── pako.min.js │ ├── quark.min.js │ ├── sortName.js │ ├── uri.min.js │ └── 模板.js ├── pikpakclass.json.db.gz ├── similarity.js ├── utils.js ├── x.so └── yg.so ├── op.bmp ├── smart.m3u ├── smart.txt ├── smart2 ├── yt.json └── zyapi.json /4K-2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/4K-2.bmp -------------------------------------------------------------------------------- /JAR/0706.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/0706.jar -------------------------------------------------------------------------------- /JAR/MQiTV.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/MQiTV.jar -------------------------------------------------------------------------------- /JAR/XBPQ.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/XBPQ.jar -------------------------------------------------------------------------------- /JAR/XMKY.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/XMKY.jar -------------------------------------------------------------------------------- /JAR/XYQ.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/XYQ.jar -------------------------------------------------------------------------------- /JAR/XYQ2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/XYQ2.jar -------------------------------------------------------------------------------- /JAR/custom_spider.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/custom_spider.jar -------------------------------------------------------------------------------- /JAR/fm.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/fm.jar -------------------------------------------------------------------------------- /JAR/fty.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/fty.jar -------------------------------------------------------------------------------- /JAR/gm.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/gm.jar -------------------------------------------------------------------------------- /JAR/huaren.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/huaren.jar -------------------------------------------------------------------------------- /JAR/ok.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/ok.jar -------------------------------------------------------------------------------- /JAR/okjpg.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/okjpg.txt -------------------------------------------------------------------------------- /JAR/okpng.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/okpng.txt -------------------------------------------------------------------------------- /JAR/pg.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/pg.jar -------------------------------------------------------------------------------- /JAR/py.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/py.jar -------------------------------------------------------------------------------- /JAR/short.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/short.jar -------------------------------------------------------------------------------- /JAR/spider.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/spider.jar -------------------------------------------------------------------------------- /JAR/update_TV.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/update_TV.jar -------------------------------------------------------------------------------- /JAR/update_tvbox.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/update_tvbox.jar -------------------------------------------------------------------------------- /JAR/wex.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/wex.jar -------------------------------------------------------------------------------- /JAR/wex.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/wex.txt -------------------------------------------------------------------------------- /JAR/xyqxbpq.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/xyqxbpq.jar -------------------------------------------------------------------------------- /JAR/yt32.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/yt32.jar -------------------------------------------------------------------------------- /JAR/yt64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/JAR/yt64.jar -------------------------------------------------------------------------------- /KTV.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/KTV.bmp -------------------------------------------------------------------------------- /MV.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/MV.bmp -------------------------------------------------------------------------------- /Plugin/py_4KAV.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # by @嗷呜 3 | import sys 4 | from pyquery import PyQuery as pq 5 | sys.path.append('..') 6 | from base.spider import Spider 7 | 8 | 9 | class Spider(Spider): 10 | 11 | def init(self, extend=""): 12 | pass 13 | 14 | def getName(self): 15 | pass 16 | 17 | def isVideoFormat(self, url): 18 | pass 19 | 20 | def manualVideoCheck(self): 21 | pass 22 | 23 | def destroy(self): 24 | pass 25 | 26 | headers = { 27 | 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 28 | 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 29 | 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', 30 | 'sec-ch-ua-platform': '"macOS"', 31 | 'sec-fetch-dest': 'document', 32 | 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1' 33 | } 34 | 35 | host = "https://4k-av.com" 36 | 37 | def homeContent(self, filter): 38 | data=self.getpq() 39 | result = {} 40 | classes = [] 41 | for k in list(data('#category ul li').items())[:-1]: 42 | classes.append({ 43 | 'type_name': k.text(), 44 | 'type_id': k('a').attr('href') 45 | }) 46 | result['class'] = classes 47 | result['list'] = self.getlist(data('#MainContent_scrollul ul li'),'.poster span') 48 | return result 49 | 50 | def homeVideoContent(self): 51 | pass 52 | 53 | def categoryContent(self, tid, pg, filter, extend): 54 | data=self.getpq(f"{tid}page-{pg}.html") 55 | result = {} 56 | result['list'] = self.getlist(data('#MainContent_newestlist .virow .NTMitem')) 57 | result['page'] = pg 58 | result['pagecount'] = 9999 59 | result['limit'] = 90 60 | result['total'] = 999999 61 | return result 62 | 63 | def detailContent(self, ids): 64 | data = self.getpq(ids[0]) 65 | v = data('#videoinfo') 66 | vod = { 67 | 'vod_name': data('#tophead h1').text().split(' ')[0], 68 | 'type_name': v('#MainContent_tags.tags a').text(), 69 | 'vod_year': v('#MainContent_videodetail.videodetail a').text(), 70 | 'vod_remarks': v('#MainContent_titleh12 h2').text(), 71 | 'vod_content': v('p.cnline').text(), 72 | 'vod_play_from': '4KAV', 73 | 'vod_play_url': '' 74 | } 75 | vlist = data('#rtlist li') 76 | jn = f"{vod['vod_name']}_" if 'EP0' in vlist.eq(0)('span').text() else '' 77 | if vlist: 78 | c = [f"{jn}{i('span').text()}${i('a').attr('href')}" for i in list(vlist.items())[1:]] 79 | c.insert(0, f"{jn}{vlist.eq(0)('span').text()}${ids[0]}") 80 | vod['vod_play_url'] = '#'.join(c) 81 | else: 82 | vod['vod_play_url'] = f"{vod['vod_name']}${ids[0]}" 83 | return {'list': [vod]} 84 | 85 | def searchContent(self, key, quick, pg="1"): 86 | data=self.getpq(f"/s?k={key}") 87 | return {'list':self.getlist(data('#MainContent_newestlist .virow.search .NTMitem.Main'))} 88 | 89 | def playerContent(self, flag, id, vipFlags): 90 | try: 91 | data=self.getpq(id) 92 | p,url=0,data('#MainContent_videowindow source').attr('src') 93 | if not url:raise Exception("未找到播放地址") 94 | except Exception as e: 95 | p,url=1,f"{self.host}{id}" 96 | headers = { 97 | 'origin': self.host, 98 | 'referer': f'{self.host}/', 99 | 'sec-ch-ua-platform': '"macOS"', 100 | 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1', 101 | } 102 | return {'parse': p, 'url': url, 'header': headers} 103 | 104 | def localProxy(self, param): 105 | pass 106 | 107 | def liveContent(self, url): 108 | pass 109 | 110 | def getlist(self,data,y='.resyear label[title="分辨率"]'): 111 | videos = [] 112 | for i in data.items(): 113 | ns = i('.title h2').text().split(' ') 114 | videos.append({ 115 | 'vod_id': i('.title a').attr('href'), 116 | 'vod_name': ns[0], 117 | 'vod_pic': i('.poster img').attr('src'), 118 | 'vod_remarks': ns[-1] if len(ns) > 1 else '', 119 | 'vod_year': i(y).text() 120 | }) 121 | return videos 122 | 123 | def getpq(self, path=''): 124 | url=f"{self.host}{path}" 125 | data=self.fetch(url,headers=self.headers).text 126 | try: 127 | return pq(data) 128 | except Exception as e: 129 | print(f"{str(e)}") 130 | return pq(data.encode('utf-8')) 131 | -------------------------------------------------------------------------------- /Plugin/py_appV2.py: -------------------------------------------------------------------------------- 1 | # by @嗷呜 2 | import json 3 | import re 4 | import sys 5 | from Crypto.Util.Padding import unpad 6 | sys.path.append('..') 7 | from base.spider import Spider 8 | 9 | 10 | class Spider(Spider): 11 | 12 | def init(self, extend=""): 13 | ''' 14 | example: 15 | { 16 | "key": "py_appV2", 17 | "name": "xxx", 18 | "type": 3, 19 | "searchable": 1, 20 | "quickSearch": 1, 21 | "filterable": 1, 22 | "api": "./py/appV2.py", 23 | "ext": "http://cmsyt.lyyytv.cn" 24 | } 25 | 26 | ''' 27 | self.host=extend 28 | pass 29 | 30 | def getName(self): 31 | pass 32 | 33 | def isVideoFormat(self, url): 34 | pass 35 | 36 | def manualVideoCheck(self): 37 | pass 38 | 39 | def destroy(self): 40 | pass 41 | 42 | headers = { 43 | 'User-Agent': 'okhttp/4.12.0', 44 | } 45 | 46 | def homeContent(self, filter): 47 | data = self.fetch(f"{self.host}//api.php/app/nav?token=",headers=self.headers).json() 48 | keys = ["class", "area", "lang", "year", "letter", "by", "sort"] 49 | filters = {} 50 | classes = [] 51 | for item in data['list']: 52 | has_non_empty_field = False 53 | jsontype_extend = item["type_extend"] 54 | classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) 55 | for key in keys: 56 | if key in jsontype_extend and jsontype_extend[key].strip() != "": 57 | has_non_empty_field = True 58 | break 59 | if has_non_empty_field: 60 | filters[str(item["type_id"])] = [] 61 | for dkey in jsontype_extend: 62 | if dkey in keys and jsontype_extend[dkey].strip() != "": 63 | values = jsontype_extend[dkey].split(",") 64 | value_array = [{"n": value.strip(), "v": value.strip()} for value in values if 65 | value.strip() != ""] 66 | filters[str(item["type_id"])].append({"key": dkey, "name": dkey, "value": value_array}) 67 | result = {} 68 | result["class"] = classes 69 | result["filters"] = filters 70 | return result 71 | 72 | def homeVideoContent(self): 73 | data=self.fetch(f"{self.host}/api.php/app/index_video?token=",headers=self.headers).json() 74 | videos=[] 75 | for item in data['list']:videos.extend(item['vlist']) 76 | return {'list':videos} 77 | 78 | def categoryContent(self, tid, pg, filter, extend): 79 | params = {'tid':tid,'class':extend.get('class',''),'area':extend.get('area',''),'lang':extend.get('lang',''),'year':extend.get('year',''),'limit':'18','pg':pg} 80 | data=self.fetch(f"{self.host}/api.php/app/video",params=params,headers=self.headers).json() 81 | return data 82 | 83 | def detailContent(self, ids): 84 | data=self.fetch(f"{self.host}/api.php/app/video_detail?id={ids[0]}",headers=self.headers).json() 85 | return {'list':[data['data']]} 86 | 87 | def searchContent(self, key, quick, pg="1"): 88 | data=self.fetch(f"{self.host}/api.php/app/search?text={key}&pg={pg}",headers=self.headers).json() 89 | videos=data['list'] 90 | for item in data['list']: 91 | item.pop('type', None) 92 | return {'list':videos,'page':pg} 93 | 94 | def playerContent(self, flag, id, vipFlags): 95 | return {'jx':1,'playUrl':'','parse': 1, 'url': id, 'header': self.headers} 96 | 97 | def localProxy(self, param): 98 | pass 99 | 100 | 101 | -------------------------------------------------------------------------------- /Plugin/py_apple.py: -------------------------------------------------------------------------------- 1 | 2 | # -*- coding: utf-8 -*- 3 | # by @嗷呜 4 | import sys 5 | sys.path.append('..') 6 | from base.spider import Spider 7 | 8 | class Spider(Spider): 9 | 10 | def init(self, extend=""): 11 | pass 12 | 13 | def isVideoFormat(self, url): 14 | pass 15 | 16 | def manualVideoCheck(self): 17 | pass 18 | 19 | def destroy(self): 20 | pass 21 | 22 | host='http://item.xpgcom.com' 23 | 24 | headers = { 25 | "User-Agent": "okhttp/3.12.11" 26 | } 27 | 28 | def homeContent(self, filter): 29 | data = self.fetch(f"{self.host}/api.php/v2.vod/androidtypes",headers=self.headers,).json() 30 | dy = { 31 | "classes": "类型", 32 | "areas": "地区", 33 | "years": "年份", 34 | "sortby": "排序", 35 | } 36 | filters = {} 37 | classes = [] 38 | for item in data['data']: 39 | has_non_empty_field = False 40 | item['sortby'] = ['updatetime', 'hits', 'score'] 41 | demos = ['时间', '人气', '评分'] 42 | classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])}) 43 | for key in dy: 44 | if key in item and len(item[key]) > 1: 45 | has_non_empty_field = True 46 | break 47 | if has_non_empty_field: 48 | filters[str(item["type_id"])] = [] 49 | for dkey in item: 50 | if dkey in dy and len(item[dkey]) > 1: 51 | values = item[dkey] 52 | value_array = [ 53 | {"n": demos[idx] if dkey == "sortby" else value.strip(), "v": value.strip()} 54 | for idx, value in enumerate(values) 55 | if value.strip() != "" 56 | ] 57 | filters[str(item["type_id"])].append( 58 | {"key": dkey, "name": dy[dkey], "value": value_array} 59 | ) 60 | result = {} 61 | result["class"] = classes 62 | result["filters"] = filters 63 | return result 64 | 65 | def homeVideoContent(self): 66 | rsp = self.fetch(f"{self.host}/api.php/v2.main/androidhome", headers=self.headers).json() 67 | videos = [] 68 | for i in rsp['data']['list']:videos.extend(self.getlist(i['list'])) 69 | return {'list':videos} 70 | 71 | def categoryContent(self, tid, pg, filter, extend): 72 | params = { 73 | "page": pg, 74 | "type": tid, 75 | "area":extend.get('areaes',''), 76 | "year":extend.get('yeares',''), 77 | "sortby":extend.get('sortby',''), 78 | "class":extend.get('classes','') 79 | } 80 | params={i:v for i,v in params.items() if v} 81 | rsp = self.fetch(f'{self.host}/api.php/v2.vod/androidfilter10086', headers=self.headers, params=params).json() 82 | result = {} 83 | result['list'] = self.getlist(rsp['data']) 84 | result['page'] = pg 85 | result['pagecount'] = 9999 86 | result['limit'] = 90 87 | result['total'] = 999999 88 | return result 89 | 90 | def detailContent(self, ids): 91 | rsp = self.fetch(f'{self.host}/api.php/v3.vod/androiddetail2?vod_id={ids[0]}', headers=self.headers).json() 92 | v = rsp['data'] 93 | vod = { 94 | 'vod_year':v.get('year'), 95 | 'vod_area':v.get('area'), 96 | 'vod_lang':v.get('lang'), 97 | 'type_name':v.get('className'), 98 | 'vod_actor':v.get('actor'), 99 | 'vod_director':v.get('director'), 100 | 'vod_content':v.get('content'), 101 | 'vod_play_from': '小苹果', 102 | 'vod_play_url': '#'.join([f"{i['key']}${i['url']}" for i in v['urls']]) 103 | } 104 | return {'list':[vod]} 105 | 106 | def searchContent(self, key, quick, pg='1'): 107 | rsp = self.fetch(f'{self.host}/api.php/v2.vod/androidsearch10086?page={pg}&wd={key}', headers=self.headers).json() 108 | return {'list':self.getlist(rsp['data']),'page':pg} 109 | 110 | def playerContent(self, flag, id, vipFlags): 111 | header = { 112 | 'user_id': 'XPGBOX', 113 | 'token2': 'SnAXiSW8vScXE0Z9aDOnK5xffbO75w1+uPom3WjnYfVEA1oWtUdi2Ihy1N8=', 114 | 'version': 'XPGBOX com.phoenix.tv1.5.7', 115 | 'hash': 'd78a', 116 | 'screenx': '2345', 117 | 'user-agent': 'Lavf/58.12.100', 118 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36', 119 | 'token': 'ElEDlwCVgXcFHFhddiq2JKteHofExRBUrfNlmHrWetU3VVkxnzJAodl52N9EUFS+Dig2A/fBa/V9RuoOZRBjYvI+GW8kx3+xMlRecaZuECdb/3AdGkYpkjW3wCnpMQxf8vVeCz5zQLDr8l8bUChJiLLJLGsI+yiNskiJTZz9HiGBZhZuWh1mV1QgYah5CLTbSz8=', 120 | 'timestamp': '1743060300', 121 | 'screeny': '1065', 122 | } 123 | if 'http' not in id:id=f"http://c.xpgtv.net/m3u8/{id}.m3u8" 124 | return {"parse": 0, "url": id, "header": header} 125 | 126 | def localProxy(self, param): 127 | pass 128 | 129 | def getlist(self,data): 130 | videos = [] 131 | for vod in data: 132 | r=f"更新至{vod.get('updateInfo')}" if vod.get('updateInfo') else '' 133 | videos.append({ 134 | "vod_id": vod['id'], 135 | "vod_name": vod['name'], 136 | "vod_pic": vod['pic'], 137 | "vod_remarks": r or vod['score'] 138 | }) 139 | return videos 140 | -------------------------------------------------------------------------------- /Plugin/py_hitv.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # by @嗷呜 3 | import sys 4 | sys.path.append('..') 5 | from base.spider import Spider 6 | import requests 7 | 8 | 9 | class Spider(Spider): 10 | 11 | def init(self, extend=""): 12 | pass 13 | 14 | def getName(self): 15 | return "hitv" 16 | 17 | def isVideoFormat(self, url): 18 | pass 19 | 20 | def manualVideoCheck(self): 21 | pass 22 | 23 | def destroy(self): 24 | pass 25 | 26 | def homeContent(self, filter): 27 | result = {} 28 | cateManual = { 29 | # "直播": "live", 30 | '排行榜': 'rank', 31 | "电影": "1", 32 | "剧集": "2", 33 | "综艺": "3", 34 | "动画": "4", 35 | "短片": "5" 36 | } 37 | classes = [] 38 | for k in cateManual: 39 | classes.append({ 40 | 'type_name': k, 41 | 'type_id': cateManual[k] 42 | }) 43 | result['class'] = classes 44 | return result 45 | 46 | host = "https://wys.upfuhn.com" 47 | headers = { 48 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " 49 | "Chrome/80.0.3987.149 Safari/537.36" 50 | } 51 | 52 | def list(self, list): 53 | videos = [] 54 | for it in list: 55 | videos.append({ 56 | "vod_id": it['video_site_id'], 57 | "vod_name": it['video_name'], 58 | "vod_pic": it['video_horizontal_url'] or it['video_vertical_url'], 59 | "vod_remarks": it['newest_series_num'], 60 | "vod_year": it['years'], 61 | }) 62 | return videos 63 | 64 | def homeVideoContent(self): 65 | url = f'{self.host}/v1/ys_video_sites/hot?t=1' 66 | data = requests.get(url, headers=self.headers).json() 67 | videos = self.list(data['data']['data']) 68 | result = {'list': videos} 69 | return result 70 | 71 | def categoryContent(self, tid, pg, filter, extend): 72 | path = f'/v1/ys_video_sites?t={tid}&s_t=0&a&y&o=0&ps=21&pn={pg}' 73 | rank = False 74 | if tid == 'rank': 75 | if pg == 1: 76 | path = f'/v1/ys_video_sites/ranking' 77 | rank = True 78 | else: 79 | path = '' 80 | # elif tid == 'live' and pg == 1: 81 | # path = f'/v1/ys_live_tvs' 82 | videos = [] 83 | result = {} 84 | try: 85 | data = requests.get(self.host + path, headers=self.headers).json() 86 | if rank: 87 | for video in data['data']: 88 | videos.extend(data['data'][video]) 89 | else: 90 | videos = data['data']['data'] 91 | result = {} 92 | result['list'] = self.list(videos) 93 | result['page'] = pg 94 | result['pagecount'] = 9999 95 | result['limit'] = 90 96 | result['total'] = 999999 97 | except: 98 | result['list'] = [] 99 | return result 100 | 101 | def detailContent(self, ids): 102 | tid = ids[0] 103 | url = f'{self.host}/v1/ys_video_series/by_vid/{tid}' 104 | data = requests.get(url, headers=self.headers).json() 105 | data1 = data['data']['ys_video_site'] 106 | urls = [] 107 | for it in data['data']['data']: 108 | urls.append(it['series_num'] + '$' + it['video_url']) 109 | vod = { 110 | 'vod_name': data1['video_name'], 111 | 'type_name': data1['tag'], 112 | 'vod_year': data1['years'], 113 | 'vod_area': data1['area'], 114 | 'vod_director': data1['main_actor'], 115 | 'vod_content': data1['video_desc'], 116 | 'vod_play_from': '嗷呜在线', 117 | 'vod_play_url': '#'.join(urls), 118 | } 119 | result = { 120 | 'list': [ 121 | vod 122 | ] 123 | } 124 | return result 125 | 126 | def searchContent(self, key, quick, pg=1): 127 | url = f'{self.host}/v1/ys_video_sites/search?s={key}&o=0&ps=200&pn={pg}' 128 | data = requests.get(url, headers=self.headers).json() 129 | videos = data['data']['video_sites'] 130 | if data['data']['first_video_series'] is not None: 131 | videos = [data['data']['first_video_series']] + videos 132 | result = {} 133 | result['list'] = self.list(videos) 134 | result['page'] = pg 135 | return result 136 | 137 | def playerContent(self, flag, id, vipFlags): 138 | result = { 139 | 'url': id, 140 | 'parse': 0, 141 | 'header': self.headers 142 | } 143 | return result 144 | 145 | def localProxy(self, param): 146 | pass 147 | -------------------------------------------------------------------------------- /Plugin/py_hongguodj.py: -------------------------------------------------------------------------------- 1 | # by嗷呜 2 | import re 3 | import sys 4 | from pyquery import PyQuery as pq 5 | sys.path.append('..') 6 | from base.spider import Spider 7 | 8 | class Spider(Spider): 9 | 10 | def init(self, extend=""): 11 | pass 12 | 13 | def getName(self): 14 | pass 15 | 16 | def isVideoFormat(self, url): 17 | pass 18 | 19 | def manualVideoCheck(self): 20 | pass 21 | 22 | def destroy(self): 23 | pass 24 | 25 | host='https://www.hongguodj.cc' 26 | 27 | headers = { 28 | 'Accept': '*/*', 29 | 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 30 | 'Cache-Control': 'no-cache', 31 | 'Connection': 'keep-alive', 32 | 'DNT': '1', 33 | 'Origin': host, 34 | 'Pragma': 'no-cache', 35 | 'Sec-Fetch-Dest': 'empty', 36 | 'Sec-Fetch-Mode': 'cors', 37 | 'Sec-Fetch-Site': 'cross-site', 38 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 39 | 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', 40 | 'sec-ch-ua-mobile': '?0', 41 | 'sec-ch-ua-platform': '"macOS"', 42 | } 43 | 44 | def homeContent(self, filter): 45 | result = {} 46 | classes = [] 47 | vlist = [] 48 | data = pq(self.fetch(self.host, headers=self.headers).text) 49 | for i in list(data('.slip li').items())[1:]: 50 | classes.append({ 51 | 'type_name': i.text(), 52 | 'type_id': re.findall(r'\d+', i('a').attr('href'))[0] 53 | }) 54 | for i in data('.wrap .rows').items(): 55 | vlist.extend(self.getlist(i('li'))) 56 | result['class'] = classes 57 | result['list'] = vlist 58 | return result 59 | 60 | def homeVideoContent(self): 61 | pass 62 | 63 | def categoryContent(self, tid, pg, filter, extend): 64 | data=pq(self.fetch(f'{self.host}/type/{tid}-{pg}.html', headers=self.headers).text) 65 | result = {} 66 | result['list'] = self.getlist(data('.list ul li')) 67 | result['page'] = pg 68 | result['pagecount'] = 9999 69 | result['limit'] = 90 70 | result['total'] = 999999 71 | return result 72 | 73 | def detailContent(self, ids): 74 | data=pq(self.fetch(f'{self.host}{ids[0]}', headers=self.headers).text) 75 | v=data('.info') 76 | p=v('p') 77 | vod = { 78 | 'vod_name': v('h1').text(), 79 | 'type_name': p.eq(2).text(), 80 | 'vod_year': p.eq(3).text(), 81 | 'vod_area': p.eq(4).text(), 82 | 'vod_remarks': v('em').text(), 83 | 'vod_actor': p.eq(0).text(), 84 | 'vod_director': p.eq(1).text(), 85 | 'vod_content': data('#desc .text').text(), 86 | 'vod_play_from': '', 87 | 'vod_play_url': '' 88 | } 89 | names = [i.text() for i in data('.title.slip a').items()] 90 | plist=[] 91 | for i in data('.play-list ul').items(): 92 | plist.append('#'.join([f'{j("a").text()}${j("a").attr("href")}' for j in i('li').items()])) 93 | vod['vod_play_from'] = '$$$'.join(names) 94 | vod['vod_play_url'] = '$$$'.join(plist) 95 | return {'list': [vod]} 96 | 97 | def searchContent(self, key, quick, pg="1"): 98 | data=pq(self.fetch(f'{self.host}/search/{key}----------{pg}---.html', headers=self.headers).text) 99 | return {'list': self.getlist(data('.show.rows li')),'page':pg} 100 | 101 | def playerContent(self, flag, id, vipFlags): 102 | p=0 103 | uid=f'{self.host}{id}' 104 | data=pq(self.fetch(uid, headers=self.headers).text) 105 | url=data('.video.ratio').attr('data-play') 106 | if not url: 107 | url = uid 108 | p = 1 109 | return {'parse': p, 'url': url, 'header': self.headers} 110 | 111 | def localProxy(self, param): 112 | pass 113 | 114 | def getlist(self,data): 115 | vlist = [] 116 | for j in data.items(): 117 | vlist.append({ 118 | 'vod_id': j('a').attr('href'), 119 | 'vod_name': j('img').attr('alt'), 120 | 'vod_pic': self.host + j('img').attr('data-src'), 121 | 'vod_year': j('.bg').text(), 122 | 'vod_remarks': j('p').text() 123 | }) 124 | return vlist 125 | 126 | 127 | -------------------------------------------------------------------------------- /Plugin/py_jdys.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # by @嗷呜 3 | import base64 4 | import re 5 | import sys 6 | from Crypto.Cipher import AES 7 | from Crypto.Util.Padding import unpad 8 | from pyquery import PyQuery as pq 9 | sys.path.append('..') 10 | from base.spider import Spider 11 | 12 | 13 | class Spider(Spider): 14 | 15 | def init(self, extend=""): 16 | pass 17 | 18 | def getName(self): 19 | pass 20 | 21 | def isVideoFormat(self, url): 22 | pass 23 | 24 | def manualVideoCheck(self): 25 | pass 26 | 27 | def destroy(self): 28 | pass 29 | 30 | host = 'https://www.jdys.art' 31 | 32 | headers = { 33 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 34 | 'sec-ch-ua-platform': '"macOS"', 35 | 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', 36 | 'dnt': '1', 37 | 'sec-ch-ua-mobile': '?0', 38 | 'origin': host, 39 | 'sec-fetch-site': 'cross-site', 40 | 'sec-fetch-mode': 'cors', 41 | 'sec-fetch-dest': 'empty', 42 | 'referer': f'{host}/', 43 | 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 44 | 'priority': 'u=1, i', 45 | } 46 | 47 | def homeContent(self, filter): 48 | data = self.getpq(self.fetch(self.host, headers=self.headers).text) 49 | result = {} 50 | classes = [] 51 | for k in list(data('.navtop .navlist li').items())[:9]: 52 | classes.append({ 53 | 'type_name': k('a').text(), 54 | 'type_id': k('a').attr('href'), 55 | }) 56 | result['class'] = classes 57 | result['list'] = self.getlist(data('.mi_btcon .bt_img ul li')) 58 | return result 59 | 60 | def homeVideoContent(self): 61 | pass 62 | 63 | def categoryContent(self, tid, pg, filter, extend): 64 | data = self.getpq(self.fetch(f"{tid}{'' if pg == '1' else f'page/{pg}/'}", headers=self.headers).text) 65 | result = {} 66 | result['list'] = self.getlist(data('.mi_cont .bt_img ul li')) 67 | result['page'] = pg 68 | result['pagecount'] = 9999 69 | result['limit'] = 90 70 | result['total'] = 999999 71 | return result 72 | 73 | def detailContent(self, ids): 74 | data = self.getpq(self.fetch(ids[0], headers=self.headers).text) 75 | data2 = data('.moviedteail_list li') 76 | vod = { 77 | 'vod_name': data('.dytext h1').text(), 78 | 'type_name': data2.eq(0).text(), 79 | 'vod_year': data2.eq(2).text(), 80 | 'vod_area': data2.eq(1).text(), 81 | 'vod_remarks': data2.eq(4).text(), 82 | 'vod_actor': data2.eq(7).text(), 83 | 'vod_director': data2.eq(5).text(), 84 | 'vod_content': data('.yp_context').text().strip() 85 | } 86 | vdata = data('.paly_list_btn a') 87 | play = [] 88 | for i in vdata.items(): 89 | a = i.text() + "$" + i.attr.href 90 | play.append(a) 91 | vod["vod_play_from"] = "在线播放" 92 | vod["vod_play_url"] = "#".join(play) 93 | result = {"list": [vod]} 94 | return result 95 | 96 | def searchContent(self, key, quick, pg="1"): 97 | data = self.getpq(self.fetch(f"{self.host}/page/{pg}/?s={key}", headers=self.headers).text) 98 | return {'list': self.getlist(data('.mi_cont .bt_img ul li')), 'page': pg} 99 | 100 | def playerContent(self, flag, id, vipFlags): 101 | data = self.getpq(self.fetch(id, headers=self.headers).text) 102 | try: 103 | sc = data('.videoplay script').eq(-1).text() 104 | strd = re.findall(r'var\s+[^=]*=\s*"([^"]*)";', sc) 105 | kdata = re.findall(r'parse\((.*?)\);', sc) 106 | jm = self.aes(strd[0], kdata[0].replace('"', ''), kdata[1].replace('"', '')) 107 | url = re.search(r'url: "(.*?)"', jm).group(1) 108 | p = 0 109 | except: 110 | p = 1 111 | url = id 112 | result = {} 113 | result["parse"] = p 114 | result["url"] = url 115 | result["header"] = self.headers 116 | return result 117 | 118 | def localProxy(self, param): 119 | pass 120 | 121 | def getpq(self, text): 122 | try: 123 | return pq(text) 124 | except Exception as e: 125 | print(f"{str(e)}") 126 | return pq(text.encode('utf-8')) 127 | 128 | def getlist(self, data): 129 | videos = [] 130 | for i in data.items(): 131 | videos.append({ 132 | 'vod_id': i('a').attr('href'), 133 | 'vod_name': i('a img').attr('alt'), 134 | 'vod_pic': i('a img').attr('src'), 135 | 'vod_remarks': i('.dycategory').text(), 136 | 'vod_year': i('.dyplayinfo').text() or i('.rating').text(), 137 | }) 138 | return videos 139 | 140 | def aes(self, word, key, iv): 141 | key = key.encode('utf-8') 142 | iv = iv.encode('utf-8') 143 | encrypted_data = base64.b64decode(word) 144 | cipher = AES.new(key, AES.MODE_CBC, iv) 145 | decrypted_data = cipher.decrypt(encrypted_data) 146 | decrypted_data = unpad(decrypted_data, AES.block_size) 147 | return decrypted_data.decode('utf-8') 148 | -------------------------------------------------------------------------------- /Plugin/py_jiangsu.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Author : Doubebly 3 | # @Time : 2025/3/24 13:51 4 | import json 5 | import re 6 | import sys 7 | import time 8 | import hashlib 9 | sys.path.append('..') 10 | from base.spider import Spider 11 | 12 | 13 | class Spider(Spider): 14 | def getName(self): 15 | return "Jiangsu" 16 | 17 | def init(self, extend): 18 | pass 19 | 20 | def getDependence(self): 21 | return [] 22 | 23 | def isVideoFormat(self, url): 24 | pass 25 | 26 | def manualVideoCheck(self): 27 | pass 28 | 29 | 30 | def liveContent(self, url): 31 | tv_list = ['EXTM3U x-tvg-url="https://assets.livednow.com/epg.xml"', 32 | '#EXTINF:-1 tvg-id="江苏卫视" tvg-name="江苏卫视" tvg-logo="https://logo.doube.eu.org/江苏卫视.png" group-title="江蘇",江蘇衛視', 33 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jsws_live', 34 | '#EXTINF:-1 tvg-id="江苏城市频道" tvg-name="江苏城市频道" tvg-logo="https://logo.doube.eu.org/江苏城市.png" group-title="江蘇",江蘇城市', 35 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jscs_live', 36 | '#EXTINF:-1 tvg-id="江苏综艺频道" tvg-name="江苏综艺频道" tvg-logo="https://logo.doube.eu.org/江苏综艺.png" group-title="江蘇",江蘇綜藝', 37 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jszy_live', 38 | '#EXTINF:-1 tvg-id="江苏影视频道" tvg-name="江苏影视频道" tvg-logo="https://logo.doube.eu.org/江苏影视.png" group-title="江蘇",江蘇影視', 39 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jsys_live', 40 | '#EXTINF:-1 tvg-id="江苏公共新闻频道" tvg-name="江苏公共新闻频道" tvg-logo="https://logo.doube.eu.org/江苏公共新闻.png" group-title="江蘇",江蘇公共新聞', 41 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jsxw_live', 42 | '#EXTINF:-1 tvg-id="江苏体育休闲频道" tvg-name="江苏体育休闲频道" tvg-logo="https://logo.doube.eu.org/江苏体育休闲.png" group-title="江蘇",江蘇體育休閒', 43 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jsxx_live', 44 | '#EXTINF:-1 tvg-id="优漫卡通" tvg-name="优漫卡通" tvg-logo="https://logo.doube.eu.org/优漫卡通.png" group-title="江蘇",優漫卡通', 45 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=ymkt_live', 46 | '#EXTINF:-1 tvg-id="江苏国际频道" tvg-name="江苏国际频道" tvg-logo="https://logo.doube.eu.org/江苏国际.png" group-title="江蘇",江蘇國際', 47 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jsgj_live', 48 | '#EXTINF:-1 tvg-id="江苏教育频道" tvg-name="江苏教育频道" tvg-logo="https://logo.doube.eu.org/江苏教育.png" group-title="江蘇",江蘇教育', 49 | 'http://127.0.0.1:9978/proxy?do=py&type=abc&pid=jsjy_live'] 50 | 51 | return '\n'.join(tv_list) 52 | 53 | def homeContent(self, filter): 54 | return {'liveList': self.liveContent('')} 55 | 56 | def homeVideoContent(self): 57 | return {} 58 | 59 | def categoryContent(self, cid, page, filter, ext): 60 | return {} 61 | 62 | def detailContent(self, did): 63 | return {} 64 | 65 | def searchContent(self, key, quick, page='1'): 66 | return {} 67 | 68 | def searchContentPage(self, keywords, quick, page): 69 | return {} 70 | 71 | def playerContent(self, flag, pid, vipFlags): 72 | return {} 73 | 74 | def localProxy(self, params): 75 | if params['type'] == "abc": 76 | return self.get_play_url(params) 77 | return None 78 | 79 | def get_play_url(self, params): 80 | pid = params['pid'] 81 | txTime = hex(int(time.time()))[2:] 82 | txSecret = hashlib.md5(f'4hhrs7mm8h6X7CPGjZnK{pid}{txTime}'.encode('utf-8')).hexdigest() 83 | play_url = f'https://litchi-play-encrypted-site.jstv.com/live/{pid}.m3u8?txSecret={txSecret}&txTime={txTime}' 84 | return [302, "text/plain", None, {'Location': play_url}] 85 | 86 | def proxyM3u8(self, params): 87 | pass 88 | 89 | def destroy(self): 90 | 91 | return '正在Destroy' 92 | 93 | if __name__ == '__main__': 94 | pass 95 | -------------------------------------------------------------------------------- /Plugin/py_mp.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | # !/usr/bin/python 3 | import sys 4 | 5 | sys.path.append('..') 6 | from base.spider import Spider 7 | 8 | 9 | class Spider(Spider): 10 | def getName(self): 11 | return "mp" 12 | 13 | def init(self, extend=""): 14 | pass 15 | 16 | def isVideoFormat(self, url): 17 | pass 18 | 19 | def manualVideoCheck(self): 20 | pass 21 | 22 | def destroy(self): 23 | pass 24 | 25 | host = 'https://g.c494.com' 26 | 27 | header = { 28 | 'User-Agent': 'Dart/2.10 (dart:io)', 29 | 'platform_version': 'RP1A.200720.011', 30 | 'version': '2.2.3', 31 | 'copyright': 'xiaogui', 32 | 'platform': 'android', 33 | 'client_name': '576O5p+P5b2x6KeG', 34 | } 35 | 36 | def homeContent(self, filter): 37 | data = self.fetch(f'{self.host}/api.php/app/nav?token=', headers=self.header).json() 38 | dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", 39 | "sort": "排序"} 40 | filters = {} 41 | classes = [] 42 | json_data = data["list"] 43 | for item in json_data: 44 | has_non_empty_field = False 45 | jsontype_extend = item["type_extend"] 46 | classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])}) 47 | for key in dy: 48 | if key in jsontype_extend and jsontype_extend[key].strip() != "": 49 | has_non_empty_field = True 50 | break 51 | if has_non_empty_field: 52 | filters[str(item["type_id"])] = [] 53 | for dkey in jsontype_extend: 54 | if dkey in dy and jsontype_extend[dkey].strip() != "": 55 | values = jsontype_extend[dkey].split(",") 56 | value_array = [{"n": value.strip(), "v": value.strip()} for value in values if 57 | value.strip() != ""] 58 | filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) 59 | result = {} 60 | result["class"] = classes 61 | result["filters"] = filters 62 | return result 63 | 64 | def homeVideoContent(self): 65 | rsp = self.fetch(f"{self.host}/api.php/app/index_video?token=", headers=self.header) 66 | root = rsp.json()['list'] 67 | videos = [item for vodd in root for item in vodd['vlist']] 68 | return {'list': videos} 69 | 70 | def categoryContent(self, tid, pg, filter, extend): 71 | parms = {"pg": pg, "tid": tid, "class": extend.get("class", ""), "area": extend.get("area", ""), 72 | "lang": extend.get("lang", ""), "year": extend.get("year", ""), "token": ""} 73 | data = self.fetch(f'{self.host}/api.php/app/video', params=parms, headers=self.header).json() 74 | return data 75 | 76 | def detailContent(self, ids): 77 | parms = {"id": ids[0], "token": ""} 78 | data = self.fetch(f'{self.host}/api.php/app/video_detail', params=parms, headers=self.header).json() 79 | vod = data['data'] 80 | vod.pop('pause_advert_list', None) 81 | vod.pop('init_advert_list', None) 82 | vod.pop('vod_url_with_player', None) 83 | return {"list": [vod]} 84 | 85 | def searchContent(self, key, quick, pg='1'): 86 | parms = {'pg': pg, 'text': key, 'token': ''} 87 | data = self.fetch(f'{self.host}/api.php/app/search', params=parms, headers=self.header).json() 88 | return data 89 | 90 | def playerContent(self, flag, id, vipFlags): 91 | return {"parse": 0, "url": id, "header": {'User-Agent': 'User-Agent: Lavf/58.12.100'}} 92 | 93 | def localProxy(self, param): 94 | pass 95 | -------------------------------------------------------------------------------- /Plugin/py_nhsyy.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # by @嗷呜 3 | import json 4 | import sys 5 | sys.path.append('..') 6 | from base.spider import Spider 7 | from pyquery import PyQuery as pq 8 | 9 | class Spider(Spider): 10 | 11 | def init(self, extend=""): 12 | pass 13 | 14 | def isVideoFormat(self, url): 15 | pass 16 | 17 | def manualVideoCheck(self): 18 | pass 19 | 20 | def action(self, action): 21 | pass 22 | 23 | def destroy(self): 24 | pass 25 | 26 | host='https://www.nhsyy.com' 27 | 28 | headers = { 29 | 'Accept': '*/*', 30 | 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 31 | 'Cache-Control': 'no-cache', 32 | 'Connection': 'keep-alive', 33 | 'DNT': '1', 34 | 'Origin': host, 35 | 'Pragma': 'no-cache', 36 | 'Referer': f'{host}/', 37 | 'Sec-Fetch-Dest': 'empty', 38 | 'Sec-Fetch-Mode': 'cors', 39 | 'Sec-Fetch-Site': 'cross-site', 40 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', 41 | 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', 42 | 'sec-ch-ua-mobile': '?1', 43 | 'sec-ch-ua-platform': '"Android"', 44 | } 45 | 46 | def homeContent(self, filter): 47 | data = pq(self.fetch(self.host, headers=self.headers).text) 48 | result = {} 49 | classes = [] 50 | for i in data('.drop-content-items li').items(): 51 | j = i('a').attr('href') 52 | if j and 'type' in j: 53 | id = j.split('/')[-1].split('.')[0] 54 | classes.append({ 55 | 'type_name': i('a').text(), 56 | 'type_id': id 57 | }) 58 | hlist = self.getlist(data('.module-lines-list .module-item')) 59 | result['class'] = classes 60 | result['list'] = hlist 61 | return result 62 | 63 | def homeVideoContent(self): 64 | pass 65 | 66 | def categoryContent(self, tid, pg, filter, extend): 67 | data = self.fetch(f'{self.host}/vodshwo/{tid}--------{pg}---.html', headers=self.headers).text 68 | vlist = self.getlist(pq(data)('.module-list .module-item')) 69 | return {"list": vlist, "page": pg, "pagecount": 9999, "limit": 90, "total": 999999} 70 | 71 | def detailContent(self, ids): 72 | data = pq(self.fetch(f"{self.host}{ids[0]}", headers=self.headers).text) 73 | udata = data('.scroll-box-y .scroll-content a') 74 | vdata = data('.video-info-main .video-info-item') 75 | vod = { 76 | 'vod_year': vdata.eq(2)('div').text(), 77 | 'vod_remarks': vdata.eq(3)('div').text(), 78 | 'vod_actor': vdata.eq(1)('a').text(), 79 | 'vod_director': vdata.eq(0)('a').text(), 80 | 'typt_name': data('.video-info-aux a').eq(0).attr('title'), 81 | 'vod_content': vdata.eq(4)('p').eq(-1).text(), 82 | 'vod_play_from': '嗷呜爱看短剧', 83 | 'vod_play_url': '#'.join([f"{i.text()}${i.attr('href')}" for i in udata.items()]), 84 | } 85 | result = {"list": [vod]} 86 | return result 87 | 88 | def searchContent(self, key, quick, pg="1"): 89 | dlist = self.fetch(f'{self.host}/vodsearch/{key}----------{pg}---.html', headers=self.headers).text 90 | ldata = pq(dlist)('.module-list .module-search-item') 91 | vlist = [] 92 | for i in ldata.items(): 93 | img = i('.module-item-pic') 94 | vlist.append({ 95 | 'vod_id': i('.video-serial').attr('href'), 96 | 'vod_name': img('img').attr('alt'), 97 | 'vod_pic': img('img').attr('data-src'), 98 | 'vod_year': i('.tag-link a').eq(0).text(), 99 | 'vod_remarks': i('.video-serial').text() 100 | }) 101 | result = {"list": vlist, "page": pg} 102 | return result 103 | 104 | def playerContent(self, flag, id, vipFlags): 105 | data=self.fetch(f"{self.host}{id}", headers=self.headers).text 106 | jstr = pq(data)('.player-wrapper script').eq(0).text() 107 | try: 108 | jdata = json.loads(jstr.split('=', 1)[-1]) 109 | url = jdata.get('url') or jdata.get('next_url') 110 | p=0 111 | except: 112 | url,p = f"{self.host}{id}",1 113 | return {'parse': p, 'url': url, 'header': self.headers} 114 | 115 | def localProxy(self, param): 116 | pass 117 | 118 | def getlist(self, data): 119 | vlist = [] 120 | for i in data.items(): 121 | img = i('.module-item-pic') 122 | vlist.append({ 123 | 'vod_id': img('a').attr('href'), 124 | 'vod_name': img('img').attr('alt'), 125 | 'vod_pic': img('img').attr('data-src'), 126 | 'vod_remarks': i('.module-item-text').text() 127 | }) 128 | return vlist 129 | -------------------------------------------------------------------------------- /Plugin/py_novipnoad.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | #!/usr/bin/python 3 | #小司机奉献 4 | import sys 5 | sys.path.append('..') 6 | from base.spider import Spider 7 | import json 8 | import re 9 | import base64 10 | from urllib.parse import unquote 11 | 12 | class Spider(Spider): # 元类 默认的元类 type 13 | def getName(self): 14 | return "NO视频" 15 | def init(self,extend=""): 16 | print("============{0}============".format(extend)) 17 | pass 18 | def isVideoFormat(self,url): 19 | pass 20 | def manualVideoCheck(self): 21 | pass 22 | def reStr(self, src, reg, group=1): 23 | m = re.search(reg, src) 24 | src = '' 25 | if m: 26 | src = m.group(group) 27 | return src 28 | def homeContent(self,filter): 29 | result = {} 30 | cateManual = { 31 | "电影":"movie", 32 | "剧集":"tv", 33 | "综艺":"shows", 34 | "动画":"anime", 35 | "音乐":"music", 36 | "短片":"short", 37 | "其他":"ohter" 38 | } 39 | classes = [] 40 | for k in cateManual: 41 | classes.append({ 42 | 'type_name':k, 43 | 'type_id':cateManual[k] 44 | }) 45 | result['class'] = classes 46 | return result 47 | def homeVideoContent(self): 48 | result = { 49 | 'list': [] 50 | } 51 | return result 52 | def categoryContent(self,tid,pg,filter,extend): 53 | result = {} 54 | url = 'https://www.novipnoad.net/{0}/page/{1}/'.format(tid,pg) 55 | rsp = self.fetch(url, headers=self.header) 56 | root = self.html(self.cleanText(rsp.text)) 57 | aList = root.xpath('//div[@class="video-listing-content "]//div[@class="qv_tooltip"]') 58 | videos = [] 59 | for a in aList: 60 | na = a.xpath("./@title")[0] 61 | rootb = self.html(na) 62 | name = rootb.xpath(".//a/@title")[0] 63 | if "(" in name: 64 | realname = self.reStr(name,"】(.*)\(") 65 | else: 66 | realname = self.reStr(name,"】(.*)") 67 | remark = self.reStr(name,"(【.*?】)") 68 | year = self.reStr(name,"\((.*?)\)") 69 | pic = a.xpath("./div/a/img/@data-original")[0] 70 | sid = a.xpath("./div/a/@href")[0] 71 | videos.append({ 72 | "vod_id":sid, 73 | "vod_name":realname, 74 | "vod_pic":pic, 75 | "vod_remarks": remark, 76 | "vod_year": year 77 | }) 78 | result['list'] = videos 79 | result['page'] = pg 80 | result['pagecount'] = 9999 81 | result['limit'] = 90 82 | result['total'] = 999999 83 | return result 84 | def detailContent(self,array): 85 | tid = array[0] 86 | vod = { 87 | "vod_id":tid, 88 | "vod_name":"", 89 | "vod_pic":"", 90 | "type_name":"", 91 | "vod_content": "", 92 | "vod_play_from": "精彩线路", 93 | "vod_play_url": "播放$" + tid 94 | } 95 | result = { 96 | 'list':[ 97 | vod 98 | ] 99 | } 100 | return result 101 | #未写搜索下面的可忽略 102 | def searchContent(self,key,quick): 103 | url = ''.format(key) 104 | rsp = self.fetch(url) 105 | root = self.html(rsp.text) 106 | aList = root.xpath("//ul[@class='stui-vodlist__media col-pd clearfix']/li/div[1]/a") 107 | videos = [] 108 | for a in aList: 109 | name = a.xpath('./@title')[0] 110 | pic = a.xpath('./@data-original')[0] 111 | mark = a.xpath("./span[@class='pic-text text-right']/text()")[0] 112 | sid = a.xpath("./@href")[0] 113 | sid = self.reStr(sid,"/detail/(\\S+).html") 114 | videos.append({ 115 | "vod_id":sid, 116 | "vod_name":name, 117 | "vod_pic":pic, 118 | "vod_remarks":mark 119 | }) 120 | 121 | result = { 122 | 'list':videos 123 | } 124 | return result 125 | header = { 126 | "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" 127 | } 128 | def playerContent(self,flag,id,vipFlags): 129 | result = {} 130 | result["parse"] = 1 131 | result["playUrl"] = "" 132 | result["url"] = id 133 | result["header"] = self.header 134 | result["click"] = "document.getElementById('player-embed').click()" 135 | return result 136 | def localProxy(self,param): 137 | return [200, "video/MP2T", action, ""] 138 | -------------------------------------------------------------------------------- /Plugin/py_sebo.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | #!/usr/bin/python 3 | import sys 4 | sys.path.append('..') 5 | from base.spider import Spider 6 | 7 | class Spider(Spider): 8 | def init(self,extend=""): 9 | self.base_url='http://api.hclyz.com:81/mf' 10 | 11 | def homeContent(self,filter): 12 | classes = [{"type_name": "色播聚合","type_id":"/json.txt"}] 13 | result = {"class": classes} 14 | return result 15 | 16 | def categoryContent(self,tid,pg,filter,extend): 17 | home = self.fetch(f'{self.base_url}/json.txt').json() 18 | data = home.get("pingtai")[1:] 19 | videos = [ 20 | { 21 | "vod_id":"/"+item['address'], 22 | "vod_name": item['title'], 23 | "vod_pic": item['xinimg'].replace("http://cdn.gcufbd.top/img/", "https://slink.ltd/https://raw.githubusercontent.com/fish2018/lib/refs/heads/main/imgs/"), 24 | "vod_remarks": item['Number'], 25 | "style": {"type": "rect", "ratio": 1.33} 26 | } for item in data] 27 | result = { 28 | "page": pg, 29 | "pagecount": 9999, 30 | "limit": 99, 31 | "total": 9999, 32 | "list": videos 33 | } 34 | return result 35 | 36 | def detailContent(self,array): 37 | id = array[0] 38 | data = self.fetch(f'{self.base_url}/{id}').json() 39 | zhubo = data['zhubo'] 40 | playUrls = '#'.join([f"{vod['title']}${vod['address']}" for vod in zhubo]) 41 | vod = [{ 42 | "vod_play_from": 'sebo', 43 | "vod_play_url": playUrls, 44 | "vod_content": 'https://github.com/fish2018', 45 | }] 46 | result = {"list": vod} 47 | return result 48 | 49 | def playerContent(self,flag,id,vipFlags): 50 | result = { 51 | 'parse': 0, 52 | 'url': id 53 | } 54 | return result 55 | 56 | def getName(self): 57 | return '色播聚合' 58 | 59 | def homeVideoContent(self): 60 | pass 61 | def isVideoFormat(self,url): 62 | pass 63 | def manualVideoCheck(self): 64 | pass 65 | def searchContent(self,key,quick): 66 | pass 67 | def destroy(self): 68 | pass 69 | def localProxy(self, param): 70 | pass 71 | -------------------------------------------------------------------------------- /Plugin/py_toule.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # by @嗷呜 3 | import json 4 | import sys 5 | from pyquery import PyQuery as pq 6 | sys.path.append('..') 7 | from base.spider import Spider 8 | 9 | class Spider(Spider): 10 | 11 | def init(self, extend=""): 12 | pass 13 | 14 | def getName(self): 15 | pass 16 | 17 | def isVideoFormat(self, url): 18 | pass 19 | 20 | def manualVideoCheck(self): 21 | pass 22 | 23 | def destroy(self): 24 | pass 25 | 26 | host='http://www.toule.top' 27 | 28 | headers = { 29 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', 30 | 'Referer':f'{host}/', 31 | 'Origin':host 32 | } 33 | 34 | def homeContent(self, filter): 35 | data=self.getpq() 36 | result = {} 37 | classes = [] 38 | for k in data('.swiper-wrapper .swiper-slide').items(): 39 | classes.append({ 40 | 'type_name': k.text(), 41 | 'type_id': k.text() 42 | }) 43 | result['class'] = classes 44 | result['list'] = self.getlist(data('.container.items ul li')) 45 | return result 46 | 47 | def homeVideoContent(self): 48 | pass 49 | 50 | def categoryContent(self, tid, pg, filter, extend): 51 | data=self.getpq(f"/index.php/vod/show/class/{tid}/id/1/page/{pg}.html") 52 | result = {} 53 | result['list'] = self.getlist(data('.container.items ul li')) 54 | result['page'] = pg 55 | result['pagecount'] = 9999 56 | result['limit'] = 90 57 | result['total'] = 999999 58 | return result 59 | 60 | def detailContent(self, ids): 61 | data=self.getpq(ids[0]) 62 | v=data('.container.detail-content') 63 | vod = { 64 | 'vod_remarks': v('.items-tags a').text(), 65 | 'vod_content': v('.text-content .detail').text(), 66 | 'vod_play_from': '嗷呜爱看短剧', 67 | 'vod_play_url': '#'.join([f"{i.text()}${i('a').attr('href')}" for i in data('.swiper-wrapper .swiper-slide').items()]) 68 | } 69 | return {'list':[vod]} 70 | 71 | def searchContent(self, key, quick, pg="1"): 72 | data=self.getpq(f"/index.php/vod/search/page/{pg}/wd/{key}.html") 73 | return {'list':self.getlist(data('.container.items ul li')),'page':pg} 74 | 75 | def playerContent(self, flag, id, vipFlags): 76 | data=self.getpq(id) 77 | try: 78 | jstr=data('.player-content script').eq(0).text() 79 | jt=json.loads(jstr.split('=',1)[-1]) 80 | p,url=0,jt['url'] 81 | except Exception as e: 82 | print(f"获取播放地址失败: {e}") 83 | p,url=1,f'{self.host}{id}' 84 | return {'parse': p, 'url': url, 'header': self.headers} 85 | 86 | def localProxy(self, param): 87 | pass 88 | 89 | def liveContent(self, url): 90 | pass 91 | 92 | def getpq(self, path=''): 93 | data=self.fetch(f"{self.host}{path}",headers=self.headers).text 94 | try: 95 | return pq(data) 96 | except Exception as e: 97 | print(f"{str(e)}") 98 | return pq(data.encode('utf-8')) 99 | 100 | def getlist(self,data): 101 | videos = [] 102 | for i in data.items(): 103 | videos.append({ 104 | 'vod_id': i('.image-line').attr('href'), 105 | 'vod_name': i('img').attr('alt'), 106 | 'vod_pic': i('img').attr('src'), 107 | 'vod_remarks': i('.remarks.light').text() 108 | }) 109 | return videos 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tv 2 | -------------------------------------------------------------------------------- /api.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/api.bmp -------------------------------------------------------------------------------- /img/1868.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/1868.png -------------------------------------------------------------------------------- /img/ATV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ATV.png -------------------------------------------------------------------------------- /img/ELTA8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ELTA8.png -------------------------------------------------------------------------------- /img/Globetrotter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/Globetrotter.png -------------------------------------------------------------------------------- /img/K_Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/K_Channel.png -------------------------------------------------------------------------------- /img/Pandora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/Pandora.png -------------------------------------------------------------------------------- /img/RTHK34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/RTHK34.png -------------------------------------------------------------------------------- /img/RTHK35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/RTHK35.png -------------------------------------------------------------------------------- /img/Songshi_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/Songshi_1.png -------------------------------------------------------------------------------- /img/Songshi_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/Songshi_2.png -------------------------------------------------------------------------------- /img/Songshi_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/Songshi_3.png -------------------------------------------------------------------------------- /img/ZWTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ZWTV.png -------------------------------------------------------------------------------- /img/banana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/banana.png -------------------------------------------------------------------------------- /img/huayi4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/huayi4.png -------------------------------------------------------------------------------- /img/iQIYI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/iQIYI.png -------------------------------------------------------------------------------- /img/ofiii1048_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ofiii1048_tv.png -------------------------------------------------------------------------------- /img/ofiii32_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ofiii32_tv.png -------------------------------------------------------------------------------- /img/ofiii82_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ofiii82_tv.png -------------------------------------------------------------------------------- /img/ofiii_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/img/ofiii_tv.png -------------------------------------------------------------------------------- /js/18ha.js: -------------------------------------------------------------------------------- 1 | muban.短视2.二级.img = '.lazy&&data-src'; 2 | muban.短视2.二级.tab_text = 'body--i--span&&Text'; 3 | var rule={ 4 | title:'18哈', 5 | 模板:'短视2', 6 | host:'https://sk100.tv', 7 | detailUrl:'/voddetail/fyid.html', 8 | class_name:'电影&电视剧&综艺&动漫&爽文短剧', 9 | class_url:'1&2&4&3&33', 10 | lazy:`js: 11 | var html = JSON.parse(request(input).match(/r player_.*?=(.*?) { 21 | input = {parse: 1, url: input, js: ''}; 22 | }), 23 | double: true, 24 | 推荐: '.content&&.m-movies;article;*;*;*;*', 25 | 一级: '.m-movies&&article;h2&&Text;img&&src;.zhuangtai&&Text;a&&href', 26 | 二级: { 27 | title: '.info-main-title&&a&&Text', 28 | img: '.video-info-img&&style', 29 | desc: '.video_info&&li:eq(1)&&Text', 30 | content: '.abstract-content&&Text', 31 | tabs: '#video_list_li h3', 32 | lists: '.playlist:eq(#id)&&li', 33 | tab_text: 'body&&Text', 34 | list_text: 'body&&Text', 35 | list_url: 'a&&href' 36 | }, 37 | 搜索: '*', 38 | } -------------------------------------------------------------------------------- /js/4khdr.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'4KHDR[磁]', 3 | host:'https://www.4khdr.cn', 4 | homeUrl: "/forum.php?mod=forumdisplay&fid=2&page=1", 5 | url: '/forum.php?mod=forumdisplay&fid=2&filter=typeid&typeid=fyclass&page=fypage', 6 | filter_url:'{{fl.class}}', 7 | filter:{ 8 | }, 9 | searchUrl: '/search.php#searchsubmit=yes&srchtxt=**;post', 10 | searchable:2, 11 | quickSearch:1, 12 | filterable:0, 13 | headers:{ 14 | 'User-Agent': 'PC_UA', 15 | 'Cookie':'hvLw_2132_saltkey=x89cF7aD; hvLw_2132_lastvisit=1691840602; hvLw_2132_visitedfid=2; hvLw_2132_sendmail=1; _clck=hvltzs|2|fe4|0|1234; hvLw_2132_seccodecS=5681.04cfefe37df21abe97; hvLw_2132_ulastactivity=1691933173%7C0; hvLw_2132_auth=e9f3f37HqkcIBFlhm8r%2FqsQJNVKy9x1%2BRzROV4QROggK5CuZMQ3pmPzm9JwrPr%2FCkV7PzN7Nvt0yW1yEQXQjasm3AQ; hvLw_2132_sid=0; hvLw_2132_st_t=99213%7C1691933177%7C1fa4611ff255a89678127a126372871e; hvLw_2132_forum_lastvisit=D_2_1691933177; hvLw_2132_lastact=1691933194%09search.php%09forum; _clsk=fhws28|1691933195886|4|1|r.clarity.ms/collect', 16 | }, 17 | timeout:5000, 18 | class_name: "4K电影&4K美剧&4K华语&4K动画&4K纪录片&4K日韩印&蓝光电影&蓝光美剧&蓝光华语&蓝光动画&蓝光日韩印", 19 | class_url:"3&8&15&6&11&4&29&31&33&32&34", 20 | play_parse:false, 21 | lazy:'', 22 | limit:6, 23 | 推荐:'ul#waterfall li;a&&title;img&&src;div.auth.cl&&Text;a&&href', 24 | 一级:'ul#waterfall li;a&&title;img&&src;div.auth.cl&&Text;a&&href', 25 | 二级:{ 26 | title:"#thead_subject&&Text", 27 | img:"img.zoom&&src", 28 | desc:'td[id^="postmessage_"] font&&Text', 29 | content:'td[id^="postmessage_"] font&&Text', 30 | tabs:`js: 31 | pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; 32 | TABS=[] 33 | var d = pdfa(html, 'table.t_table'); 34 | let magnetIndex=0; 35 | let aliIndex=0; 36 | d.forEach(function(it) { 37 | let burl = pdfh(it, 'a&&href'); 38 | log("burl >>>>>>" + burl); 39 | if (burl.startsWith("https://www.aliyundrive.com/s/")){ 40 | let result = 'aliyun' + aliIndex; 41 | aliIndex = aliIndex + 1; 42 | TABS.push(result); 43 | } 44 | }); 45 | d.forEach(function(it) { 46 | let burl = pdfh(it, 'a&&href'); 47 | log("burl >>>>>>" + burl); 48 | if (burl.startsWith("magnet")){ 49 | let result = 'magnet' + magnetIndex; 50 | magnetIndex = magnetIndex + 1; 51 | TABS.push(result); 52 | } 53 | }); 54 | log('TABS >>>>>>>>>>>>>>>>>>' + TABS); 55 | `, 56 | lists:`js: 57 | log(TABS); 58 | pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; 59 | LISTS = []; 60 | var d = pdfa(html, 'table.t_table'); 61 | TABS.forEach(function(tab) { 62 | log('tab >>>>>>>>' + tab); 63 | if (/^aliyun/.test(tab)) { 64 | let targetindex = parseInt(tab.substring(6)); 65 | let index = 0; 66 | d.forEach(function(it){ 67 | let burl = pdfh(it, 'a&&href'); 68 | if (burl.startsWith("https://www.aliyundrive.com/s/")){ 69 | if (index == targetindex){ 70 | let title = pdfh(it, 'a&&Text'); 71 | log('title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title); 72 | burl = "http://127.0.0.1:9978/proxy?do=js&from=catvod&siteType=3&siteKey=push_agent&header=%7B%7D&url=" + encodeURIComponent(burl); 73 | log('burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl); 74 | let loopresult = title + '$' + burl; 75 | LISTS.push([loopresult]); 76 | } 77 | index = index + 1; 78 | } 79 | }); 80 | } 81 | }); 82 | TABS.forEach(function(tab) { 83 | log('tab >>>>>>>>' + tab); 84 | if (/^magnet/.test(tab)) { 85 | let targetindex = parseInt(tab.substring(6)); 86 | let index = 0; 87 | d.forEach(function(it){ 88 | let burl = pdfh(it, 'a&&href'); 89 | if (burl.startsWith("magnet")){ 90 | if (index == targetindex){ 91 | let title = pdfh(it, 'a&&Text'); 92 | log('title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title); 93 | log('burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl); 94 | let loopresult = title + '$' + burl; 95 | LISTS.push([loopresult]); 96 | } 97 | index = index + 1; 98 | } 99 | }); 100 | } 101 | }); 102 | `, 103 | 104 | }, 105 | 一级:'ul#waterfall li;a&&title;img&&src;div.auth.cl&&Text;a&&href', 106 | 搜索:'div#threadlist ul li;h3&&Text;;p:eq(3)&&Text;a&&href;p:eq(2)&&Text', 107 | 预处理:` 108 | if (rule_fetch_params.headers.Cookie.startsWith("http")){ 109 | rule_fetch_params.headers.Cookie=fetch(rule_fetch_params.headers.Cookie); 110 | setItem(RULE_CK,cookie); 111 | }; 112 | log('4khdr cookie>>>>>>>>>>>>>>>' + rule_fetch_params.headers.Cookie); 113 | let new_host='https://www.4khdr.cn/search.php'; 114 | let new_html=request(new_host); 115 | pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; 116 | let formhash = pdfh(new_html, 'input[name="formhash"]&&value'); 117 | log("formhash>>>>>>>>>>>>>>>" + formhash); 118 | rule_fetch_params.formhash = formhash; 119 | `, 120 | } -------------------------------------------------------------------------------- /js/4kvcd.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'蚂蚁影视', 3 | host:'https://www.4kvcd.cc', 4 | // homeUrl:'/', 5 | url:'/fyclass/index_fypage_______.html', 6 | searchUrl:'/index.php?s=vod-search-wd-**-p-fypage.html', 7 | searchable:2,//是否启用全局搜索, 8 | quickSearch:0,//是否启用快速搜索, 9 | filterable:0,//是否启用分类筛选, 10 | headers:{//网站的请求头,完整支持所有的,常带ua和cookies 11 | 'User-Agent':'MOBILE_UA', 12 | // "Cookie": "searchneed=ok" 13 | }, 14 | class_name:'電影&電視劇&綜藝&動漫&紀錄片&國產劇&香港劇&臺灣劇&韓國劇&日本劇&歐美劇&海外劇', 15 | class_url:'mov&tv&fun&cartoon&jilupian&guocanju&xianggangju&taiwanju&hanguoju&ribenju&oumeiju&haiwaiju', 16 | play_parse:true, 17 | lazy:'', 18 | limit:6, 19 | 推荐:'.module-items;.module-poster-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href', 20 | double:true, // 推荐内容是否双层定位 21 | 一级:'.module-poster-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href', 22 | 二级:{"title":"h1&&Text;.module-info-tag-link:eq(2)&&Text","img":".ls-is-cached.lazy.lazyload&&data-original","desc":".module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(2)&&.module-info-item-content&&Text;.module-info-content&&.module-info-item:eq(1)&&.module-info-item-content&&Text","content":".module-info-introduction-content&&Text","tabs":".module-tab-items-box:eq(0)&&.module-tab-item","lists":".module-list:eq(#id)&&.module-play-list-content a"}, 23 | 搜索:'.module-card-item.module-item;.module-card-item-title&&Text;img&&data-original;.module-item-note&&Text;a.play-btn-o&&href', 24 | } 25 | -------------------------------------------------------------------------------- /js/Auete.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title: "auete", 3 | host: "https://auete.pro", 4 | url: "/fyclassfyfilter/indexfypage.html[/fyclassfyfilter/index.html]", 5 | searchUrl: "/vodsearch/**----------fypage---.html", 6 | searchable: 2, 7 | quickSearch: 0, 8 | filterable: 1, 9 | filter: "H4sIAAAAAAAAAJXTwU7CQBAG4HfZM4l3zp5IvHnScFjSprTAVpRWgZCAhAiYiCSIRki8YMCYKMSYIKU+DdviW7gUaf9667F83dm/M0OZHOimKpP4cZlk5CKJkwJVSIwwmpP9B5Nmje0rTPzG+0PeGrutq42I570L7YRUYn/YnqzsIaBUCtBtzpx6A5DmAcdd/mUBZtIBOrVbp9pHTAHW287lI6B2Bth8WC1agCUIJL4jHEjbBEpWkjFyaEbpift9I2rtquhGTlb9S36eXsDSlGlGkO7+GexURfqYAhVpgaK6dhf0nDIFkHfwaPggH9irhW9MVqUgqTN/x3NmStF8W1/PMI4avnDUD6XxLvTaeFSMtFoD27WWuzqKoZd0pmAjQUUjQypGACoGsFUvxX4uUor2xO1Z/gKLMmmD4sic5Wswshxl2FwwkR9RBAQUAT308uXVAo2ScP025fYd7G0iC38kq8Mbc0TpP8KwEpIWWqrR2O19cnvmDxMqb3dnXa2FX8lSXVIp2+yE9z2VX1mJ3vdVBAAA", 10 | filter_url: "{{fl.tag}}", 11 | filter_def: {}, 12 | headers: { 13 | "User-Agent": "MOBILE_UA" 14 | }, 15 | timeout: 5000, 16 | class_parse: ".navbar-nav&&li:lt(6);a&&Text;a&&href;.*/(.*?)/index", 17 | cate_exclude: "发布|影讯", 18 | play_parse: true, 19 | lazy: $js.toString(() => { 20 | input = {parse: 1, url: input, js: ''}; 21 | }), 22 | double: false, 23 | 推荐: "a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href", 24 | 一级: ".threadlist&&li;.title&&Text;.pic&&img&&src;.hdtag&&Text;a&&href", 25 | 二级: { 26 | title: "meta[property]:eq(1)&&content;meta[property]:eq(4)&&content", 27 | img: ".cover&&img&&src", 28 | desc: ".media-body&&.small&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text;meta[property]:eq(6)&&content;meta[property]:eq(5)&&content", 29 | content: "meta[property]:eq(-1)&&content", 30 | tabs: "#player_list&&h2", 31 | lists: "#player_list:eq(#id) a", 32 | tab_text: "*--span&&Text", 33 | list_text: "body&&Text", 34 | list_url: "a&&href" 35 | }, 36 | detailUrl: "", 37 | 搜索: "body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text" 38 | } 39 | -------------------------------------------------------------------------------- /js/HDmoli.js: -------------------------------------------------------------------------------- 1 | // 网址发布页 https://molicp.com 2 | muban.首图.二级.title = '.text-fff--font&&Text;.data--span:eq(0)&&Text'; 3 | muban.首图.二级.desc = '#rating&&Text;;;.data--span:eq(1)&&Text;.data--span:eq(2)&&Text'; 4 | muban.首图.二级.content = '.desc&&Text'; 5 | var rule = { 6 | title:'HDmoli', 7 | 模板:'首图', 8 | host:'https://www.hdmoli.pro', 9 | // url:'/mlist/fyclass-fypage.html', 10 | url:'/search.php?page=fypage&searchtype=5&tid=fyfilter', 11 | filterable:1,//是否启用分类筛选, 12 | filter_url:'{{fl.cateId}}&jq={{fl.class}}&area={{fl.area}}&year={{fl.year}}&state={{fl.state}}&order={{fl.by}}', 13 | filter:{ 14 | "1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"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":"30"},{"n":"动画","v":"32"}]},{"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":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2025","v":"2025"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"more","v":"more"}]},{"key":"state","name":"状态","value":[{"n":"全部","v":""},{"n":"完结","v":"w"},{"n":"连载中","v":"l"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"评分","v":"douban"}]}], 15 | "2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"美剧","v":"15"},{"n":"韩剧","v":"16"},{"n":"日剧","v":"13"},{"n":"英剧","v":"34"},{"n":"中国","v":"14"},{"n":"泰剧","v":"29"},{"n":"综艺","v":"39"},{"n":"其他","v":"38"}]},{"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":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2025","v":"2025"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"more","v":"more"}]},{"key":"state","name":"状态","value":[{"n":"全部","v":""},{"n":"完结","v":"w"},{"n":"连载中","v":"l"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"评分","v":"douban"}]}], 16 | "41":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"41"},{"n":"日本","v":"42"},{"n":"其他","v":"43"}]},{"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":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2025","v":"2025"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"more","v":"more"}]},{"key":"state","name":"状态","value":[{"n":"全部","v":""},{"n":"完结","v":"w"},{"n":"连载中","v":"l"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"评分","v":"douban"}]}] 17 | }, 18 | filter_def:{ 19 | 1:{cateId:'1',by:'time'}, 20 | 2:{cateId:'2',by:'time'}, 21 | 41:{cateId:'41',by:'time'} 22 | }, 23 | searchUrl:'/search.php?page=fypage&searchword=**&searchtype=', 24 | class_parse: '.myui-header__menu li;a&&Text;a&&href;.*/index(\\d+).html', 25 | } 26 | -------------------------------------------------------------------------------- /js/Jpys.js: -------------------------------------------------------------------------------- 1 | dmFyIHJ1bGUgPSB7CiAgIOaooeadvzogJ+mHh+mbhjEnLAogICB0aXRsZTogJ+aWh+aJjTJb6LWEXScsCiAgIGhvc3Q6ICdodHRwczovL2FwaS56ZXFhaHQuY29tJywKICAgaG9tZVRpZDogJzc1JywKICAgdXJsOiAnL2luZGV4LnBocC9hamF4L2RhdGE/bWlkPTEmdGlkPWZ5ZmlsdGVyJnBhZ2U9ZnlwYWdlJmxpbWl0PTIwJywKICAgc2VhcmNoVXJsOiAnL2luZGV4LnBocC9hamF4L3N1Z2dlc3Q/bWlkPTEmd2Q9KiombGltaXQ9MTAwJywKICAgZGV0YWlsVXJsOiAnaHR0cHM6Ly93d3cuY2Zrajg2LmNvbS9kZXRhaWwvZnlpZCcsCiAgIGZpbHRlcl91cmw6ICd7e2ZsLuWIhuexu319JywKICAgZmlsdGVyOiAnSDRzSUFBQUFBQUFBQTdXU3dVNkRRQkNHN3o0RjJUT0hGaWhVWDhWNDZJR1QycHNtcG1saVM2akFRYTB4cUxXSnB3YXFUV292UnFIdDA4Q3V2SVdGVkliWjdyV0VBL0Q5dXp2Zk1KMERhWHVST2ptU2pqc1NPVFd2Tms4a2RRWnNFUk5aSXUzV3VWbDhjUU5xMmZtWHk5YlpoYm1OdHd0a2g1a1ZGaWgvSlZKWGxrcm1qemNyUzZZb21IcGhzaG9EVlJGbHdURDlpVXVxMWpCMUZ2OEZGV3QxUkdsL3h2d2hVQU9mTzdtcDd0emtLS2dXNTJKS2UvZjAyZ2VLejJYZW5LM2VnVFo0WC9aWU1jSysxUEpvZndSVXc5UjVUaUlYakxpZEJ3L1p5eFRXMW5GVnZYVTJXb012cHFuOWxjUmdwT1ZWbld4dUdjWkQyZGQ0dks2U0tLaE9TSjJ6bmdWc2ZZc0NXSngrejlPN1R4VGdKdUZwa3IxTnF3RmRFZWlqUUhPM0ErcGVPOERpNWE4YlFRR0hBa2N1WTlRRW1ueEdFVFNUejZpQ2J2QVpiYmNoMm41SHdndnA4Z01LYUlqK0taZlJSWlBEWll5dFNPSFIvUVAvc2NXTEFRVUFBQT09JywKICAgZmlsdGVyX2RlZjogewogICAgIDE6IHsg5YiG57G7OiAnMScgfSwyOiB7IOWIhuexuzogJzInIH0sMzogeyDliIbnsbs6ICczJyB9LDQ6IHsg5YiG57G7OiAnNCcgfQogICAgfSwKICAgaGVhZGVyczogewogICAgICAnVXNlci1BZ2VudCc6ICdQQ19VQScsCiAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmNma2o4Ni5jb20vJwogICB9LAogICDmkJzntKI6ICdqc29uOmxpc3Q7bmFtZTtwaWM7O2lkJywKICAg5Zu+54mH5pu/5o2iOiAnaHR0cHM6Ly9hcGkuemVxYWh0LmNvbT0+aHR0cHM6Ly9vYnMuZ2R1YW1vZS5jb20nLAogICDkuoznuqc6IHsKICAgICAgdGl0bGU6ICcudGl0bGUmJlRleHQ7JywKICAgICAgaW1nOiAnJywKICAgICAgZGVzYzogJzs7OzsnLAogICAgICBjb250ZW50OiAnLndyYXBwZXJfbW9yZV90ZXh0JiZUZXh0JywKICAgICAgdGFiczogJy5wbGF5ZXJfbmFtZScsCiAgICAgIGxpc3RzOiAnLmxpc3RpdGVtIGEnLAogICB9LAogICBsYXp5OiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICBsZXQgdXJsX2lkID0gaW5wdXQuc3BsaXQoJy8nKVs1XTsKICAgICAgbGV0IGppc2h1X2lkID0gaW5wdXQuc3BsaXQoJy8nKVs3XTsKICAgICAgbGV0IHQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgZXZhbChnZXRDcnlwdG9KUyk7CiAgICAgIGxldCBzaWdua2V5ID0gJ2lkPScgKyB1cmxfaWQgKyAnJm5pZD0nICsgamlzaHVfaWQgKyAnJmtleT1jYjgwODUyOWJhZTZiNmJlNDVlY2ZhYjI5YTQ4ODliYyZ0PScgKyB0OwogICAgICBsZXQga2V5ID0gQ3J5cHRvSlMuU0hBMShDcnlwdG9KUy5NRDUoc2lnbmtleSkudG9TdHJpbmcoKSkudG9TdHJpbmcoKTsKICAgICAgbGV0IGpzb25fZGF0YSA9IEpTT04ucGFyc2UocmVxdWVzdCgnaHR0cHM6Ly93d3cuY2Zrajg2LmNvbS9hcGkvbXctbW92aWUvYW5vbnltb3VzL3ZpZGVvL2VwaXNvZGUvdXJsP2lkPScgKyB1cmxfaWQgKyAnJm5pZD0nICsgamlzaHVfaWQsIHsKICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLAogICAgICAgICAgICAnZGV2aWNlaWQnOiAnNThhODBjNTItMTM4Yy00OGZkLThlZGItMTM4ZmQ3NGQxMmM4JywKICAgICAgICAgICAgJ3NpZ24nOiBrZXksCiAgICAgICAgICAgICd0JzogdAogICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgbGV0IHVybCA9IGpzb25fZGF0YS5kYXRhOwogICAgICBsb2codXJsKTsKICAgICAgaWYgKHVybCkgewogICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICBoZWFkZXI6IHJ1bGUuaGVhZGVycwogICAgICAgICB9OwogICAgICB9CgogICB9KSwKICAgY2xhc3NfbmFtZTogJ+eUteW9sSbnlLXop4Ym57u86Im6JuWKqOa8qycsCiAgIGNsYXNzX3VybDogJzEmMiYzJjQnLAogICBjbGFzc19wYXJzZTogJycKfQ== -------------------------------------------------------------------------------- /js/Panghuys.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | author: '小可乐/240528/第一版', 3 | title: '胖虎影视', 4 | host: 'https://www.cdnkan.top', 5 | hostJs: 'let html=request(HOST,{headers:{"User-Agent":MOBILE_UA}});let src= jsp.pdfh(html,".go:eq(1)&&a&&href");HOST=src', 6 | headers: {'User-Agent': 'MOBILE_UA'}, 7 | 编码: 'utf-8', 8 | timeout: 5000, 9 | 10 | homeUrl: '/', 11 | url: '/vodshow/fyfilter.html', 12 | filter_url: '{{fl.cateId}}{{fl.area}}{{fl.by}}{{fl.class}}{{fl.lang}}{{fl.letter}}/page/fypage{{fl.year}}', 13 | detailUrl: '', 14 | searchUrl: '/phsch/page/fypage/wd/**.html', 15 | searchable: 1, 16 | quickSearch: 1, 17 | filterable: 1, 18 | 19 | class_name: '电影&剧集&综艺&动漫&短剧&解说&其他', 20 | class_url: '1&2&3&4&7&8&9', 21 | filter_def: { 22 | 1: {cateId: '1'}, 23 | 2: {cateId: '2'}, 24 | 3: {cateId: '3'}, 25 | 4: {cateId: '4'}, 26 | 7: {cateId: '7'}, 27 | 8: {cateId: '8'}, 28 | 9: {cateId: '9'} 29 | }, 30 | 31 | proxy_rule: '', 32 | sniffer: 0, 33 | isVideo: '', 34 | play_parse: true, 35 | parse_url: '', 36 | lazy: `js: 37 | var kcode = JSON.parse(request(input).match(/r player_.*?=(.*?) { 13 | let init_js = `Object.defineProperties(navigator, {platform: {get: () => 'iPhone'}});`; 14 | input = { 15 | parse: 1, 16 | url: input, 17 | js: '', 18 | parse_extra: '&init_script=' + encodeURIComponent(base64Encode(init_js)), 19 | } 20 | }), 21 | } -------------------------------------------------------------------------------- /js/chinaqtv.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title: '中国人线上看', 3 | host: 'https://chinaqtv.co', 4 | url: '/vodtype/fyclass.html', 5 | //https://chinaqtv.co/vodsearch/.html?wd=4 6 | searchUrl: '/vodsearch/.html?wd=**', 7 | searchable: 2,//是否启用全局搜索, 8 | quickSearch: 0,//是否启用快速搜索, 9 | filterable: 0,//是否启用分类筛选, 10 | headers: { 'User-Agent': 'MOBILE_UA' }, 11 | class_parse: '.menu-list&&li:gt(0);a&&Text;a&&href;/(\\d+).html', 12 | play_parse: true, 13 | pagecount: {"13":1,"14":1,"15":1,"20":1,"21":1,"22":1,"3":1}, 14 | lazy: '', 15 | limit: 6, 16 | 推荐: 'body&&.content;div.drama;*;*;*;*', 17 | double: true, 18 | 一级: '.content&&div.drama;.title&&Text;.imgcover&&style;p&&Text;a&&href', 19 | 二级: { 20 | "title": ".title&&Text", 21 | "content": "pre&&Text", 22 | "tabs": "div.title:contains(片源)", 23 | "tab_text": "body&&Text", 24 | "lists": "div.episode.sizing&&ul:eq(#id) li" 25 | }, 26 | } 27 | -------------------------------------------------------------------------------- /js/cpldq.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'一起看', 3 | host:'http://www.cpldq.com', 4 | url:'/cptype/fyclass-fypage.html', 5 | searchUrl:'', 6 | searchable:0, 7 | quickSearch:0, 8 | filterable:1, 9 | filter:'', 10 | filter_url:'', 11 | headers:{ 12 | 'User-Agent':'MOBILE_UA', 13 | }, 14 | timeout:5000, 15 | class_parse:'ul.top-nav&&li;a&&Text;a&&href;/(\\d+)\.html', 16 | cate_exclude:'', 17 | play_parse:true, 18 | lazy:$js.toString(()=>{ 19 | input = {parse:1,url:input,js:''}; 20 | }), 21 | double:true, 22 | 推荐:'.main&&.bgte1130;ul&&.sb-film-one;*;*;*;*', 23 | 一级:'.sb-area-index&&ul&&.qcontainer;i&&Text;.lazy&&data-original;.other&&Text;a&&href', 24 | 二级:{ 25 | title:'.name&&Text;.ct&&dd&&Text', 26 | img:'.lazy&&data-original', 27 | desc:'.ct&&dd:eq(1)&&Text;.ct&&dd:eq(2)&&Text;.ct&&dt:eq(2)&&Text;.ct&&dt&&Text;', 28 | content:'div.ee&&Text', 29 | tabs:'.playfrom--sup&&li', 30 | lists:'.playlist:eq(#id)&&ul&&li', 31 | lists:$js.toString(()=>{ 32 | //log(html); 33 | LISTS = []; 34 | pdfa(html,'body&&.playlist').forEach((it)=>{ 35 | let lis = pdfa(it,'ul&&li'); 36 | let lis1 = []; 37 | lis.forEach((item,index)=>{ 38 | let tt = pdfh(item,'body&&Text'); 39 | //log('item:'+item); 40 | let uu = pd(item,'a&&href',MY_URL); 41 | if(!/дрр/.test(tt)){ 42 | lis1.push(tt+'$'+uu); 43 | } 44 | }); 45 | LISTS.push(lis1); 46 | }); 47 | }), 48 | tab_text:'body&&Text', 49 | list_text:'body&&Text', 50 | list_url:'a&&href' 51 | }, 52 | 搜索:'列表;标题;图片;描述;链接;详情', 53 | } 54 | -------------------------------------------------------------------------------- /js/dandanju.js: -------------------------------------------------------------------------------- 1 | // 地址发布页 https://www.dandanju.vip 2 | // 搜索安全验证 > 通过drpy_ocr验证码接口过验证OK 3 | var rule = { 4 | title: '蛋蛋剧', 5 | // host:'https://www.dandanju.cc', 6 | host: 'https://www.dandanju.vip', 7 | hostJs: 'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,"a:eq(0)&&href");print(src);HOST=src', 8 | // url:'/show/fyclass--------fypage---.html', 9 | url: '/show/fyclassfyfilter.html', 10 | filterable: 1,//是否启用分类筛选, 11 | filter_url: '-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}', 12 | filter: 'H4sIAAAAAAAAA+2Y3W4aRxTHXyXaa1/s4nw1rxLlgkZIiZqmkp1GsiJLtjEEiAsYOTgE/NUY4zjGXmzHgaXAy+zMwlt02Dkfg1qvUGOlSuQ7fufMzJ5zhvmf2X1lOdaDh6+sXxIL1gPr8bP4/Lw1Yz2P/5pQKLINmUwpfhl/9nsiHPd8bE4djpKHY7MCa3EGrOWaGg9WAPQFmRYsxIC+W3K5KJfK4ASgRXOHfq+Gi2qgRRvrotPFRTXQPIqcAX0y8873svg8DegbNg/E2hH4AOh5udOghz4AI85go8txjoF89dccJwDF0jzw+7sYiwaaly6NKh9xngaat32kIsd5GsgXUU+5chyU19GngXzJnFx5jz4NlHu3IFJtzF0D+kZbJfmuDj4AWrP8epj1cE0NlF//JNj4LHotTJGYRhT2hx9oFzWQL58WhTP0aaBdHBTVHuAuauCq1uTWOlU1BPKtDoJPmAkAVaC3HnRrEwFPmBYfjUfqYxSfS8SNU1RzxZo37Snab4wqaQxBAxX6oCLbp1hoDVwqV3b6VKoQKPR+XlR7GLQG2qDzt+wDoDK+abEPgOZt1mXtGOdpoDh3PvI8AN70L+wD4FhcMxZ3Yt4frvAOcJ4GmrdaUJUSGTwrzJRJfRAUmkG2gskQ8wHelW8GahqdYWQakbr0u3isAMxNX0jE54xN71z43d6Umx6zY7fBFv407LNsnzXtMbbHTLvDdse022y3DbvzE9nVT8N+n+33Tfs9tt8z7XfZfte032H7HdPO+Tpmvg7n65j5OpyvY+brcL6Oma/D+aqf5jb9vMCbJPMl4RX+sUly83K0eQELvHiqhuLCvudJdwM8T56+mOd/2OmqyOC5nX/821xi/NRHM1bsutprhBZGdTQtyGL5UiQLExoNpmnatzi5FF4TfRqm7IpXdu+orhjVvaN0P6pL+Z091n0A7nwpWUFhBaDnvU1zpwUwegLXDGBaufiaHpFOqfHUwkKYRnv/a/+I0vro3nK1nkf2lrKr5Fds7dG9AflGi79/LSa7zfnaZr4252ub+dqcl23mZXNetpmXzXmpn/9nD5i9ph4wWsoGjSU8wBpMDVvdMTRMAQV2Mhi6GTxsGmheqSlzeOcF4IOfkm3UUwAWmnO/UyShCcEQhdEHjAWAfN6RONlGnwZ6XvXMeFvQQPM2duQFve1poHnttswUfK/Et/4JE9Xh4k/VFbAOGmiN1spweQ1na/gGeq00WKktBR2CobtKwVl3x0C+44YqLPo03Cjgj66AnK9t5vv9KuPta1LGKPWL+k4UJJvDPVRUAFozfxgUMWgA8hW3g2P6jqKBj/vV322Gxa1hHm/qALTm7p6o4i0bYJqbtKx5xrcgDfS8iC8hUW8NwlVlwk0GMH31c8OngOq53/f/wm9IAHxz3xGZKt3cQ+C/zploYjcBoDWrOVnBrgDAdWmJwSbVJYRvcQOv9nyPXpY0THNb/lfVvrnT3ij6j6Loi38DX/yg2lAYAAA=', 13 | searchUrl: '/search/**----------fypage---.html', 14 | searchable: 2,//是否启用全局搜索, 15 | quickSearch: 0,//是否启用快速搜索, 16 | headers: { 17 | 'User-Agent': 'MOBILE_UA' 18 | }, 19 | timeout: 5000,//网站的全局请求超时,默认是3000毫秒 20 | class_parse: 'ul.swiper-wrapper&&li;a&&Text;a&&href;.*/(.*?).html', 21 | play_parse: true, 22 | lazy: `js: 23 | var html = JSON.parse(request(input).match(/r player_.*?=(.*?)var player_aaaa={"flag":"play","encrypt这种源码的链接解析 120 | //如果网页源码里没有这种请设置为0 121 | "Anal_MacPlayer":"0", 122 | //是否开启手动嗅探,只对网页嗅探有效,0否,1是 123 | "ManualSniffer":"0", 124 | //手动嗅探视频链接关键字,每个用#隔开 125 | "VideoFormat":".mp4#.m3u8#.flv", 126 | //手动嗅探视频链接过滤关键词,每个用#隔开 127 | "VideoFilter":".html#=http" 128 | } -------------------------------------------------------------------------------- /js/dyxs.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | 模板: 'mxpro', 3 | title: '电影先生', 4 | host: 'https://xn--44qz85a01qpc.com', 5 | url: '/pianku-fyclass--------fypage---.html', 6 | searchUrl: '/search-**----------fypage---.html', 7 | tab_exclude: '排序', 8 | class_parse: '.navbar-items li:lt(6);a&&Text;a&&href;.*/(.*?)\.html', 9 | } 10 | -------------------------------------------------------------------------------- /js/focus_hua.js: -------------------------------------------------------------------------------- 1 | function getAddress(field) { 2 | const id = getQueryParameter.call({ url: field.url, key: "id" }); 3 | const s = getQueryParameter.call({ url: field.url, key: "s" }); 4 | 5 | let fabu, ouhauCache, focusCache, res, result; 6 | 7 | // 检查是否存在已缓存的端口信息 8 | ouhauCache = getCache.call('OUHAU'); 9 | focusCache = getCache.call('FOCHS'); 10 | 11 | if (s === 'ouhau' && ouhauCache !== null) { 12 | return JSON.stringify({ url: `p3p://108.181.20.159:${ouhauCache}/${id}` }); 13 | } else if (s === 'focus' && focusCache !== null) { 14 | return JSON.stringify({ url: `p3p://108.181.32.169:${focusCache}/${id}` }); 15 | } 16 | 17 | const nameAPI = 'FABU'; 18 | fabu = getCache.call(nameAPI); 19 | 20 | // 如果地址缓存不存在或已过期,则重新获取 21 | if (fabu === null) { 22 | const headers = { 23 | 'User-Agent': 'regimcode_162100bbs=123' 24 | }; 25 | 26 | res = post.call({ url: 'http://103.45.68.47:678/gy/gy-fabu.php', headers: JSON.stringify(headers), body: 'captcha=123' }); 27 | 28 | result = />p3p端口:https://vres.a357899.cn', 33 | 预处理: $js.toString(() => { 34 | let html = request(rule.host); 35 | let scripts = pdfa(html, 'script'); 36 | let img_script = scripts.find(it => pdfh(it, 'script&&src').includes('rdul.js')); 37 | if (img_script) { 38 | let img_url = img_script.match(/src="(.*?)"/)[1]; 39 | //console.log(img_url); 40 | let img_html = request(img_url); 41 | let img_host = img_html.match(/'(.*?)'/)[1]; 42 | log(img_host); 43 | rule.图片替换 = 'https://keke5.app=>' + img_host; 44 | } 45 | }), 46 | filter: 'H4sIAAAAAAAAA+2Zz08bRxTH/xefOdgGtTi3HlqpUpVLe6hURREHV4qa0kN/qFWEZLANxhBsEDFx7AIpGEyCf0CQY9bY/md2Ztf/RWf95r0ZR+3LtqGRqviC+LzvzOzs7Nt531k/isQid755FPku+VvkTsS76In9jchMZHHh+6TNvyw8/Dk5briowiJbH6XrQVhBZGkGoneTP3378MGvOnz3068+++Lzr0kV66cyndWiBtJKVRVBDYC0fN3tV1EDQM3LXZgxNaAml4syVdKaBtLSebnyDDUAGjPf8vovcEwA0k63xXUPNQAac+XcK23jmAB0D7U1008Daas7o/IZagA0Zu6p66zjmADUb2tVFC6xHwBphWP/iNYagLRmRzgN1ABQc28O/WZbaxpoLo0Td3CIcwEw2qaf2ydtDLRmBw1vfQ3XDMB6tt5uzzzbAEjLDL2XNdQAUPOXN0XV0ZqGpXuBCmksqm2x6Zg0Jg6TxuL4dFRexUXoNkSlr0PYYnRSlt3WRAsdMg+gLa8Hk2NAiJZlsKWCuCwAtJx7NVk9x+UEoGsfnJl+GmhZNi6MpoHGfPXEaBpotoPXRtNA2uO2cE5QAzBjtu0x23Y/t3s9on4a6N6390W2i/cOQNd7feXXhng9AJMuh3JjqB4GZQwyXXWY8fp7skQPh5jmnCmoDiKHb5xhatHaVSj3OtiC2Np2RHtXZPFNMUxPojb0CirVy/gwiOkqg1dwXdehjcgO0T1nO24PtzENdqr7rYZfT5lUJw6V6pW+ao+DA9BNXh4bTYOVaEbTYCWv0TRYyWs0DVaCWv0Awi6CuL5ye33rfUcOswjxaHxOx8b/WvFZE5+143ETj9vxmInH7HjUxKMUj0XH0zwiLRa9r/4kqEH0zQbRoEHUNEhMNoglEtH76o9pMP9mg/mgwbxpICtXcg9fhUD7ODGxsHJrRzgFs7DEkwvr9W5EMYdXMaNXU7KEL0ncDntpfNJmXf1WRuRw350LpnFvRvX6b8yJpjDmhDMZnHHhjARrFrjizZghrrBzhoczJ0FhovvTEMYMceaEMzVBQaPraQhjQNSWZ56RhjBGkDNfo3RfdFdwLgC3bUAoHLllA8LZhH9rPTgLwVkP1l681ShxJoMzJ9PCOS2cH3DhnH1PhTNfl6llefNy4hxnQqFO/9wpkPsywGzebKHkCh5X1JgTqSzue+dU0AFCGQimaHMnZ5UH/vMUagCkVfKyjFVFQxjj4fUK1rEMgPodPhcV2mQAUPtk8YFKK5Dgf8rMYVGtPW53AHRUcy5Fo4g7PwBtd7/vyKe40hpMOd9Qa0jlfAxhLMJfWqDb+mbAlc23l/N3+1rwbmZg+s1g+s1gan1snlqf/7n1mbst6+M5L0T/CaYzAGnVA9dxvFOqwcQ0t2bb9NZAWuZCFI5Mb8OhDBP36Z8xTNznfa/SFUe0OQHQbPMrXqWJUwUwJffvP/1zBo2zBl8mF378YVFrGmie3M8zjGHiDJosP3NvaEcFmP6cMC0j0zLyIZeRj/55GTFh+ymPUqv+H5R6AJTqu1XRxBOLBppVuajON5jqANTvbOh38tgPgK639tjbPcDrAYQpK+yv28zJij3fMudw9tdt7myf7Yhm2rySAbz3zFEpsvQnK+G0IDwhAAA=', 47 | 一级f: `js: 48 | let urls = [ 49 | 'https://keke5.app/show/1-----1-1.html', 50 | 'https://keke5.app/show/2-----1-1.html', 51 | 'https://keke5.app/show/3-----1-1.html', 52 | 'https://keke5.app/show/4-----1-1.html', 53 | 'https://keke5.app/show/6-----1-1.html', 54 | ]; 55 | let filters = {}; 56 | pdfa = jsp.pdfa; 57 | pdfh = jsp.pdfh; 58 | for(let url of urls){ 59 | let fclass = url.match(/show\\/(\\d+)-/)[1]; 60 | console.log(fclass); 61 | let html = request(url); 62 | let tabs = pdfa(html, '.filter-row'); 63 | let data = []; 64 | for (let tab of tabs) { 65 | let title = pdfh(tab, 'strong&&Text').replace(':',''); 66 | let lis = pdfa(tab, 'a'); 67 | let _map = {key: title, name: title}; 68 | let value = []; 69 | for (let li of lis) { 70 | let n = pdfh(li, 'a&&Text').trim(); 71 | let v=n; 72 | if(/全部|地区|类型/.test(n)){ 73 | v = ''; 74 | }else if(/综合/.test(n)){ 75 | v = '1'; 76 | }else{ 77 | v = pdfh(li,'a&&href'); 78 | try { 79 | v = v.match(/-(.*?)1-1\.html/)[1].replace(/-/g,''); 80 | }catch (e) { 81 | v = v.match(/-(.*?)-1\.html/)[1].replace(/-/g,''); 82 | } 83 | v = decodeURIComponent(v); 84 | } 85 | value.push({ 86 | 'n': n, 'v': v 87 | }); 88 | } 89 | _map['value'] = value; 90 | data.push(_map); 91 | } 92 | filters[fclass] = data; 93 | } 94 | VODS = [filters]; 95 | console.log(gzip(JSON.stringify(filters))); 96 | `, 97 | } -------------------------------------------------------------------------------- /js/kkys.js: -------------------------------------------------------------------------------- 1 | var rule={ 2 | title:'快看', 3 | host:'https://www.kuaikanys.net', 4 | // homeUrl:'/', 5 | url:'/s/fyfilter/page/fypage.html', 6 | filterable:1,//是否启用分类筛选, 7 | filter_url:'{{fl.cateId}}', 8 | filter: {"dianying":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianying"},{"n":"动作片","v":"dongzuopian"},{"n":"喜剧片","v":"xijupian"},{"n":"爱情片","v":"aiqingpian"},{"n":"科幻片","v":"kehuanpian"},{"n":"言情片","v":"yanqingpian"},{"n":"恐怖片","v":"kongbupian"},{"n":"剧情片","v":"juqingpian"},{"n":"战争片","v":"zhanzhengpian"}]}],"lianxuju":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"lianxuju"},{"n":"国产剧","v":"guochanju"},{"n":"港台剧","v":"gangtaiju"},{"n":"日韩剧","v":"rihanju"},{"n":"欧美剧","v":"oumeiju"},{"n":"其他剧","v":"qitaju"}]}]}, 9 | filter_def:{ 10 | dianying:{cateId:'dianying'}, 11 | lianxuju:{cateId:'lianxuju'}, 12 | zongyi:{cateId:'zongyi'}, 13 | dongman:{cateId:'dongman'} 14 | }, 15 | searchUrl:'/vodsearch/-------------.html?wd=**&submit=', 16 | searchable:2,//是否启用全局搜索, 17 | quickSearch:0,//是否启用快速搜索, 18 | headers:{//网站的请求头,完整支持所有的,常带ua和cookies 19 | 'User-Agent':'MOBILE_UA', 20 | // "Cookie": "searchneed=ok" 21 | }, 22 | class_parse:'nav ul li;a&&Text;a&&href;.*/(.*?)\.html', 23 | cate_exclude:'专题', 24 | play_parse:true, 25 | lazy:'', 26 | limit:6, 27 | 推荐:'.show;ul&&li;*;*;*;*', 28 | double:true, // 推荐内容是否双层定位 29 | 一级:'.show&&ul&&li;a&&title;img&&src;.score&&Text;a&&href', 30 | // 二级:{"title":"h1&&Text;.info&&ul&&p&&Text","img":"img&&src","desc":".info&&ul&&p:eq(-2)&&Text;.info&&ul&&p:eq(-1)&&Text;.info&&ul&&p:eq(0)&&Text;.info&&ul&&p:eq(1)&&Text;.info&&ul&&p:eq(2)&&Text;.info&&ul&&p:eq(3)&&Text","content":".text&&Text","tabs":".play&&span","lists":".playlist&&ul:eq(#id) li"}, 31 | 二级:{ 32 | "title":"h1&&Text;.info&&ul&&p:eq(0)--span&&Text", 33 | "img":"img&&src", 34 | "desc":";.info&&ul&&p:eq(2)--span&&Text;.info&&ul&&p:eq(3)--span&&Text;.info ul li:eq(0)--span&&Text;.info ul li:eq(1)--span&&Text", 35 | // "content":".text p&&Text", 36 | "content":".text&&Text", 37 | "tabs":".play&&span", 38 | "lists":".playlist&&ul:eq(#id) li" 39 | }, 40 | 搜索:'*', 41 | // 搜索:'*;*;*;*;*', 42 | } 43 | -------------------------------------------------------------------------------- /js/ktv_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from 'assets://js/lib/cat.js'; 2 | 3 | let key = 'ktv'; 4 | let HOST = 'http://vpsdn.leuse.top/searchmv'; 5 | let mktvUrl = 'http://txysong.mysoto.cc/songs/'; 6 | let host = ''; 7 | let siteKey = ''; 8 | let siteType = 0; 9 | 10 | const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'; 11 | 12 | async function request(reqUrl, extHeader) { 13 | let headers = { 14 | 'User-Agent': MOBILE_UA, 15 | 'Referer': host, 16 | }; 17 | const res = await req(reqUrl, { 18 | method: 'get', 19 | headers: headers, 20 | }); 21 | return res.content; 22 | } 23 | 24 | // cfg = {skey: siteKey, ext: extend} 25 | async function init(cfg) { 26 | siteKey = cfg.skey; 27 | siteType = cfg.stype; 28 | } 29 | 30 | async function home(filter) { 31 | let classes = [{ 32 | type_id: 1, 33 | type_name: '歌手', 34 | },{ 35 | type_id: 2, 36 | type_name: '曲库', 37 | }]; 38 | const filterObj = { 39 | 1: [{ key: 'region', name: '地区', init: '', value: [{ n: '全部', v: '' }, { v: '1', n: '大陆' }, { v: '2', n: '港台' }, { v: '3', n: '国外' }] },{ key: 'form', name: '类别', init: '', value: [{ n: '全部', v: '' }, { v: '1', n: '男' }, { v: '2', n: '女' }, { v: '3', n: '组合' }] }], 40 | 2: [{ key: 'lan', name: '语言', init: '2', value: [{ n: '全部', v: '' }, { 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: '越南语' }] },{ key: 'type', name: '类型', init: '', value: [{ n: '全部', v: '' }, { 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: '无损DISCO' }, { v: '11', n: '影视' }] }], 41 | }; 42 | return JSON.stringify({ 43 | class: classes, 44 | filters: filterObj, 45 | }); 46 | } 47 | 48 | async function homeVod() { 49 | } 50 | 51 | async function category(tid, pg, filter, extend) { 52 | if (pg <= 0 || typeof (pg) == 'undefined') pg = 1; 53 | let url = HOST; 54 | let videos = []; 55 | if(tid == 1) { 56 | url = url + `?table=singer&pg=${pg}`; 57 | if(extend['region']) url = url + '&where=region_id&keywords=' + extend['region']; 58 | if(extend['form']) url += '&where=form_id&keywords=' + extend['form']; 59 | console.log(url); 60 | let res = JSON.parse(await request(url)); 61 | videos = _.map(res, item => { 62 | return { 63 | vod_id: item.name, 64 | vod_name: item.name, 65 | vod_pic: mktvUrl + item.id + '.jpg', 66 | vod_remarks: '', 67 | } 68 | }); 69 | } else if(tid == 2) { 70 | url = url + `?table=song&pg=${pg}`; 71 | if(extend['lan']) url = url + '&where=language_id&keywords=' + extend['lan']; 72 | if(extend['type']) url += '&where=type_id&keywords=' + extend['type']; 73 | let res = JSON.parse(await request(url)); 74 | videos = _.map(res, item => { 75 | return { 76 | vod_id: mktvUrl + item.number + '.mkv', 77 | vod_name: item.name, 78 | vod_pic: '', 79 | vod_remarks: '', 80 | } 81 | }); 82 | } 83 | return JSON.stringify({ 84 | list: videos, 85 | page: pg, 86 | limit: 20, 87 | total: videos.length 88 | }); 89 | } 90 | 91 | async function detail(id) { 92 | const vod = { 93 | vod_id: id, 94 | vod_name: id, 95 | vod_play_from: 'Leospring', 96 | vod_content: '该影视由leospring采集分享,公众号【蚂蚁科技杂谈】,请勿传播分享,仅供技术学习使用,请在学习后24小时内删除;由此产生的任何法律风险自行承担,与本作者无关!', 97 | } 98 | if (id.endsWith('.mkv')) { 99 | vod.vod_play_url = '播放$' + id; 100 | } else { 101 | let url = HOST + '?table=song&where=singer_names&keywords=' + id + '&size=999'; 102 | let res = JSON.parse(await request(url)); 103 | vod.vod_play_url = (_.map(res, item => { 104 | return item.name + '$' + mktvUrl + item.number + '.mkv'; 105 | })).join('#'); 106 | } 107 | return JSON.stringify({ 108 | list: [vod], 109 | }); 110 | } 111 | 112 | async function play(flag, id, flags) { 113 | return JSON.stringify({ 114 | parse: 0, 115 | url: id, 116 | }); 117 | } 118 | 119 | async function search(wd, quick) { 120 | let data = JSON.parse(await request(HOST + '?keywords=' + wd)); 121 | let videos = _.map(data, (it) => { 122 | return { 123 | vod_id: mktvUrl + it.number + '.mkv', 124 | vod_name: it.name, 125 | vod_pic: '', 126 | vod_remarks: '', 127 | } 128 | }); 129 | return JSON.stringify({ 130 | list: videos, 131 | limit: 50, 132 | }); 133 | } 134 | 135 | export function __jsEvalReturn() { 136 | return { 137 | init: init, 138 | home: home, 139 | homeVod: homeVod, 140 | category: category, 141 | detail: detail, 142 | play: play, 143 | search: search, 144 | }; 145 | } -------------------------------------------------------------------------------- /js/lgyy.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | 模板: 'mxpro', 3 | title: '蓝光影视', 4 | host: 'https://lgysw.cn', 5 | url: '/vodshow/fyclass--------fypage---.html', 6 | searchUrl: '/vodsearch/**----------fypage---/', 7 | class_parse: '.navbar-items li;a&&Text;a&&href;.*/(.*?)/', 8 | cate_exclude: '今日更新|热榜', 9 | } 10 | -------------------------------------------------------------------------------- /js/newvision.js: -------------------------------------------------------------------------------- 1 | muban.mxone5.二级.title = 'h1&&Text;.tag-link:eq(1)&&Text'; 2 | muban.mxone5.二级.desc = '.video-info-items:eq(3)&&Text;.tag-link:eq(2)&&Text;.tag-link:eq(3)&&Text;.video-info-actor:eq(1)--span&&Text;.video-info-actor:eq(0)--span&&Text'; 3 | muban.mxone5.二级.tab_text = 'body--small&&Text'; 4 | var rule={ 5 | title:'新视觉影视', 6 | 模板:'mxone5', 7 | host:'https://kan80.app', 8 | hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,".go:eq(0)&&a&&href");print(src);HOST=src', 9 | url:'/vodshow/fyfilter.html', 10 | filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}', 11 | filter:'H4sIAAAAAAAAA+2ZW28aRxTHn52PwbMfZnFuzVep8kAj1EZ1XclOK1mRJduAA9jh4hIwARtHsQ1OwF4S18WgNV+GmYVv0YWZcyFVV9vWUltp3/Z3zszs+c/tHJaX9xYWIlbkydcvI9/H1yNPIs+WY2trkcXISuyHuIcy01SJlMc/x5Z/is/arUzNqdYk0ZqaPYhsLBprue61N1YD4HPTXTMQAfjUVkFtlo3PAI6ZbY2cOoypAcdsFuXNAMbUgP0wcAJ8X/pg1M/A+zSAb9w5k3sfjM8Avi976TrgM8DidEsDinMK6Dt9RXEawFg6Z6PbY4hFA/bb2Z9Uz6GfBux39MGLHPppCDKfarvtlovg04C+RFZtvwWfBtQ+yMtUD7RrAN/kcF8dnBqfARyz/Gqc6cOYGlDf7YVb+lU6XZCIjC3yJ+P3uIoa0JfbkflP4NOAqzgseGsAq6iBZrWuDos4qzNAX3LofgQlBnAGnKI7qM8FPGfaeDptqU9RbDUeY4eobsu9fsBDNOp1ZM2RJ81Jdcf45kzz7SZnVdW7nGtnTF+Ml7fVze38eNqE8m5znhGEacBF/PyGfAZwqne75DOA/Sqnqt6Gfhpw0zTOqZ8B2hi/kc8AxWLzWOy5fq9t2T+DfhqwXzLvzaBMw3kiRiWnQzffcTNVEINMh/xY7Q69bnjOgbFF6lpeJMCtgW+M5djKt7QxxpedcWsz6O1ac7z2MLQGtgjkM4AL++mEfAZwESqOfF0hNzFbJubWwJaXfAbYlmE+DWx5mRINQSdwPR5bZSfr5mo0cAJOYFRE7xvb7JHZl8i+xO1Rske53SK7xe2C7ILZra/Q7j0y+2OyP+b2R2R/xO0Pyf6Q2x+Q/QG3k16L67VIr8X1WqTX4not0mtxvRbptbheQXoF1ytIr+B6BekVXK8gvYLrFaRXcL2C9AquV5BewfUK0iu4XkF6BdcrSK/3yLflN+u0KVVuX/bzf9iUqnI9qVyZAV4895riFd3vK7tkPN89f7FG5/oyKdOQBtae/bgan7716eK0aoveUdXmV5n55V+/SmKScGRvG24NDUGqRL/KzK+i86tA/OoEL4FTLAaCVG1+lZnMduWwghliBoEqyDc7VNEZCFLRuefD8XUWxtQQpNbxdp2bAQ0GWCyj3luKZQr4vlJDXWHVrQF9jQ6bTw1Bb/b/Yc3kV8P41T7+tdaf1ze+tVbZ9soRefgOa23gsDb5ojYJa4ywxghrjCA1xtId1Riq11PpPJxGDfj+ZFfm37vNTbgikOmcfx7dFPCczwBHTqRUsgEjawiSqcZbe7IO3yUMYL96Y5oPMSJifGvhyG1j7aOBbpe2W4N8bADfmumrOqQeA+i7GI7tNPg0YES1rKpCtAZwZZ1fxttQ3xjAWOyiTA4hFg10Q15LG7/2aAhUG/z7edzL1V4mxu00g0A5ud30si300xBmxzA7wmOYHcPs+Bey4/27+t/E7zt/+kCV4dekgSBZyO97vd//Jm4uyXwa8EbplMhnAGPx+R9Dbe26afhmbgB9uZZbgPk1wG4p2QMNBtB3/E7W8AbTgD6fLxM6l88ldloHvy8FH49UFgsCDf+ljPg3v7SHGTHMiGFGDDPiP8+I9xY2fgdl7JXkTSAAAA==', 12 | filter_def:{ 13 | 1:{cateId:'1'}, 14 | 2:{cateId:'2'}, 15 | 3:{cateId:'3'}, 16 | 4:{cateId:'4'} 17 | }, 18 | cate_exclude:'纪录片', 19 | tab_rename:{'高清线路②':'量子','超清线路3':'乐视','高清线路③':'非凡','高清线路④':'优质','高清线路⑤':'索尼','超清线路2':'360'}, 20 | searchUrl:'/vod-s/**----------fypage---.html', 21 | tab_remove:['夸克4K'], 22 | lazy:`js: 23 | var html = JSON.parse(request(input).match(/r player_.*?=(.*?) drpy_ocr自动过搜索验证失败 3 | var rule = { 4 | title: '烧火影视[优]', 5 | // host:'https://shdy3.com', 6 | host: 'http://shapp.us', 7 | hostJs: 'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,"a:eq(2)&&href");print(src);HOST=src', 8 | // url:'/list/fyclass-fypage.html', 9 | url: '/list/fyfilter-fypage.html', 10 | filterable: 1,//是否启用分类筛选, 11 | filter_url: '{{fl.cateId}}', 12 | filter: { 13 | "1": [{ 14 | "key": "cateId", 15 | "name": "类型", 16 | "value": [{"v": "1", "n": "全部"}, {"v": "6", "n": "喜剧"}, {"v": "7", "n": "爱情"}, { 17 | "v": "8", 18 | "n": "恐怖" 19 | }, {"v": "9", "n": "动作"}, {"v": "10", "n": "科幻"}, {"v": "11", "n": "战争"}, { 20 | "v": "12", 21 | "n": "犯罪" 22 | }, {"v": "13", "n": "动画"}, {"v": "14", "n": "奇幻"}, {"v": "15", "n": "剧情"}, { 23 | "v": "16", 24 | "n": "冒险" 25 | }, {"v": "17", "n": "悬疑"}, {"v": "18", "n": "惊悚"}, {"v": "19", "n": "其它"}] 26 | }], 27 | "2": [{ 28 | "key": "cateId", 29 | "name": "类型", 30 | "value": [{"v": "2", "n": "全部"}, {"v": "20", "n": "大陆"}, {"v": "21", "n": "TVB"}, { 31 | "v": "22", 32 | "n": "韩剧" 33 | }, {"v": "23", "n": "美剧"}, {"v": "24", "n": "日剧"}, {"v": "25", "n": "英剧"}, { 34 | "v": "26", 35 | "n": "台剧" 36 | }, {"v": "27", "n": "其它"}] 37 | }], 38 | "4": [{ 39 | "key": "cateId", 40 | "name": "类型", 41 | "value": [{"v": "4", "n": "全部"}, {"v": "38", "n": "搞笑"}, {"v": "39", "n": "恋爱"}, { 42 | "v": "40", 43 | "n": "热血" 44 | }, {"v": "41", "n": "格斗"}, {"v": "42", "n": "美少女"}, {"v": "43", "n": "魔法"}, { 45 | "v": "44", 46 | "n": "机战" 47 | }, {"v": "45", "n": "校园"}, {"v": "46", "n": "亲子"}, {"v": "47", "n": "童话"}, { 48 | "v": "48", 49 | "n": "冒险" 50 | }, {"v": "49", "n": "真人"}, {"v": "50", "n": "LOLI"}, {"v": "51", "n": "其它"}] 51 | }], 52 | // "28":[{"key":"cateId","name":"综艺","value":[{"v":"28","n":"脱口秀"},{"v":"29","n":"真人秀"},{"v":"30","n":"选秀"},{"v":"31","n":"美食"},{"v":"32","n":"旅游"},{"v":"33","n":"汽车"},{"v":"34","n":"访谈"},{"v":"35","n":"纪实"},{"v":"36","n":"搞笑"},{"v":"37","n":"其它"}]}] 53 | }, 54 | filter_def: { 55 | 1: {cateId: '1'}, 56 | 2: {cateId: '2'}, 57 | 4: {cateId: '4'} 58 | // 28:{cateId:'28'} 59 | }, 60 | searchUrl: '/search.php?page=fypage&searchword=**&searchtype=', 61 | searchable: 0, 62 | quickSearch: 0, 63 | headers: {'User-Agent': 'MOBILE_UA',}, 64 | timeout: 5000,//网站的全局请求超时,默认是3000毫秒 65 | class_name: '电影&电视剧&动漫', 66 | class_url: '1&2&4', 67 | play_parse: true, 68 | lazy: `js: 69 | pdfh = jsp.pdfh;pdfa = jsp.pdfa;pd = jsp.pd; 70 | var html = pd(request(input), 'iframe&&src'); 71 | var apiurl = ''; 72 | if (/api\\.hhplayer/.test(html)) { 73 | apiurl = 'https://api.hhplayer.com/api.php'; 74 | } else if (/hkjx\\.hhplayer/.test(html)) { 75 | apiurl = 'https://hkjx.hhplayer.com/api.php'; 76 | } else if (/hhjx\\.hhplayer/.test(html)) { 77 | apiurl = 'https://hhjx.hhplayer.com/api.php'; 78 | } else if (/play\\.hhplayer/.test(html)) { 79 | apiurl = 'https://play.hhplayer.com/hhjx/api.php'; 80 | } 81 | var url = ''; 82 | var t = ''; 83 | var key = ''; 84 | eval(pdfh(request(html), 'body&&script,0&&Html').split('var act')[0].replaceAll('var ', '')); 85 | var purl = JSON.parse(request(apiurl, { 86 | headers: { 87 | 'User-Agent': MOBILE_UA, 88 | 'Referer': html 89 | }, 90 | body: 'url=' + url + '&t=' + t + '&key=' + key + '&act=0&play=1', 91 | method: 'POST' 92 | })).url; 93 | if(!purl){ 94 | input = { 95 | parse:1, 96 | url:html 97 | } 98 | } 99 | else if (/obj\\/tos/.test(purl)) { 100 | input = { 101 | jx: 0, 102 | url: purl, 103 | parse: 0 104 | } 105 | } else { 106 | input = { 107 | jx: 0, 108 | url: /http/.test(purl) ? purl: 'https://api.hhplayer.com' + purl, 109 | parse: 0 110 | } 111 | } 112 | `, 113 | 推荐: '.v_list,0&&li;*;*;*;*', 114 | 一级: '.v_list li;a&&title;.lazyload&&data-original;.v_note&&Text;a&&href', 115 | 二级: { 116 | "title": "h1&&Text;", 117 | "img": ".m_background&&style", 118 | "desc": ";;;.v_info_box&&p&&Text", 119 | "content": ".p_txt.show_part&&Text", 120 | "tabs": ".from_list&&li", 121 | "lists": "#play_link&&li:eq(#id)&&a" 122 | }, 123 | 搜索: '*', 124 | } 125 | -------------------------------------------------------------------------------- /js/smart.js: -------------------------------------------------------------------------------- 1 | //极致播放器专用源 2 | 3 | //发布频道:https://t.me/jizhi111 4 | //交流讨论:https://t.me/jizhi222 5 | 6 | function getAddress(field) { 7 | const id = getQueryParameter.call({ url: field.url, key: "id" }); 8 | let url = "http://198.16.100.186:8278/" + id + "/playlist.m3u8"; 9 | const tid = "mc42afe745533"; 10 | const t = String(Math.floor(Date.now() / 150)); 11 | const tsum = md5.call("tvata nginx auth module" + "/" + id + "/playlist.m3u8" + tid + t); 12 | url += "?tid=" + tid + "&" + "ct=" + t + "&tsum=" + tsum; 13 | return JSON.stringify({ url: url, headers: { 'CLIENT-IP': '127.0.0.1', 'X-FORWARDED-FOR': '127.0.0.1' } }); 14 | } -------------------------------------------------------------------------------- /js/wogg_open.js: -------------------------------------------------------------------------------- 1 | import {load, _, Uri} from 'assets://js/lib/cat.js'; 2 | import {log} from '../lib/utils.js'; 3 | import {initAli, detailContent, playContent} from '../lib/ali.js'; 4 | 5 | let siteKey = 'wogg'; 6 | let siteType = 0; 7 | let siteUrl = 'https://wogg.xyz'; 8 | let UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; 9 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/ 10 | 11 | // cfg = {skey: siteKey, ext: extend} 12 | async function init(cfg) { 13 | let ext = ''; 14 | if (typeof cfg == 'object') { 15 | siteKey = cfg.skey; 16 | siteType = cfg.stype; 17 | ext = cfg.ext; 18 | } else { 19 | ext = cfg; //适配影视 20 | } 21 | await initAli(ext); 22 | } 23 | 24 | async function request(reqUrl, agentSp) { 25 | let header = { 26 | 'user-agent': agentSp || 'okhttp/3.12.0', 27 | }; 28 | let uri = new Uri(reqUrl); 29 | let res = await req(uri.toString(), { 30 | headers: header, 31 | timeout: 10000 32 | }); 33 | let content = res.content; 34 | return content; 35 | } 36 | 37 | function getHeader() { 38 | let header = {}; 39 | header['User-Agent'] = UA; 40 | return header; 41 | } 42 | 43 | async function getString(url) { 44 | let res = await req(url, { 45 | headers: getHeader() 46 | }); 47 | return res.content; 48 | } 49 | 50 | let classes = [{'type_id': 1, 'type_name' : '电影'},{'type_id': 20, 'type_name' : '电视剧'},{'type_id': 28, 'type_name' : '综艺'},{'type_id': 24, 'type_name' : '动漫'},{'type_id': 32, 'type_name' : '音乐'}]; 51 | let filterObj = {}; 52 | async function home(filter) { 53 | return JSON.stringify({ 54 | class: classes, 55 | filters: filterObj, 56 | }); 57 | } 58 | 59 | 60 | async function homeVod() { 61 | return '{}'; 62 | } 63 | 64 | 65 | async function category(tid, pg, filter, extend) { 66 | let reqUrl = siteUrl + '/index.php/vodshow/'+tid+'--------'+pg+'---.html'; 67 | let con = await request(reqUrl, UA); 68 | const $ = load(con); 69 | let items = $('.module:eq(0) > .module-list > .module-items > .module-item'); 70 | let videos = []; 71 | for(var item of items) { 72 | let oneA = $(item).find('.module-item-cover .module-item-pic a').first(); 73 | let href = oneA.attr('href'); 74 | let name = oneA.attr('title'); 75 | let oneImg = $(item).find('.module-item-cover .module-item-pic img').first(); 76 | let pic = oneImg.attr('data-src'); 77 | let remark = $(item).find('.module-item-text').first().text(); 78 | videos.push({ 79 | vod_id: href, 80 | vod_name: name, 81 | vod_pic: pic, 82 | vod_remarks: remark, 83 | }); 84 | } 85 | 86 | const hasMore = $('#page > a:contains(下一页)').length > 0; 87 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 88 | return JSON.stringify({ 89 | page: parseInt(pg), 90 | pagecount: pgCount, 91 | limit: 72, 92 | total: 72 * pgCount, 93 | list: videos, 94 | }); 95 | } 96 | 97 | async function detail(id) { 98 | let preMatches = id.match(patternAli); 99 | if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]); 100 | let url = siteUrl + id; 101 | let aliUrl = await getString(url); 102 | let matches = aliUrl.match(patternAli); 103 | if (!_.isEmpty(matches)) return await detailContent(matches[1]); 104 | return ''; 105 | } 106 | 107 | 108 | async function play(flag, id, flags) { 109 | return await playContent(flag, id, flags); 110 | } 111 | 112 | 113 | async function search(wd, quick) { 114 | await log('search---' + wd); 115 | let searchUrl = siteUrl + '/index.php/vodsearch/-------------.html?wd=' + wd; 116 | let html = await getString(searchUrl); 117 | let $ = load(html); 118 | let items = $('.module-search-item'); 119 | let videos = []; 120 | for(var item of items) { 121 | let vodId = $(item).find(".video-serial")[0].attribs.href; 122 | let name = $(item).find(".video-serial")[0].attribs.title; 123 | let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src']; 124 | let remark = ''; 125 | videos.push({ 126 | vod_id: vodId, 127 | vod_name: name, 128 | vod_pic: pic, 129 | vod_remarks: remark, 130 | }); 131 | } 132 | return JSON.stringify({ 133 | list: videos, 134 | }); 135 | } 136 | 137 | export function __jsEvalReturn() { 138 | return { 139 | init: init, 140 | home: home, 141 | homeVod: homeVod, 142 | category: category, 143 | detail: detail, 144 | play: play, 145 | search: search, 146 | }; 147 | } -------------------------------------------------------------------------------- /js/xb6v.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'6V新版[磁]', 3 | host:'http://www.xb6v.com', 4 | // host:'https://www.66s6.net', 5 | // url: '/fyclass/index_fypage.html[/fyclass/index.html]', 6 | url: '/fyclassfyfilter/index_fypage.html[/fyclassfyfilter/index.html]', 7 | filter_url:'{{fl.class}}', 8 | filter:{ 9 | "dianshiju":[{"key":"class","name":"類型","value":[{"n":"全部","v":""},{"n":"國產劇","v":"/guoju"},{"n":"日韓劇","v":"/rihanju"},{"n":"歐美劇","v":"/oumeiju"}]}] 10 | }, 11 | searchUrl: '/e/search/index.php#show=title&tempid=1&tbname=article&mid=1&dopost=search&submit=&keyboard=**;post', 12 | searchable:2, 13 | quickSearch:0, 14 | filterable:1, 15 | headers:{ 16 | 'User-Agent': 'MOBILE_UA' 17 | }, 18 | timeout:5000, 19 | class_name:'電視劇&喜劇片& 動作片&愛情片&科幻片& 恐怖片&劇情片&戰爭片&紀錄片&動畫片&綜藝', 20 | class_url:'dianshiju&xijupian&dongzuopian&aiqingpian&kehuanpian&kongbupian&juqingpian&zhanzhengpian&jilupian&donghuapian&ZongYi', 21 | //class_parse:'#menus&&li:gt(1);a&&Text;a&&href;.*/(.*)/', 22 | cate_exclude:'欧美剧|旧版6v', 23 | play_parse:true, 24 | limit:6, 25 | 推荐: '*', 26 | 一级: '#post_container&&li;h2&&Text;img&&src;.info_date&&Text;a&&href', 27 | 二级: { 28 | "title": "#content&&h1&&Text;.info_category&&Text", 29 | "img": "#post_content&&img&&src", 30 | "desc": ";;;#post_content&&p:eq(0)&&Text;#post_content&&p:eq(2)&&Text", 31 | "content": "#post_content&&p:eq(1)&&Text", 32 | "tabs": `js: 33 | TABS = ["道长磁力"]; 34 | let tabs = pdfa(html, '#content&&h3:not(:contains(网盘))'); 35 | tabs.forEach((it) => { 36 | TABS.push(pdfh(it, "body&&Text").replace('播放地址','道长在线').replace('(无插件 极速播放)','一').replace('(无需安装插件)','二')) 37 | }); 38 | `, 39 | "lists": `js: 40 | log(TABS); 41 | pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; 42 | LISTS = []; 43 | let i = 1; 44 | TABS.forEach(function(tab) { 45 | if (/道长磁力/.test(tab)) { 46 | var d = pdfa(html, '.context&&td'); 47 | d = d.map(function(it) { 48 | var title = pdfh(it, 'a&&Text'); 49 | var burl = pd(it, 'a&&href'); 50 | return title + '$' + burl 51 | }); 52 | LISTS.push(d) 53 | } else if (/道长在线/.test(tab) && i <= TABS.length-1) { 54 | var d = pdfa(html, '.context&&.widget:eq(list_idx)&&a'.replace("list_idx", i)); 55 | d = d.map(function(it) { 56 | var title = pdfh(it, 'a&&Text'); 57 | var burl = pd(it, 'a&&href'); 58 | return title + '$' + burl 59 | }); 60 | LISTS.push(d) 61 | i = i + 1; 62 | } 63 | }); 64 | `, 65 | }, 66 | 搜索: '*', 67 | } -------------------------------------------------------------------------------- /js/ystp.js: -------------------------------------------------------------------------------- 1 | function main(url) { 2 | const id = jz.getQuery(url, "id"); 3 | const c = jz.getQuery(url, "c"); 4 | const headers = { 5 | "User-Agent": "cctv_app_tv", 6 | "Referer": "api.cctv.cn", 7 | "UID": "1234123122" 8 | }; 9 | 10 | const cache = jz.getCache(id); 11 | 12 | if (cache !== null) { 13 | return JSON.stringify({ url: cache, headers: headers, cache: true }); 14 | } 15 | 16 | const body = 'appcommon={ "ap": "cctv_app_tv", "an": "央视投屏助手", "adid": "1234123122", "av": "1.1.7" }&url=' + 'http://live-' + c + '.cctv.cn/live/' + id; 17 | 18 | const res = jz.post("https://ytpvdn.cctv.cn/cctvmobileinf/rest/cctv/videoliveUrl/getstream", headers, body); 19 | 20 | if (!jz.isJSONObject(res)) { 21 | return JSON.stringify({ error: '接口返回格式不正确!' }); 22 | } 23 | 24 | const json = JSON.parse(res); 25 | 26 | if (json.error_code == 0) { 27 | jz.setCache(id, json.url, 3600000); 28 | return JSON.stringify({ url: json.url, headers: headers, cache: false }); 29 | } else { 30 | return JSON.stringify({ error: json.error_desc }); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /json/MayiTube.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "MayiTube", 3 | "规则作者": "香雅情", 4 | "请求头参数": "PC_UA", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "0", 7 | "是否开启获取首页数据": "0", 8 | "分类起始页码": "1", 9 | "分类链接": "https://mayitube.com/c/{cateId}?page={catePg}", 10 | "分类名称": "电影&电视剧&综艺&动漫", 11 | "分类名称替换词": "movie&tvseries&tvshow&anime", 12 | "筛选数据": {}, 13 | "分类截取模式": "1", 14 | "分类列表数组规则": ".section-content&&.vodcard", 15 | "分类片单是否Jsoup写法": "1", 16 | "分类片单标题": ".text-overflow&&Text", 17 | "分类片单链接": "a&&href", 18 | "分类片单图片": "a&&style", 19 | "分类片单副标题": ".vodthumb-bottom-content&&Text", 20 | "分类片单链接加前缀": "https://mayitube.com", 21 | "分类片单链接加后缀": "", 22 | "搜索请求头参数": "User-Agent$PC_UA", 23 | "搜索链接": "https://mayitube.com/search?q={wd}", 24 | "POST请求数据": "wd={wd}&search=", 25 | "搜索截取模式": "1", 26 | "搜索列表数组规则": "body&&.col-md-6", 27 | "搜索片单是否Jsoup写法": "1", 28 | "搜索片单图片": "a&&style", 29 | "搜索片单标题": "h1&&Text", 30 | "搜索片单链接": "a&&href", 31 | "搜索片单副标题": ".vodthumb-bottom-content&&Text", 32 | "搜索片单链接加前缀": "https://mayitube.com/", 33 | "搜索片单链接加后缀": "", 34 | "链接是否直接播放": "0", 35 | "直接播放链接加前缀": "https://live.52sf.ga/huya/", 36 | "直接播放链接加后缀": "#isVideo=true#", 37 | "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", 38 | "详情是否Jsoup写法": "0", 39 | "类型详情": "", 40 | "年代详情": "", 41 | "地区详情": "", 42 | "演员详情": "主演: &&

", 43 | "简介详情": "简介: &&

", 44 | "线路列表数组规则": "#episodesTab&&li", 45 | "线路标题": "Text", 46 | "播放列表数组规则": "body&&#episodesTabContent", 47 | "选集列表数组规则": "a", 48 | "选集标题链接是否Jsoup写法": "1", 49 | "选集标题": "a&&Text", 50 | "选集链接": "a&&href", 51 | "是否反转选集序列": "0", 52 | "选集链接加前缀": "https://mayitube.com", 53 | "选集链接加后缀": "", 54 | "分析MacPlayer": "0", 55 | "是否开启手动嗅探": "0", 56 | "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv", 57 | "手动嗅探视频链接过滤词": ".html#=http" 58 | } -------------------------------------------------------------------------------- /json/bestpipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "百思派", 3 | "规则作者": "啦啦啦", 4 | "请求头参数": "手机", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "0", 7 | "是否开启获取首页数据": "1", 8 | "首页推荐链接": "https://www.bestpipe.cn", 9 | "首页列表数组规则": "body&&.stui-vodlist", 10 | "首页片单列表数组规则": "li", 11 | "首页片单是否Jsoup写法": "1", 12 | "分类起始页码": "1", 13 | "分类链接": "https://www.bestpipe.cn/vodshow/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html", 14 | "分类名称": "电影&剧集&短剧&动漫&综艺", 15 | "分类名称替换词": "20&21&24&22&23", 16 | "筛选数据": "ext", 17 | "筛选类型名称": "Netflix&剧情&科幻&动作&喜剧&爱情&冒险&儿童&歌舞&音乐&奇幻&动画&恐怖&惊悚&战争&传记&纪录&犯罪&悬疑&西部&灾难&古装&武侠&家庭&短片&校园&文艺&运动&青春&同性&励志&历史||Netflix&欧美&短剧&古装&武侠&励志&家庭&剧情&喜剧&战争&科幻&惊悚&恐怖&悬疑&犯罪&动作&冒险&历史&同性||古代&现代&穿越&玄幻&霸总&英雄救美&未婚妻&师姐&绝美&逆袭&美女&爱情&甜宠&虐恋&爽剧&搞笑&情感&动漫&萌宝&都市&言情&重生&乡村&神医&幻想&反转&复仇&修仙&古装&男频||Netflix&热血&科幻&美少女&魔幻&经典&励志&少儿&冒险&搞笑&推理&恋爱&治愈&幻想&校园&动物&机战&亲子&儿歌&运动&悬疑&怪物&战争&益智&青春&童话&竞技&动作&社会&友情&真人版&电影版&OVA版&TV版&新番动画&完结动画||Netflix&脱口秀&真人秀&选秀&八卦&访谈&情感&生活&晚会&搞笑&音乐&时尚&游戏&少儿&体育&纪实&科教&曲艺&歌舞&财经&汽车&播报&其他", 18 | "筛选类型替换词": "*", 19 | "筛选地区名称": "大陆&香港&台湾&美国&日本&韩国&英国&法国&德国&印度&泰国&丹麦&瑞典&巴西&加拿大&俄罗斯&意大利&比利时&爱尔兰&西班牙&澳大利亚&其它||大陆&香港&韩国&美国&日本&法国&英国&德国&台湾&泰国&印度&其他||大陆&香港&韩国&美国&日本&法国&英国&德国&台湾&泰国&印度&其他||大陆&日本&欧美&其他||大陆&韩国&香港&台湾&美国&其它", 20 | "筛选地区替换词": "*", 21 | "筛选语言名称": "英语&法语&国语&粤语&日语&韩语&泰语&德语&俄语&闽南语&丹麦语&波兰语&瑞典语&印地语&挪威语&意大利语&西班牙语||空||空||国语&英语&粤语&闽南语&韩语&日语&其它||国语&英语&粤语&闽南语&韩语&日语&其它", 22 | "筛选语言替换词": "*", 23 | "详情是否Jsoup写法": "是", 24 | "类型详情": ".stui-content__detail&&.data,1&&Text!状态:", 25 | "年代详情": ".stui-content__detail&&.data,4&&Text!年份:", 26 | "地区详情": ".stui-content__detail&&.data,2&&Text!地区:", 27 | "演员详情": ".stui-content__detail&&.data,6&&Text!主演:", 28 | "简介详情": ".stui-content__detail&&.detail-content&&Text", 29 | "分类截取模式": "1", 30 | "分类列表数组规则": "body&&.stui-vodlist__box", 31 | "分类片单是否Jsoup写法": "1", 32 | "分类片单标题": "a&&title", 33 | "分类片单链接": "a&&href", 34 | "分类片单图片": ".stui-vodlist__thumb&&data-original", 35 | "分类片单副标题": ".pic-text&&Text", 36 | "分类片单链接加前缀": "https://www.bestpipe.cn", 37 | "搜索请求头参数": "User-Agent$手机", 38 | "搜索链接": "https://www.bestpipe.cn/vodsearch/{wd}----------1---.html", 39 | "搜索截取模式": "1", 40 | "搜索列表数组规则": "body&&.stui-vodlist__box", 41 | "搜索片单是否Jsoup写法": "1", 42 | "搜索片单标题": "a&&title", 43 | "搜索片单链接": "a&&href", 44 | "搜索片单图片": ".stui-vodlist__thumb&&data-original", 45 | "搜索片单副标题": ".pic-text&&Text", 46 | "搜索片单链接加前缀": "https://www.bestpipe.cn", 47 | "线路列表数组规则": "body&&.nav-tabs&&a", 48 | "线路标题": "Text", 49 | "播放列表数组规则": "body&&.stui-content__playlist", 50 | "选集列表数组规则": "a", 51 | "选集标题链接是否Jsoup写法": "1", 52 | "选集标题": "a&&Text", 53 | "选集链接": "a&&href", 54 | "是否反转选集序列": "0", 55 | "选集链接加前缀": "https://www.bestpipe.cn", 56 | "选集链接加后缀": "", 57 | "分析MacPlayer": "2", 58 | "是否开启手动嗅探": "0", 59 | "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", 60 | "手动嗅探视频链接过滤词": ".html#=http" 61 | } -------------------------------------------------------------------------------- /json/douban.json: -------------------------------------------------------------------------------- 1 | { 2 | "hot_gaia":[{"key":"sort","name":"排序","value":[{"n":"热度","v":"recommend"},{"n":"最新","v":"time"},{"n":"评分","v":"rank"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"全部"},{"n":"华语","v":"华语"},{"n":"欧美","v":"欧美"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"}]}], 3 | "tv_hot":[{"key":"type","name":"分类","value":[{"n":"综合","v":"tv_hot"},{"n":"国产剧","v":"tv_domestic"},{"n":"欧美剧","v":"tv_american"},{"n":"日剧","v":"tv_japanese"},{"n":"韩剧","v":"tv_korean"},{"n":"动画","v":"tv_animation"}]}], 4 | "show_hot":[{"key":"type","name":"分类","value":[{"n":"综合","v":"show_hot"},{"n":"国内","v":"show_domestic"},{"n":"国外","v":"show_foreign"}]}], 5 | "movie":[{"key":"类型","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":"地区","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":"sort","name":"排序","value":[{"n":"近期热度","v":"T"},{"n":"首映时间","v":"R"},{"n":"高分优先","v":"S"}]},{"key":"年代","name":"年代","value":[{"n":"全部年代","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2010年代","v":"2010年代"},{"n":"2000年代","v":"2000年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"},{"n":"70年代","v":"70年代"},{"n":"60年代","v":"60年代"},{"n":"更早","v":"更早"}]}], 6 | "tv":[{"key":"类型","name":"类型","value":[{"n":"不限","v":""},{"n":"电视剧","v":"电视剧"},{"n":"综艺","v":"综艺"}]},{"key":"电视剧形式","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":"音乐"}]},{"key":"综艺形式","name":"综艺形式","value":[{"n":"不限","v":""},{"n":"真人秀","v":"真人秀"},{"n":"脱口秀","v":"脱口秀"},{"n":"音乐","v":"音乐"},{"n":"歌舞","v":"歌舞"}]},{"key":"地区","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":"sort","name":"排序","value":[{"n":"近期热度","v":"T"},{"n":"首播时间","v":"R"},{"n":"高分优先","v":"S"}]},{"key":"年代","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2010年代","v":"2010年代"},{"n":"2000年代","v":"2000年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"},{"n":"70年代","v":"70年代"},{"n":"60年代","v":"60年代"},{"n":"更早","v":"更早"}]},{"key":"平台","name":"平台","value":[{"n":"全部","v":""},{"n":"腾讯视频","v":"腾讯视频"},{"n":"爱奇艺","v":"爱奇艺"},{"n":"优酷","v":"优酷"},{"n":"湖南卫视","v":"湖南卫视"},{"n":"Netflix","v":"Netflix"},{"n":"HBO","v":"HBO"},{"n":"BBC","v":"BBC"},{"n":"NHK","v":"NHK"},{"n":"CBS","v":"CBS"},{"n":"NBC","v":"NBC"},{"n":"tvN","v":"tvN"}]}], 7 | "rank_list_movie":[{"key":"榜单","name":"榜单","value":[{"n":"实时热门电影","v":"movie_real_time_hotest"},{"n":"一周口碑电影榜","v":"movie_weekly_best"},{"n":"豆瓣电影Top250","v":"movie_top250"}]}], 8 | "rank_list_tv":[{"key":"榜单","name":"榜单","value":[{"n":"实时热门电视","v":"tv_real_time_hotest"},{"n":"华语口碑剧集榜","v":"tv_chinese_best_weekly"},{"n":"全球口碑剧集榜","v":"tv_global_best_weekly"},{"n":"国内口碑综艺榜","v":"show_chinese_best_weekly"},{"n":"国外口碑综艺榜","v":"show_global_best_weekly"}]}] 9 | } -------------------------------------------------------------------------------- /json/dygang.json: -------------------------------------------------------------------------------- 1 | { 2 | //规则名 3 | "title": "电影港", 4 | //作者 5 | "author": "香雅情", 6 | //请求头UA,键名$键值,每一组用#分开,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA 7 | //多个请求头参数写法示例,"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok",每一组用#分开。 8 | //习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA 9 | "Headers":"PC_UA", 10 | //网页编码格式默认UTF-8编码,UTF-8,GBK,GB2312 11 | "Coding_format":"gb2312", 12 | //图片是否需要代理 13 | "PicNeedProxy":"0", 14 | //是否开启获取首页数据,0关闭,1开启 15 | "homeContent":"0", 16 | //分类链接起始页码,禁止负数和含小数点。 17 | "firstpage": "1", 18 | //分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接] 19 | "class_url": "https://www.dygang.tv/{cateId}/index_{catePg}.htm[firstPage=https://www.dygang.cc/{cateId}/index.htm]", 20 | //分类名,分类1&分类2&分类3 21 | "class_name": "最新電影&經典高清&國語配音&經典港片&國產劇&日韓劇&美劇&綜藝&動漫&紀錄片&高清原盤&4K高清區&3D電影&電影專題", 22 | //分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1 23 | "class_value": "ys&bd&gy&gp&dsj&dsj1&yx&zy&dmq&jilupian&1080p&4K&3d&dyzt", 24 | //筛选数据,json格式,参考xpath的筛选写法 25 | "filterdata":{}, 26 | 27 | //分类页面截取数据模式,0为json,其它数字为普通网页。 28 | "cat_mode": "1", 29 | //分类列表数组定位,最多支持3层,能力有限,不是所有页面都能支持 30 | "cat_arr_rule": "body&&table[width=388]", 31 | //分类片单信息jsoup与xb截取写法切换,只作用于html网页,1为jsoup写法(默认),0为xb写法 32 | "cat_is_jsoup":"1", 33 | //分类片单标题 34 | "cat_title": "img&&alt", 35 | //分类片单链接 36 | "cat_url": "a&&href", 37 | //分类片单图片,支持自定义图片链接 38 | "cat_pic": "img&&src", 39 | //分类片单副标题 40 | "cat_subtitle":"[align=center]&&Text", 41 | //分类片单链接补前缀 42 | "cat_prefix": "https://www.dygang.tv", 43 | //分类片单链接补后缀 44 | "cat_suffix": "", 45 | 46 | //搜索请求头参数,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA 47 | //多个请求头参数写法示例,键名$键值,每一组用#分开。"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok"。 48 | "SHeaders":"User-Agent$PC_UA#Content-Type$charset=gb2312", 49 | //搜索链接,搜索关键字用{wd}表示,post请求的最后面加;post 50 | //POST链接示例 http://www.lezhutv.com/index.php?m=vod-search;post 51 | "search_url": "https://www.dygang.tv/e/search/index123.php;post", 52 | //POST搜索body,填写搜索关键字的键值,一般常见的是searchword和wd,不是POST搜索的可留空或删除。 53 | "sea_PtBody":"keyboard={wd}&submit=搜+索&show=title,smalltext&tempid=1&tbname=article", 54 | 55 | //搜索截取模式,0为json搜索,只支持列表在list数组里的,其它数字为网页截取。 56 | "search_mode": "1", 57 | //搜索列表数组定位,不填默认内置list,最多支持3层,能力有限,不是所有页面都能支持。 58 | "sea_arr_rule": "body&&table[width=388]", 59 | //搜索片单信息jsoup与xb截取写法切换,只作用于html网页,1为jsoup写法(默认),0为xb写法 60 | "sea_is_jsoup":"1", 61 | //搜索片单图片,支持自定义图片链接 62 | "sea_pic": "img&&src", 63 | //搜索片单标题 64 | "sea_title": "img&&alt", 65 | //搜索片单链接 66 | "sea_url": "a&&href", 67 | //搜索片单副标题 68 | "sea_subtitle":"", 69 | //搜索片单链接补前缀 70 | "search_prefix": "https://www.dygang.tv", 71 | //搜索片单链接补后缀,这个一般json搜索的需要 72 | "search_suffix": "", 73 | 74 | //片单链接是否直接播放,0否,1分类片单链接直接播放,2详情选集链接直接播放。 75 | //设置成直接播放后,后面3个参数请注意该留空的请务必留空。 76 | "force_play": "0", 77 | //直接播放链接补前缀 78 | "play_prefix": "", 79 | //直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接 80 | "play_suffix": "", 81 | //直接播放链接设置请求头,只对直链视频有效,每一组用#分开 82 | "play_header": "", 83 | 84 | //项目信息jsoup与xb截取写法切换,1为jsoup写法(默认),0为xb写法 85 | "proj_is_jsoup":"0", 86 | //类型数据,截取前缀&&截取后缀 87 | "proj_cate": "", 88 | //年代数据,截取前缀&&截取后缀 89 | "proj_year": "", 90 | //地区数据,截取前缀&&截取后缀 91 | "proj_area": "", 92 | //演员数据,截取前缀&&截取后缀 93 | "proj_actor": "演  员&&var player_aaaa={"flag":"play","encrypt这种源码的链接解析 120 | //如果网页源码里没有这种请设置为0 121 | "Anal_MacPlayer":"0", 122 | //是否开启手动嗅探,只对网页嗅探有效,0否,1是 123 | "ManualSniffer":"0", 124 | //手动嗅探视频链接关键字,每个用#隔开 125 | "VideoFormat":".mp4#.m3u8#.flv", 126 | //手动嗅探视频链接过滤关键词,每个用#隔开 127 | "VideoFilter":".html#=http" 128 | } 129 | -------------------------------------------------------------------------------- /json/euvod.json: -------------------------------------------------------------------------------- 1 | { 2 | "主页url": "https://euvod.tv/", 3 | "分类url": "https://euvod.tv/vodshow/{cateId}-{area}-hits-{class}-{lang}-{letter}---{catePg}---{year}.html", 4 | "分类": "电影$1#电视剧$2#动漫$3#综艺$4", 5 | "分类数组": "library-item&&
", 6 | "分类ID": "/vodshow/&&-----------.html", 7 | "分类标题": ">&&", 8 | "数组": "module-item-pic&&", 9 | "标题": "title=\"&&\"", 10 | "图片": "data-src=\"&&\"", 11 | "链接": "href=\"&&\"", 12 | "播放数组": "scroll-content&&", 13 | "播放标题": "&&", 14 | "播放列表": "", 15 | "线路数组": "data-dropdown-value&&", 16 | "线路标题": "&&", 17 | "搜索数组": "video-info&&", 18 | "搜索url": "https://euvod.tv/vodsearch/-------------.html?wd={wd}", 19 | "筛选": "1", 20 | "类型": "犯罪片$36#动作片$6#喜剧片$7#爱情片$8#科幻片$9#恐怖片$10#剧情片$11#战争片$12||国產剧$14#港台剧$15#日韩剧$16#欧美剧$20#泰国剧$30#海外剧$13||日韩漫$21#国產漫$22#欧美漫$23#海外漫$24#港台漫$25||大陆综艺$26#日韩综艺$27#港台综艺$28||空", 21 | "地区": "大陆&香港&台湾&美国&日本&韩国&英国&法国&德国&印度&泰国&加拿大&意大利&西班牙&其他||空||內地&港台&日韩&欧美||国產&日本&欧美&其他||空", 22 | "年份": "2025&2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2005&2004", 23 | "年份值": "*", 24 | "字母": "A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&0-9", 25 | "字母值": "*", 26 | "排序": "时间&人气&评分", 27 | "排序值": "time&hits&score" 28 | } 29 | -------------------------------------------------------------------------------- /json/feikuai.json: -------------------------------------------------------------------------------- 1 | { 2 | "请求头": "User-Agent$MOBILE_UA", 3 | "编码": "UTF-8", 4 | "主页url": "https://feikuai.tv/", 5 | "分类url": "/vodshow/{cateId}-{area}--{class}-{lang}-{letter}---{catePg}---{year}.html", 6 | "分类": "电影$1#电视剧$2#综艺$3#动漫$4", 7 | "数组": "/voddetail/&&", 8 | "标题": "title=\"&&\"", 9 | "副标题": "note\">&&<", 10 | "图片": "data-original=\"&&\"", 11 | "链接": "/voddetail/+&&\"", 12 | "影片年代": "上映:&&", 13 | "状态": "更新:&&", 14 | "导演": "导演:&&", 15 | "主演": "主演:&&", 16 | "简介": "introduction-content&&", 18 | "线路标题": "&&<+集】", 19 | "播放数组": "play-list-content&&", 20 | "播放列表": "", 21 | "播放标题": ">&&", 25 | "搜索图片": "data-original=\"&&\"", 26 | "搜索链接": "/voddetail/+&&\"", 27 | "搜索标题\"": "title=\"&&\"", 28 | "搜索副标题": "note\">&&<", 29 | "筛选": "1", 30 | "类型": "喜剧片$6#动作片$7#科幻片$8#爱情片$9#战争片$10#恐怖片$11#剧情片$12#其它$30||内地剧$13#港台剧$14#日韩剧$15#欧美剧$16#短剧$32#其它剧$31||大陆综艺$20#港台综艺$21#日韩综艺$23#欧美综艺$22#其它综艺$24||空", 31 | "年份": "2025&2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010", 32 | "年份值": "*", 33 | "字母": "A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&0-9", 34 | "字母值": "*", 35 | "排序": "时间&人气&评分", 36 | "排序值": "time&hits&score" 37 | } -------------------------------------------------------------------------------- /json/hanjukankan.json: -------------------------------------------------------------------------------- 1 | { 2 | "请求头": "User-Agent$MOBILE_UA", 3 | "编码": "UTF-8", 4 | "数组": "默认--", 5 | "标题": "默认--title=\"&&\"||搜索--alt=\"&&\"", 6 | "图片": "默认--data-original=\"&&\"||搜索--data-original=\"&&\"", 7 | "副标题": "默认--note\">&&||搜索--note\">&&", 8 | "链接": "默认--https://www.hanjukankan.com/xvd+&&\"||搜索--https://www.hanjukankan.com+href=\"&&\"", 9 | "状态": "更新:&&", 10 | "导演": "导演:&&", 11 | "主演": "主演:&&", 12 | "简介": "introduction-content&&", 14 | "播放列表": "", 15 | "播放链接": "href=\"&&\"", 16 | "播放标题": "&&", 17 | "线路数组": "module-tab-item&&", 18 | "线路标题": "&&", 19 | "跳转播放链接": "var player_*\"url\":\"&&\"", 20 | "搜索url": "https://www.hanjukankan.com/xvse{wd}abcdefghig{pg}klm.html", 21 | "分类url": "https://www.hanjukankan.com/xvs{cateId}xat{area}xbt{by}xct{class}xdt{lang}xet{letter}xftxgtxht{catePg}atbtct{year}.html;;x", 22 | "筛选": "1", 23 | "分类": "韩剧$1#韩影$2#韩综$3#其他$4", 24 | "剧情": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||古装&战争&青春偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&网剧&其他||喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影", 25 | "剧情值": "*", 26 | "地区": "韩国||韩国||韩国||韩国", 27 | "地区值": "*", 28 | "语言": "韩语||韩语||韩语||韩语", 29 | "语言值": "*", 30 | "年份": "2025&2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000", 31 | "年份值": "*", 32 | "字母": "A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&0-9", 33 | "字母值": "*" 34 | } -------------------------------------------------------------------------------- /json/jianpian.json: -------------------------------------------------------------------------------- 1 | { 2 | "0":[{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"國產","v":"1"},{"n":"香港","v":"3"},{"n":"台灣","v":"6"},{"n":"美國","v":"5"},{"n":"韓國","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","value":[{"n":"熱門","v":"hot"},{"n":"更新","v":"updata"},{"n":"評分","v":"rating"}]}], 3 | "1":[{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"國產","v":"1"},{"n":"香港","v":"3"},{"n":"台灣","v":"6"},{"n":"美國","v":"5"},{"n":"韓國","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","value":[{"n":"熱門","v":"hot"},{"n":"更新","v":"updata"},{"n":"評分","v":"rating"}]}], 4 | "2":[{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"國產","v":"1"},{"n":"香港","v":"3"},{"n":"台灣","v":"6"},{"n":"美國","v":"5"},{"n":"韓國","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","value":[{"n":"熱門","v":"hot"},{"n":"更新","v":"updata"},{"n":"評分","v":"rating"}]}], 5 | "3":[{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"國產","v":"1"},{"n":"香港","v":"3"},{"n":"台灣","v":"6"},{"n":"美國","v":"5"},{"n":"韓國","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","value":[{"n":"熱門","v":"hot"},{"n":"更新","v":"updata"},{"n":"評分","v":"rating"}]}], 6 | "4":[{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"國產","v":"1"},{"n":"香港","v":"3"},{"n":"台灣","v":"6"},{"n":"美國","v":"5"},{"n":"韓國","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","value":[{"n":"熱門","v":"hot"},{"n":"更新","v":"updata"},{"n":"評分","v":"rating"}]}] 7 | } 8 | -------------------------------------------------------------------------------- /json/lzizy9.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "量子影视", 3 | "规则作者": "香雅情", 4 | "请求头参数": "User-Agent$MOBILE_UA", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "0", 7 | "是否开启获取首页数据": "1", 8 | "首页推荐链接": "http://www.lzizy9.com", 9 | "首页列表数组规则": "body&&.module-items:has(.module-item-pic)", 10 | "首页片单列表数组规则": ".module-item:not(:contains(伦理))", 11 | "首页片单是否Jsoup写法": "1", 12 | "分类起始页码": "1", 13 | "分类链接": "http://www.lzizy9.com/index.php/vod/show/by/{by}/id/{cateId}/lang/{lang}/year/{year}/page/{catePg}.html", 14 | "分类名称": "电影&电视剧&综艺&动漫", 15 | "分类名称替换词": "1&2&4&3", 16 | //"筛选数据": {}, 17 | "筛选数据": "ext", 18 | //{cateId} 19 | "筛选子分类名称": "动作片&喜剧片&科幻片&恐怖片&爱情片&剧情片&战争片&记录片&预告片||国产剧&欧美剧&香港剧&韩国剧&日本剧&台湾剧&泰国剧&海外剧&短剧||大陆综艺&日韩综艺&欧美综艺&港台综艺||国产动漫&日韩动漫&欧美动漫&港台动漫&海外动漫", 20 | "筛选子分类替换词": "6&7&8&9&10&11&12&20&45||13&14&15&16&23&22&25&24&38||31&33&34&32||26&27&28&29&30", 21 | //{class} 22 | "筛选类型名称": "", 23 | "筛选类型替换词": "*", 24 | //{area} 25 | "筛选地区名称": "", 26 | "筛选地区替换词": "*", 27 | //{year} 28 | "筛选年份名称": "", 29 | "筛选年份替换词": "*", 30 | //{lang} 31 | "筛选语言名称": "国语&英语&粤语&闽南语&韩语&日语&法语&德语&其它||国语&英语&粤语&闽南语&韩语&日语&法语&德语&其它||国语&英语&粤语&闽南语&韩语&日语&法语&德语&其它||国语&英语&粤语&闽南语&韩语&日语&法语&德语&其它||", 32 | "筛选语言替换词": "*", 33 | //{by} 34 | "筛选排序名称": "时间&人气&评分", 35 | "筛选排序替换词": "time&hits&score", 36 | "分类截取模式": "1", 37 | "分类列表数组规则": "body&&.module-item:not(:contains(伦理))", 38 | "分类片单是否Jsoup写法": "1", 39 | "分类片单标题": "a&&title", 40 | "分类片单链接": "a&&href", 41 | "分类片单图片": ".lazyloaded||.lazyload&&data-src||data-original", 42 | "分类片单副标题": ".module-item-text||.module-item-note&&Text", 43 | "分类片单链接加前缀": "http://www.lzizy9.com", 44 | "分类片单链接加后缀": "", 45 | "搜索请求头参数": "User-Agent$MOBILE_UA", 46 | //"搜索链接": "https://lzi888.com/index.php/vod/search.html?wd={wd}", 47 | "搜索链接": "http://www.lzizy9.com/index.php/vod/search.html?wd={wd}", 48 | "POST请求数据": "", 49 | "搜索截取模式": "1", 50 | "搜索列表数组规则": "body&&.module-search-item:not(:contains(伦理))||.module-card-item:not(:contains(伦理))", 51 | "搜索片单是否Jsoup写法": "1", 52 | "搜索片单图片": ".lazyload&&data-src||data-original", 53 | "搜索片单标题": ".module-card-item-title||h3&&Text", 54 | "搜索片单链接": ".module-card-item-title||h3&&a&&href", 55 | "搜索片单副标题": ".video-serial||.module-item-note&&Text", 56 | "搜索片单链接加前缀": "http://www.lzizy9.com", 57 | "搜索片单链接加后缀": "", 58 | "链接是否直接播放": "0", 59 | "直接播放链接加前缀": "", 60 | "直接播放链接加后缀": "#isVideo=true#", 61 | "直接播放直链视频请求头": "", 62 | "详情是否Jsoup写法": "1", 63 | "类型详情": ".video-info-aux&&a.tag-link,0&&Text", 64 | "年代详情": ".video-info-aux&&a.tag-link,1&&Text", 65 | "地区详情": ".video-info-aux&&a.tag-link,2&&Text", 66 | "演员详情": ".video-info-main&&.video-info-actor,1&&Text", 67 | "简介详情": ".video-info-main&&.video-info-content&&Text", 68 | "线路列表数组规则": ".module-tab-content||.module-tab-items-box&&.module-tab-item", 69 | "线路标题": "Text", 70 | "播放列表数组规则": "body&&.module-player-list||.module-play-list", 71 | "选集列表数组规则": ".scroll-content||.module-play-list-content&&a", 72 | "选集标题链接是否Jsoup写法": "1", 73 | "选集标题": "a&&Text", 74 | "选集链接": "a&&href", 75 | "是否反转选集序列": "0", 76 | "选集链接加前缀": "http://www.lzizy9.com", 77 | "选集链接加后缀": "", 78 | "分析MacPlayer": "2", 79 | "是否开启手动嗅探": "0", 80 | "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", 81 | "手动嗅探视频链接过滤词": ".html#=http" 82 | } 83 | -------------------------------------------------------------------------------- /json/market.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "推薦", 4 | "list": [ 5 | { 6 | "name": "電視", 7 | "url": "https://github.com/myhomebox/Release/releases/download/dev/leanback-armeabi_v7a.apk", 8 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 9 | "version": "2.9.3" 10 | }, 11 | { 12 | "name": "電視 Pro", 13 | "url": "https://github.com/myhomebox/Release/releases/download/dev/leanback-python-Pro.apk", 14 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 15 | "version": "3.3.3" 16 | }, 17 | { 18 | "name": "想唱就唱", 19 | "url": "https://github.com/myhomebox/Release/releases/download/dev/origioyktv.apk", 20 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 21 | "version": "2.15.63.2401241253" 22 | }, 23 | { 24 | "name": "美華KTV", 25 | "url": "https://github.com/myhomebox/Release/releases/download/dev/skyktv.apk", 26 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 27 | "version": "9.9.9" 28 | }, 29 | { 30 | "name": "IKTV", 31 | "url": "https://github.com/myhomebox/Release/releases/download/dev/ktv.apk", 32 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 33 | "version": "40.0.0" 34 | }, 35 | { 36 | "name": "簡單TV", 37 | "url": "https://github.com/myhomebox/Release/releases/download/dev/jdiptv.apk", 38 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 39 | "version": "1.4.0" 40 | }, 41 | { 42 | "name": "優格TV", 43 | "url": "https://github.com/myhomebox/Release/releases/download/dev/YogurtTV.apk", 44 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 45 | "version": "2.1.5" 46 | }, 47 | { 48 | "name": "手機", 49 | "url": "https://github.com/myhomebox/Release/releases/download/dev/mobile-armeabi_v7a.apk", 50 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 51 | "version": "2.9.3" 52 | }, 53 | { 54 | "name": "手機 Pro", 55 | "url": "https://github.com/myhomebox/Release/releases/download/dev/mobile-python-Pro.apk", 56 | "icon": "https://github.com/myhomebox/Release/releases/download/dev/icon.png", 57 | "version": "3.3.3" 58 | } 59 | ] 60 | } 61 | ] 62 | -------------------------------------------------------------------------------- /json/naifei.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "naifei", 3 | "规则作者": "", 4 | "请求头参数": "MOBILE_UA", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "0", 7 | "是否开启获取首页数据": "1", 8 | "首页推荐链接": "https://www.naifei.live", 9 | "首页列表数组规则": "body&&.module-list.module-lines-list", 10 | "首页片单列表数组规则": ".module-item", 11 | "首页片单是否Jsoup写法": "1", 12 | "分类起始页码": "1", 13 | "分类链接": "https://www.naifei.live/vodshow/area/{area}/by/{by}/class/{class}/id/{cateId}/lang/{lang}/year/{year}/page/{catePg}.html", 14 | "分类名称": "電影&電視劇&綜藝&動漫&紀錄片", 15 | "分类名称替换词": "dy&juji&zongyi&dongman&jilupian", 16 | "筛选数据": "ext", 17 | //{cateId} 18 | "筛选子分类名称": "動作&喜劇&愛情&科幻&恐怖&劇情&戰爭&懸疑&動畫||國產劇&香港劇& 臺灣劇&歐美劇&日本劇&韓國劇&東南亞&其他劇||大陸綜藝&港台綜藝&日韓綜藝&歐美綜藝&其他綜藝||國產動漫&日韓動漫&歐美動漫&其他動漫||人物&軍事&歷史&文化&探索&科技&自然&解密&其他", 19 | "筛选子分类替换词": "dongzuopian&xijupian&aiqingpian&kehuanpian&kongbupian&juqingpian&zhanzhengpian&xuanyipian&donghuapian||guochanju&xianggangju&taiwanju&oumeiju&ribenju&hanguoju&dongnanya&qitaju||daluzongyi&gangtaizongyi&rihanzongyi&oumeizongyi&qitazongyi||guochandongman&rihandongman&oumeidongman&qitadongman||", 20 | //{class} 21 | "筛选类型名称": "喜劇&愛情&恐怖&動作&科幻&劇情&戰爭&犯罪&動畫&奇幻&武俠&冒險&槍戰&恐怖&懸疑&驚悚&經典&青春&古裝||愛情&古裝&戰爭&青春&偶像&喜劇&家庭&犯罪&動作&奇幻&劇情&歷史&經典&鄉村&情景&商戰&犯罪&網劇&其他||選秀&情感&訪談&播報&旅遊&音樂&美食&紀實&曲藝&生活&遊戲互動&財經&求職||科幻&熱血&推理&搞笑&冒險&校園&動作&機戰&運動&戰爭&少年&少女&社會&原創&親子&益智&勵志&其他||", 22 | "筛选类型替换词": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&古装||爱情&古装&战争&青春&偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&犯罪&网剧&其他||选秀&情感&访谈&播报&旅游&音乐&美食&纪实&曲艺&生活&游戏互动&财经&求职||科幻&热血&推理&搞笑&冒险&校园&动作&机战&运动&战争&少年&少女&社会&原创&亲子&益智&励志&其他||", 23 | //{area} 24 | "筛选地区名称": "中國&香港& 臺灣&美國&韓國&法國&英國&日本&德國&泰國&印度&義大利&西班牙&加拿大&其他||中國&韓國&香港& 臺灣&日本&美國&泰國&英國&新加坡&其他||中國&香港& 臺灣&日本&韓國&歐美&其他||中國&韓國&日本&美國&法國&德國&其他||中國&香港& 臺灣&美國&韓國&法國&英國&日本&德國&泰國&印度&義大利&西班牙&加拿大&其他||", 25 | "筛选地区替换词": "中国&香港&台湾&美国&韩国&法国&英国&日本&德国&泰国&印度&意大利&西班牙&加拿大&其他||中国&韩国&香港&台湾&日本&美国&泰国&英国&新加坡&其他||中国&香港&台湾&日本&韩国&欧美&其他||中国&韩国&日本&美国&法国&德国&其他||中国&香港&台湾&美国&韩国&法国&英国&日本&德国&泰国&印度&意大利&西班牙&加拿大&其他||", 26 | //{year} 27 | "筛选年份名称": "", 28 | "筛选年份替换词": "*", 29 | //{lang} 30 | "筛选语言名称": "國語&英語&粵語&閩南語&韓語&日語&法語&德語&其它||普通話&英語&粵語&閩南語&韓語&日語&其它||普通話&英語&粵語&閩南語&韓語&日語&其它||普通話&英語&粵語&閩南語&韓語&日語&其它||國語&英語&粵語&閩南語&韓語&日文&其它||普通話&英語&粵語&閩南語&韓語&日語&法語&德語&其它||", 31 | "筛选语言替换词": "普通话&英语&粤语&闽南语&韩语&日语&法语&德语&其它||普通话&英语&粤语&闽南语&韩语&日语&其它||普通话&英语&粤语&闽南语&韩语&日语&其它||普通话&英语&粤语&闽南语&韩语&日语&其它||普通话&英语&粤语&闽南语&韩语&日语&法语&德语&其它||", 32 | //{by} 33 | "筛选排序名称": "時間排序&人氣排序&評分排序", 34 | "筛选排序替换词": "time&hits&score", 35 | "分类截取模式": "1", 36 | "分类列表数组规则": ".module-items&&.module-item", 37 | "分类片单是否Jsoup写法": "1", 38 | "分类片单标题": "a&&title", 39 | "分类片单链接": "a&&href", 40 | "分类片单图片": "img.lazyloaded&&data-src", 41 | "分类片单副标题": ".module-item-text&&Text", 42 | "分类片单链接加前缀": "", 43 | "分类片单链接加后缀": "", 44 | "搜索请求头参数": "User-Agent$MOBILE_UA", 45 | "搜索链接": "https://www.naifei.live/index.php/ajax/suggest?mid=1&wd={wd}&limit=10", 46 | //"搜索链接": "https://www.naifei.live/index.php/vodsearch.html?wd={wd}", 47 | "POST请求数据": "", 48 | "搜索截取模式": "1", 49 | "搜索列表数组规则": "body&&.module-search-item||.module-card-item", 50 | "搜索片单是否Jsoup写法": "1", 51 | "搜索片单图片": ".lazyload&&data-src||data-original", 52 | "搜索片单标题": ".module-card-item-title||h3&&Text", 53 | "搜索片单链接": ".module-card-item-title||h3&&a&&href", 54 | "搜索片单副标题": ".video-serial||.module-item-note&&Text", 55 | "搜索片单链接加前缀": "https://www.naifei.live", 56 | "搜索片单链接加后缀": "", 57 | "链接是否直接播放": "0", 58 | "直接播放链接加前缀": "", 59 | "直接播放链接加后缀": "#isVideo=true#", 60 | "直接播放直链视频请求头": "", 61 | "详情是否Jsoup写法": "1", 62 | "类型详情": ".video-info-aux&&a.tag-link,0&&Text", 63 | "年代详情": ".video-info-aux&&a.tag-link,1&&Text", 64 | "地区详情": ".video-info-aux&&a.tag-link,2&&Text", 65 | "演员详情": ".video-info-main&&.video-info-actor,1&&Text", 66 | "简介详情": ".video-info-main&&.video-info-content&&Text", 67 | "线路列表数组规则": ".module-tab-content||.module-tab-items-box&&.module-tab-item", 68 | "线路标题": "Text", 69 | "播放列表数组规则": "body&&.module-player-list||.module-play-list", 70 | "选集列表数组规则": ".scroll-content||.module-play-list-content&&a", 71 | "选集标题链接是否Jsoup写法": "1", 72 | "选集标题": "a&&Text", 73 | "选集链接": "a&&href", 74 | "是否反转选集序列": "0", 75 | "选集链接加前缀": "https://www.naifei.live", 76 | "选集链接加后缀": "", 77 | "分析MacPlayer": "2", 78 | "是否开启手动嗅探": "否", 79 | "手动嗅探视频链接关键词": "mp4#.m3u8#.flv#video/tos", 80 | "手动嗅探视频链接过滤词": ".html#=http" 81 | } 82 | -------------------------------------------------------------------------------- /json/nivod.json: -------------------------------------------------------------------------------- 1 | { 2 | "規則名": "泥視頻VIP", 3 | "規則作者": "老王叔叔", 4 | "規則日期": "113.11.29", 5 | "ua":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/108.0.0.0Safari/537.36", 6 | "编码": "UTF-8", 7 | "嗅探词": ".m3u8?#play.mtle.cn#.m3u8#.mp4", 8 | "搜索url": "https://www.nivod.vip/s/{wd}-------------", 9 | "影片类型": "module-info-tag\">&&立即播放", 10 | "播放数组": "div class=\"module-play-list-content&&", 11 | "简介": "module-info-introduction-content\"&&

", 12 | "简介详情": "简介:&&

", 13 | "分类url":"https://www.nivod.vip/k/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}/", 14 | "分类": "電影$1#電視劇$2#綜藝$3#動漫$4", 15 | "类型": "动作片$6#喜剧片$7#爱情片$8#科幻片$9#奇幻片$10#恐怖片$11#剧情片$12#战争片$20#动画片$26#悬疑片$22#冒险片$23#犯罪片$24#惊悚片$45#歌舞片$46#灾难片$47#网络片$48||国产剧$13#港台剧$14#日本剧$15#韩国剧$33#欧美剧$16#泰国剧$34#新馬剧$35#其他剧$25||國產综艺$27#港台综艺$28#日本综艺$29#韩國综艺$36#欧美综艺$30#新馬泰綜藝$37#其他综艺$38||国产动漫$31#日本动漫$32#韓國动漫$39#港台动漫$40#新馬泰$41動漫#欧美动漫$42#其他动漫$43", 16 | "地区": "大陆&香港&台湾&美国&法国&英国&日本&韩国&德国&泰国&印度&意大利&西班牙&加拿大&其他||大陆&韩国&香港&台湾&日本&美国&泰国&英国&加拿大&其他||内地&港台&日韩&欧美||国产&日本&欧美&其他", 17 | "排序": "时间$time#人气$hits#评分$score", 18 | "剧情": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||古装&战争&青春&偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&网剧&其他||选秀&情感&访谈&播报&旅游&音乐&美食&纪实&曲艺&生活&游戏&互动&财经&求职||情感&科幻&热血&推理&搞笑&冒险&萝莉&校园&动作&机战&运动&战争&少年&少女&社会&原创&亲子&益智&励志&其他" 19 | } -------------------------------------------------------------------------------- /json/redme.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /json/renren.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "人人影视PRO", 3 | "规则作者": "香雅情", 4 | "请求头参数": "MOBILE_UA", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "否", 7 | "是否开启获取首页数据": "是", 8 | "首页推荐链接": "https://www.renren.pro", 9 | "首页列表数组规则": "body&&.module-list.module-lines-list", 10 | "首页片单列表数组规则": ".module-item", 11 | "首页片单是否Jsoup写法": "1", 12 | "分类起始页码": "1", 13 | "分类链接": "https://www.renren.pro/list/{cateId}?page={catePg}", 14 | "分类名称": "影視庫", 15 | "分类名称替换词": "all", 16 | "筛选数据": {}, 17 | //"筛选数据": "ext", 18 | //{cateId} 19 | "筛选子分类名称": "", 20 | "筛选子分类替换词": "", 21 | //{class} 22 | "筛选类型名称": "", 23 | "筛选类型替换词": "*", 24 | //{area} 25 | "筛选地区名称": "", 26 | "筛选地区替换词": "*", 27 | //{year} 28 | "筛选年份名称": "", 29 | "筛选年份替换词": "*", 30 | //{lang} 31 | "筛选语言名称": "", 32 | "筛选语言替换词": "*", 33 | //{by} 34 | "筛选排序名称": "时间&人气&评分", 35 | "筛选排序替换词": "time&hits&score", 36 | "分类截取模式": "1", 37 | "分类列表数组规则": ".module-items&&.module-item", 38 | "分类片单是否Jsoup写法": "是", 39 | "分类片单标题": ".module-item-title&&Text", 40 | "分类片单链接": "a&&href", 41 | "分类片单图片": ".lazyloaded||.lazyload&&data-src", 42 | "分类片单副标题": ".module-item-text&&Text", 43 | "分类片单链接加前缀": "https://www.renren.pro", 44 | "分类片单链接加后缀": "", 45 | "搜索请求头参数": "User-Agent$MOBILE_UA", 46 | "搜索链接": "https://www.renren.pro/search?wd={wd}", 47 | "POST请求数据": "", 48 | "搜索截取模式": "1", 49 | "搜索列表数组规则": ".module-items&&.module-search-item", 50 | "搜索片单是否Jsoup写法": "是", 51 | "搜索片单图片": ".lazyload&&data-src", 52 | "搜索片单标题": "h3&&Text", 53 | "搜索片单链接": "a&&href", 54 | "搜索片单副标题": ".video-serial&&Text", 55 | "搜索片单链接加前缀": "https://www.renren.pro", 56 | "搜索片单链接加后缀": "", 57 | "链接是否直接播放": "否", 58 | "直接播放链接加前缀": "", 59 | "直接播放链接加后缀": "", 60 | "直接播放直链视频请求头": "", 61 | "详情是否Jsoup写法": "1", 62 | "类型详情": ".video-info-aux&&.tag-link,0&&Text", 63 | "年代详情": ".video-info-aux&&.tag-link,2&&Text", 64 | "地区详情": ".video-info-aux&&.tag-link,1&&Text", 65 | "演员详情": "", 66 | "简介详情": ".module-player-list&&.title-info&&Text", 67 | "线路列表数组规则": "", 68 | "线路标题": "", 69 | "播放列表数组规则": "body&&.module-player-list", 70 | "选集列表数组规则": ".module-blocklist&&a", 71 | "选集标题链接是否Jsoup写法": "是", 72 | "选集标题": "a&&Text", 73 | "选集链接": "a&&href", 74 | "是否反转选集序列": "否", 75 | "选集链接加前缀": "https://www.renren.pro", 76 | "选集链接加后缀": "", 77 | "分析MacPlayer": "否", 78 | "是否开启手动嗅探": "否", 79 | "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", 80 | "手动嗅探视频链接过滤词": ".html#=http" 81 | } 82 | -------------------------------------------------------------------------------- /json/yanetflix.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "耐看点播", 3 | "规则作者": "香雅情", 4 | "请求头参数": "MOBILE_UA", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "否", 7 | "是否开启获取首页数据": "1", 8 | "首页推荐链接": "https://yanaifei.tv", 9 | "首页列表数组规则": "body&&.module-main.tab-list.active", 10 | "首页片单列表数组规则": ".module-item", 11 | "首页片单是否Jsoup写法": "1", 12 | "分类起始页码": "1", 13 | "分类链接": "https://yanaifei.tv/vod/show/{cateId}--------{catePg}---.html", 14 | "分类名称": "电影&电视剧&动漫&综艺", 15 | "分类名称替换词": "1&2&4&3", 16 | "筛选数据": {}, 17 | "分类截取模式": "1", 18 | "分类列表数组规则": "body&&.module-item", 19 | "分类片单是否Jsoup写法": "是", 20 | "分类片单标题": ".module-poster-item-title&&Text", 21 | "分类片单链接": "a&&href", 22 | "分类片单图片": ".lazyload&&data-original", 23 | "分类片单副标题": ".module-item-note&&Text", 24 | "分类片单链接加前缀": "https://yanaifei.tv", 25 | "分类片单链接加后缀": "", 26 | "搜索请求头参数": "User-Agent$MOBILE_UA", 27 | "搜索链接": "https://yanaifei.tv/index.php/ajax/suggest?mid=1&wd={wd}", 28 | "POST请求数据": "wd={wd}&search=", 29 | "搜索截取模式": "0", 30 | "搜索列表数组规则": "list", 31 | "搜索片单是否Jsoup写法": "1", 32 | "搜索片单图片": "pic", 33 | "搜索片单标题": "name", 34 | "搜索片单链接": "id", 35 | "搜索片单副标题": "", 36 | "搜索片单链接加前缀": "https://yanaifei.tv/vod/detail/", 37 | "搜索片单链接加后缀": ".html", 38 | "链接是否直接播放": "否", 39 | "直接播放链接加前缀": "https://live.52sf.ga/huya/", 40 | "直接播放链接加后缀": "#isVideo=true#", 41 | "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", 42 | "详情是否Jsoup写法": "是", 43 | "类型详情": "", 44 | "年代详情": ".module-info-content&&.module-info-item,3&&Text", 45 | "地区详情": "", 46 | "演员详情": ".module-info-content&&.module-info-item,2&&Text", 47 | "简介详情": ".module-info-content&&.module-info-item&&Text", 48 | "线路列表数组规则": ".module-tab-items-box&&.module-tab-item", 49 | "线路标题": "Text", 50 | "播放列表数组规则": "body&&.module-play-list-content", 51 | "选集列表数组规则": "a", 52 | "选集标题链接是否Jsoup写法": "是", 53 | "选集标题": "a&&Text", 54 | "选集链接": "a&&href", 55 | "是否反转选集序列": "否", 56 | "选集链接加前缀": "https://yanaifei.tv", 57 | "选集链接加后缀": "", 58 | "分析MacPlayer": "2", 59 | "是否开启手动嗅探": "否", 60 | "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv", 61 | "手动嗅探视频链接过滤词": ".html#=http" 62 | } -------------------------------------------------------------------------------- /json/ysgc.json: -------------------------------------------------------------------------------- 1 | { 2 | "规则名": "影视工场", 3 | "规则作者": "", 4 | "请求头参数": "User-Agent$PC_UA#accept$text/html", 5 | "网页编码格式": "UTF-8", 6 | "图片是否需要代理": "0", 7 | "是否开启获取首页数据": "1", 8 | "首页推荐链接": "https://www.ysgc.fun", 9 | "首页列表数组规则": "body&&.myui-vodlist", 10 | "首页片单列表数组规则": "li", 11 | "首页片单是否Jsoup写法": "1", 12 | "分类起始页码": "1", 13 | "分类链接": "https://www.ysgc.fun/vodshow/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html", 14 | "分类名称": "電影&電視劇&綜藝&動漫", 15 | "分类名称替换词": "1&2&3&4", 16 | //"筛选数据": {}, 17 | "筛选数据": "ext", 18 | //{cateId} 19 | "筛选子分类名称": "", 20 | "筛选子分类替换词": "", 21 | //{class} 22 | "筛选类型名称": "動作&喜劇&愛情&科幻&恐怖&懸疑&驚悚&犯罪&劇情&戰爭&動畫&奇幻&武俠&古裝&冒險&歷史&歌舞&家庭&網||古裝&懸疑&驚悚&恐怖&劇情&現代&都市&偶像&懸疑&農村&歷史&警匪&家庭&奇幻&武俠&科幻&犯罪&諜戰&穿越&宮廷&神話&網劇||搞笑&真人秀&職場&競技&婚戀&情感&旅遊&生活&闖關遊戲&紀實&明星&專訪&脫口秀||情感&科幻&熱血&推理&搞笑&冒險&蘿莉&校園&動作&機戰&運動&戰爭&少年&少女&社會&原創&親子&益智&勵志&其他", 23 | "筛选类型替换词": "动作&喜剧&爱情&科幻&恐怖&悬疑&惊悚&犯罪&剧情&战争&动画&奇幻&武侠&古装&冒险&历史&歌舞&家庭&网络||古装&悬疑&惊悚&恐怖&剧情&现代&都市&偶像&悬疑&农村&历史&警匪&家庭&奇幻&武侠&科幻&犯罪&谍战&穿越&宫廷&神话&网剧||搞笑&真人秀&职场&竞技&婚恋&情感&旅游&生活&闯关游戏&纪实&明星&访谈&脱口秀||情感&科幻&热血&推理&搞笑&冒险&萝莉&校园&动作&机战&运动&战争&少年&少女&社会&原创&亲子&益智&励志&其他", 24 | //{area} 25 | "筛选地区名称": "內地&香港&臺灣&日本&韓國&泰國&美國&印度&法國&英國&俄羅斯&德國&西班牙&義大利&澳洲&荷蘭&新加坡&馬來西亞||內地&香港&臺灣&日本&韓國&泰國&美國 &印度&德國&法國&新加坡&馬來西亞||內地&港台&日韓&歐美||國產&日本&歐美&其他", 26 | "筛选地区替换词": "内地&香港&台湾&日本&韩国&泰国&美国&印度&法国&英国&俄罗斯&德国&西班牙&意大利&澳大利亚&荷兰&新加坡&马来西亚||内地&香港&台湾&日本&韩国&泰国&美国&印度&德国&法国&新加坡&马来西亚||内地&港台&日韩&欧美||国产&日本&欧美&其他", 27 | //{year} 28 | "筛选年份名称": "2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000&90年代&80年代&70年代&其他||2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000||2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000||2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000", 29 | "筛选年份替换词": "2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000&90年代&80年代&70年代&其他||2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000||2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000||2024&2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001&2000", 30 | //{lang} 31 | "筛选语言名称": "國語&粵語&英語&日語&韓語&泰語&法語&俄語&德語||國語&英語&粵語&閩南語&韓語&日語&其它||國語&英語&粵語&閩南語&韓語&日語&其它||國語&英語&粵語&閩南語&韓語&日語&其它", 32 | "筛选语言替换词": "普通话&粤语&英语&日语&韩语&泰语&法语&俄语&德语||国语&英语&粤语&闽南语&韩语&日语&其它||国语&英语&粤语&闽南语&韩语&日语&其它||国语&英语&粤语&闽南语&韩语&日语&其它", 33 | //{by} 34 | "筛选排序名称": "时间&人气&评分", 35 | "筛选排序替换词": "time&hits&score", 36 | "分类截取模式": "1", 37 | "分类列表数组规则": ".myui-vodlist&&li", 38 | "分类片单是否Jsoup写法": "1", 39 | "分类片单标题": "h4&&a&&Text", 40 | "分类片单链接": "h4&&a&&href", 41 | "分类片单图片": ".lazyload&&data-original", 42 | "分类片单副标题": ".pic-text&&Text", 43 | "分类片单链接加前缀": "https://www.ysgc.fun", 44 | "分类片单链接加后缀": "", 45 | "搜索请求头参数": "User-Agent$电脑#accept$text/html", 46 | 47 | "搜索链接": "https://www.ysgc.fun/rss.xml?wd={wd}", 48 | "POST请求数据": "", 49 | "搜索截取模式": "1", 50 | "搜索列表数组规则": "rss&&item", 51 | "搜索片单是否Jsoup写法": "0", 52 | "搜索片单图片": "", 53 | "搜索片单标题": "title>&&<", 54 | "搜索片单链接": "link>&&\n", 55 | "搜索片单副标题": "pubdate>\n&&\n", 56 | "搜索片单链接加前缀": "", 57 | "搜索片单链接加后缀": "", 58 | 59 | "链接是否直接播放": "0", 60 | "直接播放链接加前缀": "https://live.52sf.ga/huya/", 61 | "直接播放链接加后缀": "#isVideo=true#", 62 | "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", 63 | "详情是否Jsoup写法": "1", 64 | "类型详情": ".myui-content__detail&&p.data,3&&Text!类型:", 65 | "年代详情": "body&&span.year&&Text", 66 | "地区详情": ".myui-content__detail&&p.data,4&&Text!地区:", 67 | "演员详情": ".myui-content__detail&&p.data,2&&Text!主演:", 68 | "简介详情": "span.data&&Text", 69 | "线路列表数组规则": ".nav-tabs&&li", 70 | "线路标题": "Text", 71 | "播放列表数组规则": "body&&.myui-content__list", 72 | "选集列表数组规则": "li", 73 | "选集标题链接是否Jsoup写法": "1", 74 | "选集标题": "a&&Text", 75 | "选集链接": "a&&href", 76 | "是否反转选集序列": "0", 77 | "选集链接加前缀": "https://www.ysgc.fun", 78 | "选集链接加后缀": "", 79 | "分析MacPlayer": "0", 80 | "是否开启手动嗅探": "1", 81 | "手动嗅探视频链接关键词": "getm3u8?url=http#.mp4#.m3u8#.flv#video/tos", 82 | "手动嗅探视频链接过滤词": ".html" 83 | } 84 | -------------------------------------------------------------------------------- /lf_live.txt: -------------------------------------------------------------------------------- 1 | 格式说明: 2 | #订阅名 3 | 地址(支持m3u订阅、tvbox配置文件中live选项的直播地址订阅) 4 | 5 | 相对路径说明 6 | 以./开头,相对位置是本订阅文件 7 | 以/开头,存储卡的根目录 8 | 9 | #MV_1 10 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_1.txt 11 | #MV_2 12 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_2.txt 13 | #MV_3 14 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_3.txt 15 | #MV_4 16 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_4.txt 17 | #MV_5 18 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_5.txt 19 | #MV_6 20 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_6.txt 21 | #MV_7 22 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_7.txt 23 | #MV_8 24 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_8.txt 25 | #MV_9 26 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_9.txt 27 | #MV_10 28 | https://ghproxy.com/https://raw.githubusercontent.com/myhomebox/tv/main/MTV/MTV_10.txt 29 | -------------------------------------------------------------------------------- /lib/2.15.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/lib/2.15.so -------------------------------------------------------------------------------- /lib/ali.js: -------------------------------------------------------------------------------- 1 | (function(_0x24a2d2,_0x5e8b9c){const _0x5df84b=_0x8314,_0x37f89b=_0x24a2d2();while(!![]){try{const _0x2c4d4a=-parseInt(_0x5df84b(0x1f5))/0x1*(-parseInt(_0x5df84b(0x1f6))/0x2)+parseInt(_0x5df84b(0x200))/0x3+-parseInt(_0x5df84b(0x1eb))/0x4*(parseInt(_0x5df84b(0x1ea))/0x5)+parseInt(_0x5df84b(0x1ed))/0x6*(-parseInt(_0x5df84b(0x1e2))/0x7)+-parseInt(_0x5df84b(0x1fc))/0x8*(-parseInt(_0x5df84b(0x1f3))/0x9)+-parseInt(_0x5df84b(0x1ec))/0xa*(parseInt(_0x5df84b(0x1e4))/0xb)+-parseInt(_0x5df84b(0x1e8))/0xc;if(_0x2c4d4a===_0x5e8b9c)break;else _0x37f89b['push'](_0x37f89b['shift']());}catch(_0x42d019){_0x37f89b['push'](_0x37f89b['shift']());}}}(_0x3662,0xc4f19));const _0x5403fe=(function(){let _0x33197a=!![];return function(_0x25661f,_0x19ca25){const _0x33a295=_0x33197a?function(){const _0x229372=_0x8314;if(_0x19ca25){const _0x236c2e=_0x19ca25[_0x229372(0x1ee)](_0x25661f,arguments);return _0x19ca25=null,_0x236c2e;}}:function(){};return _0x33197a=![],_0x33a295;};}()),_0x1a5007=_0x5403fe(this,function(){const _0x516ca0=_0x8314;let _0x4c830a;try{const _0x1d20d6=Function(_0x516ca0(0x1e3)+_0x516ca0(0x1f0)+');');_0x4c830a=_0x1d20d6();}catch(_0x4bf3f9){_0x4c830a=window;}const _0x1f4472=_0x4c830a[_0x516ca0(0x1e6)]=_0x4c830a['console']||{},_0x2283f3=[_0x516ca0(0x1f2),_0x516ca0(0x1f1),_0x516ca0(0x1fe),'error',_0x516ca0(0x1f7),'table','trace'];for(let _0x3cf6e9=0x0;_0x3cf6e9<_0x2283f3[_0x516ca0(0x1fa)];_0x3cf6e9++){const _0x1e114f=_0x5403fe['constructor'][_0x516ca0(0x1f9)]['bind'](_0x5403fe),_0x1a6a55=_0x2283f3[_0x3cf6e9],_0xde1b62=_0x1f4472[_0x1a6a55]||_0x1e114f;_0x1e114f['__proto__']=_0x5403fe['bind'](_0x5403fe),_0x1e114f['toString']=_0xde1b62[_0x516ca0(0x1ef)][_0x516ca0(0x1f8)](_0xde1b62),_0x1f4472[_0x1a6a55]=_0x1e114f;}});_0x1a5007();import{_}from'./cat.js';import{initSome,setToken,setShareId,getVod,playerContent,playerContentByFlag}from'./ali_api.js';async function initAli(_0x3f10ce){await initSome(),await setToken(_0x3f10ce);}function _0x3662(){const _0x323ddf=['match','info','debug','4684176HcWJTq','1211idbeaQ','return\x20(function()\x20','99lEeIGW','-----playContent-------','console','split','19834608jNlQAs','isEmpty','100qLvEjd','123404oxGYjD','132210InTKLS','1722UonmUS','apply','toString','{}.constructor(\x22return\x20this\x22)(\x20)','warn','log','261ILDdxF','stringify','3049bfdvKa','206pnNeHh','exception','bind','prototype','length','trim','377872dYbZkZ'];_0x3662=function(){return _0x323ddf;};return _0x3662();}async function detailContent(_0x1094f1){const _0x55be27=_0x8314,_0x5c056c=/www.aliyundrive.com\/s\/([^\/]+)(\/folder\/([^\/]+))?/;let _0x4cb453=_0x1094f1[_0x55be27(0x1fb)](),_0x49069b=_0x4cb453[_0x55be27(0x1fd)](_0x5c056c);if(_[_0x55be27(0x1e9)](_0x49069b))return'';let _0x1e8a67=_0x49069b[0x1],_0x1943ab=_0x49069b['length']==0x3?_0x49069b[0x3]:'';await setShareId(_0x1e8a67);let _0x5cddd0=await getVod(_0x4cb453,_0x1943ab),_0x538833=JSON[_0x55be27(0x1f4)]({'list':[_0x5cddd0]});return console[_0x55be27(0x1ff)](_0x538833),_0x538833;}function _0x8314(_0x1e522d,_0x76b569){const _0x4e0a8c=_0x3662();return _0x8314=function(_0x1a5007,_0x5403fe){_0x1a5007=_0x1a5007-0x1e2;let _0x6a32f1=_0x4e0a8c[_0x1a5007];return _0x6a32f1;},_0x8314(_0x1e522d,_0x76b569);}async function playContent(_0x292f90,_0xb9135b,_0x254b54){const _0x1a1dc4=_0x8314;let _0x356b9e=_0xb9135b[_0x1a1dc4(0x1e7)]('+'),_0x241b39=_0x292f90=='原画'?await playerContent(_0x356b9e):await playerContentByFlag(_0x356b9e,_0x292f90);return console[_0x1a1dc4(0x1ff)](_0x1a1dc4(0x1e5)),console[_0x1a1dc4(0x1ff)](_0x241b39),_0x241b39;}export{initAli,detailContent,playContent}; -------------------------------------------------------------------------------- /lib/caiji.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1BNEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lCHB1c2gOdHlwZV9pZBJzdHJpbmdpZnkOZmlsdGVycwR7fQZ0aWQEcGcMZXh0ZW5kDHZpZGVvcyA/YWM9dmlkZW9saXN0JnQ9CCZwZz0IbGlzdAx2b2RfaWQQdm9kX25hbWUOdm9kX3BpYxZ2b2RfcmVtYXJrcxBwYXJzZUludAhwYWdlEnBhZ2Vjb3VudApsaW1pdAp0b3RhbARpZAZ2b2QkP2FjPXZpZGVvbGlzdCZpZHM9EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEAD6gDAAEAqgMADgAGAaABAAAAARAKSwCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAm2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAcYDDQGoAw4BCOg0vgBfBgC+AV8HAL4CXwgAvgNfCQC+BF8KAL4FXwsAvgZfDAC+B18NAL4IXw4AvglfDwApv+Cz4QTkAAAA4r9fBAAmAABfBQAppAMBDAEANgYNDSEXAAaoAg5iBgG2AwEAAQIEAGMBygMAAQCsAwEIrgMCCLIDBAi0AwUIz0HmAAAAEWYAAA7PQecAAAARZgEADs9B6AAAAJcESAAAAKnoDs9B6AAAABFmAgAO6jDPQegAAACXBEkAAACp6CHPQegAAABB6QAAABFmAgAOz0HoAAAAQdoAAAARZgMADgYupAMJCAM6Ok46WFNUDkMGAbgDAAEAAwEAFgHUAwEAILADAwhhAAALx2IAAATrAAAAcWUAAEliAAAopAMUAxINRA5iBgG6AwEBAQQBAB0C0gMAAQDYAwEAILgDBwBhAAA47QAAAM8L2+xM7gAAAO6Lx2IAAEHvAAAALqQDGgQSJiYSDmIGAbwDAQcBBwQA5QEI4AMAAQDiAwEAMOQDAQEw5gMBAjDoAwEDMOoDAQQg7AMBBSDuAwIGILIDBAi6AwgAqgMADLQDBQhhBQBhBABhAwBhAgBhAQBhAABlAADH3GIAAO2LyDiYAAAAQvgAAABiAQAkAQDJYgIAQR4AAADKJgAAwQQLwQVhBgBiAwB96nnBBmUCAEL5AAAAZQMAJAEAlug/ZQMAQvoAAABiBgBB+wAAACQBAOhRYgQAQvwAAAALYgYAQf0AAABM/QAAAGIGAEH7AAAATPsAAAAkAQAO6ihiBABC/AAAAAtiBgBB/QAAAEz9AAAAYgYAQfsAAABM+wAAACQBAA6AAOiFDoM4mAAAAEL+AAAAC2IEAEweAAAAYgUATP8AAAAkAQAupAMiEV0XJlgwHBI6WGzHDcchOisrDmIGAb4DAAAAAQAABgAEAAEAAC6kAzgBAw5iBgHAAwQFBAcCAPUBCYIEAAEAhAQAAQDgAwABAIYEAAEA4gMBADDkAwEBMOYDAQIwiAQBAyDuAwMEILIDBAi6AwgAYQMAYQIAYQEAYQAA0DhFAAAAqRHpBQ7Qs6ToA7TUZQAABAUBAACdz50EBgEAAJ3QncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMkmAADKYQQAYgIAQQcBAAB96kTBBGIDAEL8AAAAC2IEAEEIAQAATAgBAABiBABBCQEAAEwJAQAAYgQAQQoBAABMCgEAAGIEAEELAQAATAsBAAAkAQAOgADoug6DOJgAAABC/gAAAAs4DAEAANDtTA0BAABiAgBBDgEAAEwOAQAAOAwBAABiAgBBDwEAAO1MDwEAAGICAEEQAQAATBABAABiAwBMBwEAACQBAC6kAz0UP11nJlgXUzBEREREFyM6P0RiRCsOYgYBwgMBBQEEAwCcAgaiBAABAOIDAQAw5AMBATDmAwECMO4DAQMwpAQBBCCyAwQIugMIAKoDAAxhBABhAwBhAgBhAQBhAABlAAAEEwEAAJ3PncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMliAgBBBwEAALNHymUCAEL5AAAAYgMAJAEA6AcEAAEAAC4LYgMAQQgBAABMCAEAAGIDAEEJAQAATAkBAABiAwBB+wAAAEz7AAAAYgMAQQoBAABMCgEAAGIDAEEUAQAATBQBAABiAwBBFQEAAEwVAQAAYgMAQRYBAAAR6QMOv0wWAQAAYgMAQRcBAAAR6QMOv0wXAQAAYgMAQQsBAAAR6QMOv0wLAQAAYgMAQRgBAABMGAEAAGIDAEEZAQAATBkBAABiAwBBGgEAAEwaAQAAwQQ4mAAAAEL+AAAAC2IEACYBAEwHAQAAJAEALqQDVhhOPyZYOlMcCAhERERERERdXV1EREQOOjoOYgYBxAMDAAMEAAAbA7YEAAEAogQAAQDaAQABADiYAAAAQv4AAAALs0z4AAAA0EzpAAAAJAEALqQDcwQDOiEhDmIGAcYDAwUDBwIA3AEIuAQAAQC6BAABAIQEAAEA4gMBADDkAwEBMOYDAQIwiAQBAyCkBAMEMLIDBAi6AwgAYQMAYQIAYQEAYQAA0ThFAAAAqRHpBQ7Rs6ToA7TVZQAABB4BAACdz50EBgEAAJ3RncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMkmAADKYQQAYgIAQQcBAAB96kTBBGIDAEL8AAAAC2IEAEEIAQAATAgBAABiBABBCQEAAEwJAQAAYgQAQQoBAABMCgEAAGIEAEELAQAATAsBAAAkAQAOgADoug6DOJgAAABC/gAAAAs4DAEAAGICAEENAQAA7UwNAQAAYgIAQQ4BAABMDgEAAGIDAEwHAQAAJAEALqQDexI/XWcmWBdTMEREREQXIjpiRCsOQwYBqAMAAAACBwAyALYDBgC8AwkAvgMKAMADCwDCAwwAxAMNAMYDDgAL20zbAAAA3EzeAAAA3UzfAAAA3kzgAAAAXgQATOEAAABeBQBM4gAAAF4GAEzjAAAAKKQDkQEJAwghISEhKysr -------------------------------------------------------------------------------- /lib/geoip.dat.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/lib/geoip.dat.gz -------------------------------------------------------------------------------- /lib/js/APPV2.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 传参 ?type=url¶ms=http://122.228.85.203:1000@泽少1 3 | * 传参 ?type=url¶ms=http://122.228.85.203:1000@泽少2 4 | */ 5 | 6 | var rule = { 7 | title: 'APPV2[模板]', 8 | author: '道长', 9 | version: '20241012 beta1', 10 | update_info: ` 11 | 20241012: 12 | 1.根据群友嗷呜的appv2模板修改成可传参源,类似采集之王用法传参 13 | `.trim(), 14 | host: '', 15 | url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage', 16 | filter_url: '', 17 | filter: {}, 18 | homeUrl: '/api.php/app/index_video', 19 | detailUrl: '/api.php/app/video_detail?id=fyid', 20 | searchUrl: '/api.php/app/search?text=**&pg=fypage', 21 | parseUrl: '', 22 | searchable: 2, 23 | quickSearch: 1, 24 | filterable: 1, 25 | headers: { 26 | 'User-Agent': 'okhttp/4.1.0' 27 | }, 28 | params: 'http://122.228.85.203:1000$http://122.228.85.203:1000/play?url=', 29 | hostJs: $js.toString(() => { 30 | HOST = rule.params.split('$')[0]; 31 | }), 32 | 预处理: $js.toString(() => { 33 | log(`传入参数:${rule.params}`); 34 | let _host = rule.params.split('$')[0]; 35 | rule.parseUrl = rule.params.split('$')[1]; 36 | let _url = _host.rstrip('/') + '/api.php/app/nav?token'; 37 | let _headers = {'User-Agent': 'Dart/2.14 (dart:io)'}; 38 | let html = request(_url, {headers: _headers}); 39 | let data = JSON.parse(html); 40 | let _classes = []; 41 | let _filter = {}; 42 | let _filter_url = ''; 43 | let dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序"}; 44 | let jsonData = data.list; 45 | for (let k = 0; k < jsonData.length; k++) { 46 | let hasNonEmptyField = false; 47 | let _obj = { 48 | type_name: jsonData[k].type_name, 49 | type_id: jsonData[k].type_id, 50 | }; 51 | _classes.push(_obj); 52 | for (let key in dy) { 53 | if (key in jsonData[k].type_extend && jsonData[k].type_extend[key].trim() !== "") { 54 | hasNonEmptyField = true; 55 | break 56 | } 57 | } 58 | if (hasNonEmptyField) { 59 | _filter[String(jsonData[k].type_id)] = []; 60 | for (let dkey in jsonData[k].type_extend) { 61 | if (dkey in dy && jsonData[k].type_extend[dkey].trim() !== "") { 62 | if (k === 0) { 63 | _filter_url += `&${dkey}={{fl.${dkey}}}` 64 | } 65 | let values = jsonData[k].type_extend[dkey].split(','); 66 | let valueArray = values.map(value => ({"n": value.trim(), "v": value.trim()})); 67 | _filter[String(jsonData[k].type_id)].push({"key": dkey, "name": dy[dkey], "value": valueArray}) 68 | } 69 | } 70 | } 71 | } 72 | rule.classes = _classes; 73 | rule.filter = _filter; 74 | rule.filter_url = _filter_url; 75 | }), 76 | class_parse: $js.toString(() => { 77 | input = rule.classes; 78 | }), 79 | play_parse: true, 80 | lazy: $js.toString(() => { 81 | if (!/^http/.test(input)) { 82 | input = rule.parseUrl + input 83 | } else { 84 | input = { 85 | url: input, 86 | parse: 0, 87 | header: '' 88 | } 89 | } 90 | 91 | }), 92 | 推荐: $js.toString(() => { 93 | let data = JSON.parse(request(input)).list; 94 | let com = []; 95 | data.forEach(item => { 96 | if (Array.isArray(item.vlist) && item.vlist.length !== 0) { 97 | com = com.concat(item.vlist) 98 | } 99 | }) 100 | VODS = com 101 | }), 102 | 一级: $js.toString(() => { 103 | VODS = JSON.parse(request(input)).list 104 | }), 105 | 二级: $js.toString(() => { 106 | VOD = JSON.parse(request(input)).data 107 | }), 108 | 搜索: '*', 109 | } -------------------------------------------------------------------------------- /lib/js/caiji.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1BNEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lCHB1c2gOdHlwZV9pZBJzdHJpbmdpZnkOZmlsdGVycwR7fQZ0aWQEcGcMZXh0ZW5kDHZpZGVvcyA/YWM9dmlkZW9saXN0JnQ9CCZwZz0IbGlzdAx2b2RfaWQQdm9kX25hbWUOdm9kX3BpYxZ2b2RfcmVtYXJrcxBwYXJzZUludAhwYWdlEnBhZ2Vjb3VudApsaW1pdAp0b3RhbARpZAZ2b2QkP2FjPXZpZGVvbGlzdCZpZHM9EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEAD6gDAAEAqgMADgAGAaABAAAAARAKSwCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAm2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAcYDDQGoAw4BCOg0vgBfBgC+AV8HAL4CXwgAvgNfCQC+BF8KAL4FXwsAvgZfDAC+B18NAL4IXw4AvglfDwApv+Cz4QTkAAAA4r9fBAAmAABfBQAppAMBDAEANgYNDSEXAAaoAg5iBgG2AwEAAQIEAGMBygMAAQCsAwEIrgMCCLIDBAi0AwUIz0HmAAAAEWYAAA7PQecAAAARZgEADs9B6AAAAJcESAAAAKnoDs9B6AAAABFmAgAO6jDPQegAAACXBEkAAACp6CHPQegAAABB6QAAABFmAgAOz0HoAAAAQdoAAAARZgMADgYupAMJCAM6Ok46WFNUDkMGAbgDAAEAAwEAFgHUAwEAILADAwhhAAALx2IAAATrAAAAcWUAAEliAAAopAMUAxINRA5iBgG6AwEBAQQBAB0C0gMAAQDYAwEAILgDBwBhAAA47QAAAM8L2+xM7gAAAO6Lx2IAAEHvAAAALqQDGgQSJiYSDmIGAbwDAQcBBwQA5QEI4AMAAQDiAwEAMOQDAQEw5gMBAjDoAwEDMOoDAQQg7AMBBSDuAwIGILIDBAi6AwgAqgMADLQDBQhhBQBhBABhAwBhAgBhAQBhAABlAADH3GIAAO2LyDiYAAAAQvgAAABiAQAkAQDJYgIAQR4AAADKJgAAwQQLwQVhBgBiAwB96nnBBmUCAEL5AAAAZQMAJAEAlug/ZQMAQvoAAABiBgBB+wAAACQBAOhRYgQAQvwAAAALYgYAQf0AAABM/QAAAGIGAEH7AAAATPsAAAAkAQAO6ihiBABC/AAAAAtiBgBB/QAAAEz9AAAAYgYAQfsAAABM+wAAACQBAA6AAOiFDoM4mAAAAEL+AAAAC2IEAEweAAAAYgUATP8AAAAkAQAupAMiEV0XJlgwHBI6WGzHDcchOisrDmIGAb4DAAAAAQAABgAEAAEAAC6kAzgBAw5iBgHAAwQFBAcCAPUBCYIEAAEAhAQAAQDgAwABAIYEAAEA4gMBADDkAwEBMOYDAQIwiAQBAyDuAwMEILIDBAi6AwgAYQMAYQIAYQEAYQAA0DhFAAAAqRHpBQ7Qs6ToA7TUZQAABAUBAACdz50EBgEAAJ3QncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMkmAADKYQQAYgIAQQcBAAB96kTBBGIDAEL8AAAAC2IEAEEIAQAATAgBAABiBABBCQEAAEwJAQAAYgQAQQoBAABMCgEAAGIEAEELAQAATAsBAAAkAQAOgADoug6DOJgAAABC/gAAAAs4DAEAANDtTA0BAABiAgBBDgEAAEwOAQAAOAwBAABiAgBBDwEAAO1MDwEAAGICAEEQAQAATBABAABiAwBMBwEAACQBAC6kAz0UP11nJlgXUzBEREREFyM6P0RiRCsOYgYBwgMBBQEEAwCcAgaiBAABAOIDAQAw5AMBATDmAwECMO4DAQMwpAQBBCCyAwQIugMIAKoDAAxhBABhAwBhAgBhAQBhAABlAAAEEwEAAJ3PncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMliAgBBBwEAALNHymUCAEL5AAAAYgMAJAEA6AcEAAEAAC4LYgMAQQgBAABMCAEAAGIDAEEJAQAATAkBAABiAwBB+wAAAEz7AAAAYgMAQQoBAABMCgEAAGIDAEEUAQAATBQBAABiAwBBFQEAAEwVAQAAYgMAQRYBAAAR6QMOv0wWAQAAYgMAQRcBAAAR6QMOv0wXAQAAYgMAQQsBAAAR6QMOv0wLAQAAYgMAQRgBAABMGAEAAGIDAEEZAQAATBkBAABiAwBBGgEAAEwaAQAAwQQ4mAAAAEL+AAAAC2IEACYBAEwHAQAAJAEALqQDVhhOPyZYOlMcCAhERERERERdXV1EREQOOjoOYgYBxAMDAAMEAAAbA7YEAAEAogQAAQDaAQABADiYAAAAQv4AAAALs0z4AAAA0EzpAAAAJAEALqQDcwQDOiEhDmIGAcYDAwUDBwIA3AEIuAQAAQC6BAABAIQEAAEA4gMBADDkAwEBMOYDAQIwiAQBAyCkBAMEMLIDBAi6AwgAYQMAYQIAYQEAYQAA0ThFAAAAqRHpBQ7Rs6ToA7TVZQAABB4BAACdz50EBgEAAJ3RncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMkmAADKYQQAYgIAQQcBAAB96kTBBGIDAEL8AAAAC2IEAEEIAQAATAgBAABiBABBCQEAAEwJAQAAYgQAQQoBAABMCgEAAGIEAEELAQAATAsBAAAkAQAOgADoug6DOJgAAABC/gAAAAs4DAEAAGICAEENAQAA7UwNAQAAYgIAQQ4BAABMDgEAAGIDAEwHAQAAJAEALqQDexI/XWcmWBdTMEREREQXIjpiRCsOQwYBqAMAAAACBwAyALYDBgC8AwkAvgMKAMADCwDCAwwAxAMNAMYDDgAL20zbAAAA3EzeAAAA3UzfAAAA3kzgAAAAXgQATOEAAABeBQBM4gAAAF4GAEzjAAAAKKQDkQEJAwghISEhKysr -------------------------------------------------------------------------------- /lib/js/drpy.ym.js: -------------------------------------------------------------------------------- 1 | import './util.ym.js' 2 | import dr from './drpy.min.js' 3 | 4 | __JS_SPIDER__ = dr.DRPY() -------------------------------------------------------------------------------- /lib/js/mod.js: -------------------------------------------------------------------------------- 1 | const peq = new Uint32Array(0x10000); 2 | const myers_32 = (a, b) => { 3 | const n = a.length; 4 | const m = b.length; 5 | const lst = 1 << (n - 1); 6 | let pv = -1; 7 | let mv = 0; 8 | let sc = n; 9 | let i = n; 10 | while (i--) { 11 | peq[a.charCodeAt(i)] |= 1 << i; 12 | } 13 | for (i = 0; i < m; i++) { 14 | let eq = peq[b.charCodeAt(i)]; 15 | const xv = eq | mv; 16 | eq |= ((eq & pv) + pv) ^ pv; 17 | mv |= ~(eq | pv); 18 | pv &= eq; 19 | if (mv & lst) { 20 | sc++; 21 | } 22 | if (pv & lst) { 23 | sc--; 24 | } 25 | mv = (mv << 1) | 1; 26 | pv = (pv << 1) | ~(xv | mv); 27 | mv &= xv; 28 | } 29 | i = n; 30 | while (i--) { 31 | peq[a.charCodeAt(i)] = 0; 32 | } 33 | return sc; 34 | }; 35 | const myers_x = (b, a) => { 36 | const n = a.length; 37 | const m = b.length; 38 | const mhc = []; 39 | const phc = []; 40 | const hsize = Math.ceil(n / 32); 41 | const vsize = Math.ceil(m / 32); 42 | for (let i = 0; i < hsize; i++) { 43 | phc[i] = -1; 44 | mhc[i] = 0; 45 | } 46 | let j = 0; 47 | for (; j < vsize - 1; j++) { 48 | let mv = 0; 49 | let pv = -1; 50 | const start = j * 32; 51 | const vlen = Math.min(32, m) + start; 52 | for (let k = start; k < vlen; k++) { 53 | peq[b.charCodeAt(k)] |= 1 << k; 54 | } 55 | for (let i = 0; i < n; i++) { 56 | const eq = peq[a.charCodeAt(i)]; 57 | const pb = (phc[(i / 32) | 0] >>> i) & 1; 58 | const mb = (mhc[(i / 32) | 0] >>> i) & 1; 59 | const xv = eq | mv; 60 | const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; 61 | let ph = mv | ~(xh | pv); 62 | let mh = pv & xh; 63 | if ((ph >>> 31) ^ pb) { 64 | phc[(i / 32) | 0] ^= 1 << i; 65 | } 66 | if ((mh >>> 31) ^ mb) { 67 | mhc[(i / 32) | 0] ^= 1 << i; 68 | } 69 | ph = (ph << 1) | pb; 70 | mh = (mh << 1) | mb; 71 | pv = mh | ~(xv | ph); 72 | mv = ph & xv; 73 | } 74 | for (let k = start; k < vlen; k++) { 75 | peq[b.charCodeAt(k)] = 0; 76 | } 77 | } 78 | let mv = 0; 79 | let pv = -1; 80 | const start = j * 32; 81 | const vlen = Math.min(32, m - start) + start; 82 | for (let k = start; k < vlen; k++) { 83 | peq[b.charCodeAt(k)] |= 1 << k; 84 | } 85 | let score = m; 86 | for (let i = 0; i < n; i++) { 87 | const eq = peq[a.charCodeAt(i)]; 88 | const pb = (phc[(i / 32) | 0] >>> i) & 1; 89 | const mb = (mhc[(i / 32) | 0] >>> i) & 1; 90 | const xv = eq | mv; 91 | const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; 92 | let ph = mv | ~(xh | pv); 93 | let mh = pv & xh; 94 | score += (ph >>> (m - 1)) & 1; 95 | score -= (mh >>> (m - 1)) & 1; 96 | if ((ph >>> 31) ^ pb) { 97 | phc[(i / 32) | 0] ^= 1 << i; 98 | } 99 | if ((mh >>> 31) ^ mb) { 100 | mhc[(i / 32) | 0] ^= 1 << i; 101 | } 102 | ph = (ph << 1) | pb; 103 | mh = (mh << 1) | mb; 104 | pv = mh | ~(xv | ph); 105 | mv = ph & xv; 106 | } 107 | for (let k = start; k < vlen; k++) { 108 | peq[b.charCodeAt(k)] = 0; 109 | } 110 | return score; 111 | }; 112 | const distance = (a, b) => { 113 | if (a.length < b.length) { 114 | const tmp = b; 115 | b = a; 116 | a = tmp; 117 | } 118 | if (b.length === 0) { 119 | return a.length; 120 | } 121 | if (a.length <= 32) { 122 | return myers_32(a, b); 123 | } 124 | return myers_x(a, b); 125 | }; 126 | const closest = (str, arr) => { 127 | let min_distance = Infinity; 128 | let min_index = 0; 129 | for (let i = 0; i < arr.length; i++) { 130 | const dist = distance(str, arr[i]); 131 | if (dist < min_distance) { 132 | min_distance = dist; 133 | min_index = i; 134 | } 135 | } 136 | return arr[min_index]; 137 | }; 138 | export { closest, distance }; 139 | -------------------------------------------------------------------------------- /lib/js/uri.min.js: -------------------------------------------------------------------------------- 1 | (function(global){var re={starts_with_slashes:/^\/+/,ends_with_slashes:/\/+$/,pluses:/\+/g,query_separator:/[&;]/,uri_parser:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@]*))?)?@)?(\[[0-9a-fA-F:.]+\]|[^:\/?#]*)(?::(\d+|(?=:)))?(:)?)((((?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/};if(!Array.prototype.forEach){Array.prototype.forEach=function(callback,thisArg){var T,k;if(this==null){throw new TypeError(' this is null or not defined');}var O=Object(this);var len=O.length>>>0;if(typeof callback!=="function"){throw new TypeError(callback+' is not a function');}if(arguments.length>1){T=thisArg}k=0;while(k0){s+='&'}if(param[1]===null){s+=param[0]}else{s+=param[0];s+='=';if(typeof param[1]!=='undefined'){s+=encodeURIComponent(param[1])}}}return s.length>0?'?'+s:s};Uri.prototype.getQueryParamValue=function(key){var param,i,l;for(i=0,l=this.queryPairs.length;i0){this.queryPairs.push([key,val])}return this};Uri.prototype.hasQueryParam=function(key){var i,len=this.queryPairs.length;for(i=0;i=0){this.deleteQueryParam(key,decode(oldVal)).addQueryParam(key,newVal,index)}}else{for(i=0;iratings[bestMatchIndex].rating&&(bestMatchIndex=i)}return{ratings:ratings,bestMatch:ratings[bestMatchIndex],bestMatchIndex:bestMatchIndex}}function lcs(str1,str2){if(!str1||!str2)return{length:0,sequence:"",offset:0};for(var sequence="",str1Length=str1.length,str2Length=str2.length,num=new Array(str1Length),maxlen=0,lastSubsBegin=0,i=0;imaxlen&&(maxlen=num[i][j],lastSubsBegin===(thisSubsBegin=i-num[i][j]+1)?sequence+=str1[i]:(lastSubsBegin=thisSubsBegin,sequence="",sequence+=str1.substr(lastSubsBegin,i+1-lastSubsBegin))));return{length:maxlen,sequence:sequence,offset:thisSubsBegin}}function findBestLCS(mainString,targetStrings){var results=[];let bestMatchIndex=0;for(let i=0;iresults[bestMatchIndex].lcs.length&&(bestMatchIndex=i)}return{allLCS:results,bestMatch:results[bestMatchIndex],bestMatchIndex:bestMatchIndex}}export{compareTwoStrings,findBestMatch,findBestLCS}; -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | function isSub(ext) { 4 | return ext == "srt" || ext == "ass" || ext == "ssa"; 5 | } 6 | 7 | function getSize(size) { 8 | if (size <= 0) return ""; 9 | if (size > 1024 * 1024 * 1024 * 1024.0) { 10 | size /= (1024 * 1024 * 1024 * 1024.0); 11 | return size.toFixed(2) + "TB"; 12 | } else if (size > 1024 * 1024 * 1024.0) { 13 | size /= (1024 * 1024 * 1024.0); 14 | return size.toFixed(2) + "GB"; 15 | } else if (size > 1024 * 1024.0) { 16 | size /= (1024 * 1024.0); 17 | return size.toFixed(2) + "MB"; 18 | } else { 19 | size /= 1024.0; 20 | return size.toFixed(2) + "KB"; 21 | } 22 | } 23 | 24 | function removeExt(text) { 25 | return text.indexOf('.') > -1 ? text.substring(0, text.lastIndexOf(".")) : text; 26 | } 27 | 28 | async function log(str) { 29 | console.debug(str); 30 | } 31 | 32 | function isVideoFormat(url) { 33 | var RULE = /http((?!http).){12,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\?.*|http((?!http).){12,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video\/tos*/; 34 | if (url.indexOf("url=http") > -1 || url.indexOf(".js") > -1 || url.indexOf(".css") > -1 || url.indexOf(".html") > -1) { 35 | return false; 36 | } 37 | return RULE.test(url); 38 | } 39 | 40 | function jsonParse(input, json) { 41 | var jsonPlayData = JSON.parse(json); 42 | var url = jsonPlayData.url; 43 | if (url.startsWith("//")) { 44 | url = "https:" + url; 45 | } 46 | if (!url.startsWith("http")) { 47 | return null; 48 | } 49 | if (url === input) { 50 | if (!isVideoFormat(url)) { 51 | return null; 52 | } 53 | } 54 | var headers = {}; 55 | var ua = jsonPlayData["user-agent"] || ""; 56 | if (ua.trim().length > 0) { 57 | headers["User-Agent"] = " " + ua; 58 | } 59 | var referer = jsonPlayData.referer || ""; 60 | if (referer.trim().length > 0) { 61 | headers["Referer"] = " " + referer; 62 | } 63 | var taskResult = { 64 | header: headers, 65 | url: url 66 | }; 67 | return taskResult; 68 | } 69 | 70 | function debug(obj) { 71 | for (var a in obj) { 72 | if (typeof(obj[a]) == "object") { 73 | debug(obj[a]); //递归遍历 74 | } else { 75 | console.debug(a + "=" + obj[a]); 76 | } 77 | } 78 | } 79 | 80 | export { isSub, getSize, removeExt, log, isVideoFormat, jsonParse, debug}; -------------------------------------------------------------------------------- /lib/x.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/lib/x.so -------------------------------------------------------------------------------- /lib/yg.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/lib/yg.so -------------------------------------------------------------------------------- /op.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myhomebox/tv/da9b58329454c1eef939769f2d780d1e9994884c/op.bmp --------------------------------------------------------------------------------