Compare commits
71 Commits
c618963c86
...
a058039c23
Author | SHA1 | Date |
---|---|---|
![]() |
a058039c23 | |
![]() |
c4a7bd4a40 | |
![]() |
25cd14f1cd | |
![]() |
050c3b0e3d | |
![]() |
83cebbc6b8 | |
![]() |
e6a8fb7e7a | |
![]() |
25f26aaa32 | |
![]() |
5f5f76d2bb | |
![]() |
888a8cbf46 | |
![]() |
91a899b97f | |
![]() |
ef7d39fe95 | |
![]() |
635a6555b3 | |
![]() |
55d4dad518 | |
![]() |
2468a1f6bd | |
![]() |
e60e1f8375 | |
![]() |
c0f47bead1 | |
![]() |
cb0850d024 | |
![]() |
d8c63982cf | |
![]() |
1c82a6db5a | |
![]() |
665619ba47 | |
![]() |
f7f31138da | |
![]() |
7144d57ea0 | |
![]() |
5322cf08c9 | |
![]() |
bde852f456 | |
![]() |
845131b4c9 | |
![]() |
b68c8a713b | |
![]() |
5580477f24 | |
![]() |
ad3cbcd1b7 | |
![]() |
fd6a29ebfa | |
![]() |
b89d73a354 | |
![]() |
dbdd0f6671 | |
![]() |
93caec3ce7 | |
![]() |
9957c8fcb7 | |
![]() |
e115f163b8 | |
![]() |
2dfcb797ff | |
![]() |
031dc10fea | |
![]() |
cab1ea79ef | |
![]() |
862b3dbce4 | |
![]() |
926c21e564 | |
![]() |
56a7c1f838 | |
![]() |
27d20ee298 | |
![]() |
d5c878db61 | |
![]() |
6f253e74c8 | |
![]() |
23267ad500 | |
![]() |
36bb751090 | |
![]() |
6420553aea | |
![]() |
78abae83b2 | |
![]() |
1edcf5a8d2 | |
![]() |
b4ecf74955 | |
![]() |
8fd613226a | |
![]() |
09ee641a27 | |
![]() |
6cb828449b | |
![]() |
d7aabb9348 | |
![]() |
4c12aac5af | |
![]() |
deb7422666 | |
![]() |
cea240c9d9 | |
![]() |
f05833bb48 | |
![]() |
b51c0c2edf | |
![]() |
fbe13ddca6 | |
![]() |
ccd3d903d7 | |
![]() |
963076a56f | |
![]() |
adff7c54be | |
![]() |
7d5a53bbe7 | |
![]() |
beb30d152f | |
![]() |
ce9c4bea69 | |
![]() |
ea02909463 | |
![]() |
effdabf261 | |
![]() |
bb624b734f | |
![]() |
a866fd88eb | |
![]() |
40cdb6cd66 | |
![]() |
3ed2de8d1b |
BIN
JN/N3RD/J/pg.jar
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -1 +1 @@
|
|||
8a3a79e39b2d2926a0f67bafcaad3baf
|
||||
8c31b45807b1fad683089f53decabaf0
|
||||
|
|
|
@ -1 +1 @@
|
|||
ff5d8f0029bbbd7ef8bb6e9eecc345ab
|
||||
6756a20c0bab5e28b16c17299a5d3b9c
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
{"name":"雷蒙推荐 APPS",
|
||||
"list":[
|
||||
{"name":"OurTV","url":"https://cors.isteed.cc/https://github.com/andandroidor/ourtv/releases/download/3.8.0/OurTV_3.8.0_android_tv_no_webview_no_textureview.apk","version":"3.8.0","icon":"http://pic.baobeiy.com/up/2024-9/202499813206306.png"},
|
||||
{"name":"OurTV","url":"https://cors.isteed.cc/https://raw.githubusercontent.com/n3rddd/MARKET/refs/heads/main/APP/OurTV_3.9.5_android_tv.apk","version":"3.9.5","icon":"http://pic.baobeiy.com/up/2024-9/202499813206306.png"},
|
||||
{"name":"WebViewTV","url":"https://cors.isteed.cc/https://raw.githubusercontent.com/n3rddd/MARKET/refs/heads/main/APP/WebViewTV_1.10.10.apk","version":"1.10.10","icon":"https://cors.isteed.cc/https://raw.githubusercontent.com/hxh19950701/WebViewTvLive/refs/heads/main/app/src/main/res/drawable/ic_launcher.png"},
|
||||
{"name":"HTV","url":"https://cors.isteed.cc/https://github.com/HTWMedia/HTV/releases/download/v3.5/HTV-v3.5.0.apk","version":"3.5.0","icon":"https://cors.isteed.cc/https://raw.githubusercontent.com/HTWMedia/HTV/refs/heads/main/android/app/src/main/play_store_512.png"},
|
||||
{"name":"天光云影","url":"https://cors.isteed.cc/https://raw.githubusercontent.com/n3rddd/MARKET/refs/heads/main/APP/tv-3.3.9-all-sdk21-original.apk","version":"3.3.9","icon":"https://itopdog.xyxza.com/gameggg/imgfile/20241107/07154337hlir.png"},
|
||||
|
|
|
@ -11,17 +11,17 @@
|
|||
"vip_thread_limit_night":"19-23=10",
|
||||
"vod_flags":"4kz|auto",
|
||||
"quark_thread_limit":32,
|
||||
"quark_thread_limit_night":"19-23=10",
|
||||
"quark_thread_limit_night":"19-23=16",
|
||||
"quark_is_guest":false,
|
||||
"quark_vip_thread_limit":32,
|
||||
"quark_vip_thread_limit_night":"19-23=10",
|
||||
"quark_vip_thread_limit_night":"19-23=16",
|
||||
"quark_flags":"4kz|auto",
|
||||
"uc_thread_limit":10,
|
||||
"uc_is_vip":false,
|
||||
"uc_vip_thread_limit":10,
|
||||
"uc_flags":"4kz|auto",
|
||||
"uc_thread_limit_night":"19-23=10",
|
||||
"uc_vip_thread_limit_night":"19-23=10",
|
||||
"uc_thread_limit_night":"19-23=8",
|
||||
"uc_vip_thread_limit_night":"19-23=8",
|
||||
"thunder_thread_limit":2,
|
||||
"thunder_is_vip":false,
|
||||
"thunder_vip_thread_limit":2,
|
||||
|
@ -92,5 +92,6 @@
|
|||
"pan123_flags":"4kz",
|
||||
"pan189_username":"",
|
||||
"pan189_password":"",
|
||||
"pan189_flags":"4kz"
|
||||
"pan189_flags":"4kz",
|
||||
"uc_ut":""
|
||||
}
|
||||
|
|
|
@ -11,17 +11,17 @@
|
|||
"vip_thread_limit_night":"19-23=10",
|
||||
"vod_flags":"4kz|auto",
|
||||
"quark_thread_limit":32,
|
||||
"quark_thread_limit_night":"19-23=10",
|
||||
"quark_thread_limit_night":"19-23=16",
|
||||
"quark_is_guest":false,
|
||||
"quark_vip_thread_limit":32,
|
||||
"quark_vip_thread_limit_night":"19-23=10",
|
||||
"quark_vip_thread_limit_night":"19-23=16",
|
||||
"quark_flags":"4kz|auto",
|
||||
"uc_thread_limit":10,
|
||||
"uc_is_vip":false,
|
||||
"uc_vip_thread_limit":10,
|
||||
"uc_flags":"4kz|auto",
|
||||
"uc_thread_limit_night":"19-23=10",
|
||||
"uc_vip_thread_limit_night":"19-23=10",
|
||||
"uc_thread_limit_night":"19-23=8",
|
||||
"uc_vip_thread_limit_night":"19-23=8",
|
||||
"thunder_thread_limit":2,
|
||||
"thunder_is_vip":false,
|
||||
"thunder_vip_thread_limit":2,
|
||||
|
|
|
@ -0,0 +1,263 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# by @嗷呜
|
||||
# 基于原作者 @嗷呜 版本修改,仅可用于个人学习用途
|
||||
|
||||
from base.spider import Spider
|
||||
from urllib.parse import urlparse, urlencode
|
||||
import re,sys,time,json,urllib3,hashlib,datetime
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
sys.path.append('..')
|
||||
|
||||
class Spider(Spider):
|
||||
headers,api,apisignkey,datasignkey = {'User-Agent': 'okhttp/4.12.0',},'', '' , ''
|
||||
|
||||
def init(self, extend=""):
|
||||
ext = extend.rstrip()
|
||||
if ext.startswith('http'):
|
||||
self.api = ext.rstrip('/')
|
||||
else:
|
||||
arr = json.loads(ext)
|
||||
self.api = arr['api'].rstrip('/')
|
||||
self.apisignkey = arr.get('apisignkey', '')
|
||||
if self.apisignkey:
|
||||
self.datasignkey = arr.get('datasignkey', '6QQNUsP3PkD2ajJCPCY8')
|
||||
|
||||
def homeContent(self, filter):
|
||||
if self.api.endswith('v1.vod'):
|
||||
path = '/types'
|
||||
if self.apisignkey and self.datasignkey:
|
||||
path = self.datasign(path)
|
||||
data = self.fetch(f"{self.api}{path}", headers=self.headers, verify=False).json()
|
||||
data = data['data']
|
||||
else:
|
||||
data = self.fetch(f"{self.api}/nav?token=", headers=self.headers, verify=False).json()
|
||||
keys = ["class", "area", "lang", "year", "letter", "by", "sort"]
|
||||
filters = {}
|
||||
classes = []
|
||||
for item in data.get('list',data.get('data',[])):
|
||||
has_non_empty_field = False
|
||||
jsontype_extend = item["type_extend"]
|
||||
classes.append({"type_name": item["type_name"], "type_id": item["type_id"]})
|
||||
for key in keys:
|
||||
if key in jsontype_extend and jsontype_extend[key].strip() != "":
|
||||
has_non_empty_field = True
|
||||
break
|
||||
if has_non_empty_field:
|
||||
filters[str(item["type_id"])] = []
|
||||
for dkey in jsontype_extend:
|
||||
if dkey in keys and jsontype_extend[dkey].strip() != "":
|
||||
values = jsontype_extend[dkey].split(",")
|
||||
value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
|
||||
value.strip() != ""]
|
||||
filters[str(item["type_id"])].append({"key": dkey, "name": dkey, "value": value_array})
|
||||
result = {"class": classes, "filters": filters}
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
if self.api.endswith('v1.vod'):
|
||||
path = '/vodPhbAll'
|
||||
if self.apisignkey and self.datasignkey:
|
||||
keytime = self.keytime()
|
||||
path += self.datasign(f'?apikey={self.apikey()}&keytime={keytime}',keytime)
|
||||
data = self.fetch(f"{self.api}{path}", headers=self.headers, verify=False).json()
|
||||
data = data['data']
|
||||
else:
|
||||
data = self.fetch(f"{self.api}/index_video?token=", headers=self.headers, verify=False).json()
|
||||
videos = []
|
||||
if self.api.endswith('v1.vod'):
|
||||
for item in data['list']: videos.extend(item['vod_list'])
|
||||
elif 'list' in data:
|
||||
for item in data['list']: videos.extend(item['vlist'])
|
||||
elif 'data' in data:
|
||||
for item in data['data']: videos.extend(item['vlist'])
|
||||
return {'list': videos}
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
if self.api.endswith('v1.vod'):
|
||||
path = f"?type={tid}&class={extend.get('class', '')}&lang={extend.get('lang', '')}&area={extend.get('area', '')}&year={extend.get('year', '')}&by=&page={pg}&limit=9"
|
||||
if self.apisignkey and self.datasignkey:
|
||||
keytime = self.keytime()
|
||||
path = self.datasign(f'{path}&apikey={self.apikey()}&keytime={keytime}' ,keytime)
|
||||
data = self.fetch(f"{self.api}{path}", headers=self.headers, verify=False).json()
|
||||
data = data['data']
|
||||
else:
|
||||
params = {'tid': tid, 'class': extend.get('class', ''), 'area': extend.get('area', ''), 'lang': extend.get('lang', ''), 'year': extend.get('year', ''), 'limit': '18', 'pg': pg}
|
||||
data = self.fetch(f"{self.api}/video", params=params, headers=self.headers, verify=False).json()
|
||||
if 'data' in data:
|
||||
data = {'list':data['data']}
|
||||
return data
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
if self.api.endswith('v1.vod'):
|
||||
path = f"?page={pg}&limit=10&wd={key}"
|
||||
if self.apisignkey and self.datasignkey:
|
||||
keytime = self.keytime()
|
||||
path = self.datasign(f'{path}&apikey={self.apikey()}&keytime={keytime}',keytime)
|
||||
else:
|
||||
path = f"/search?text={key}&pg={pg}"
|
||||
data = self.fetch(f"{self.api}{path}", headers=self.headers, verify=False).json()
|
||||
data2 = data.get('list',data.get('data',[]))
|
||||
if 'type' in data2:
|
||||
for item in data2:
|
||||
item.pop('type', None)
|
||||
if not 'list' in data2:
|
||||
data2 = {'list': data2, 'page': pg}
|
||||
return data2
|
||||
|
||||
def detailContent(self, ids):
|
||||
if self.api.endswith('v1.vod'):
|
||||
path = f'/detail?vod_id={ids[0]}&rel_limit=10'
|
||||
if self.apisignkey and self.datasignkey:
|
||||
keytime = self.keytime()
|
||||
path = self.datasign(f'{path}&apikey={self.apikey()}&keytime={keytime}',keytime)
|
||||
data = self.fetch(f"{self.api}{path}", headers=self.headers, verify=False).json()
|
||||
else:
|
||||
data = self.fetch(f"{self.api}/video_detail?id={ids[0]}", headers=self.headers, verify=False).json()
|
||||
data = data['data']
|
||||
if 'vod_info' in data:
|
||||
data = data['vod_info']
|
||||
show = ''
|
||||
vod_play_url = ''
|
||||
if 'vod_url_with_player' in data:
|
||||
for i in data['vod_url_with_player']:
|
||||
show += i.get('name', '') + '$$$'
|
||||
parse_api = i.get('parse_api','')
|
||||
if parse_api and parse_api.startswith('http'):
|
||||
url = i.get('url','')
|
||||
if url:
|
||||
url2 = '#'.join([i+ '@' + parse_api for i in url.split('#')])
|
||||
vod_play_url += url2 + '$$$'
|
||||
else:
|
||||
vod_play_url += i.get('url','') + '$$$'
|
||||
data.pop('vod_url_with_player')
|
||||
if 'vod_play_list' in data:
|
||||
for i in data['vod_play_list']:
|
||||
parses = ''
|
||||
player_info = i['player_info']
|
||||
show += f"{player_info['show']}({i['from']})$$$"
|
||||
parse = player_info.get('parse','')
|
||||
parse2 = player_info.get('parse2','')
|
||||
if 'parse' in player_info and parse.startswith('http'):
|
||||
parses += parse + ','
|
||||
if 'parse2' in player_info and parse2.startswith('http') and parse2 != parse:
|
||||
parses += parse2
|
||||
parses = parses.rstrip(',')
|
||||
url = ''
|
||||
for j in i['urls']:
|
||||
if parse:
|
||||
url += f"{j['name']}${j['url']}@{parses}#"
|
||||
else:
|
||||
url += f"{j['name']}${j['url']}#"
|
||||
url = url.rstrip('#')
|
||||
vod_play_url += url + '$$$'
|
||||
if 'vod_play_list' in data:
|
||||
data.pop('vod_play_list')
|
||||
if 'rel_vods' in data:
|
||||
data.pop('rel_vods')
|
||||
if 'type' in data:
|
||||
data.pop('type')
|
||||
data['vod_play_from'] = show.rstrip('$$$')
|
||||
data['vod_play_url'] = vod_play_url.rstrip('$$$')
|
||||
return {'list': [data]}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
video_pattern = re.compile(r'https?:\/\/.*\.(?:m3u8|mp4|flv)')
|
||||
jx, url, ua = 0, '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'
|
||||
if '@' in id:
|
||||
rawurl, jxapi = id.split('@', 1)
|
||||
if ',' in jxapi:
|
||||
jxapis = jxapi.split(',', 1)
|
||||
else:
|
||||
jxapis = [jxapi]
|
||||
for jxapi_ in jxapis:
|
||||
try:
|
||||
res = self.fetch(f"{jxapi_}{rawurl}", headers=self.headers, timeout=10, verify=False).json()
|
||||
url = res.get('url', '')
|
||||
if url.startswith('http'):
|
||||
jxua = res.get('ua')
|
||||
if jxua:
|
||||
ua = jxua
|
||||
except Exception:
|
||||
url = ''
|
||||
continue
|
||||
if url.startswith('http'):
|
||||
jx = 0
|
||||
else:
|
||||
url = rawurl
|
||||
jx = 0 if video_pattern.match(rawurl) else 1
|
||||
else:
|
||||
url = id
|
||||
jx = 0 if video_pattern.match(id) else 1
|
||||
if url.startswith('NBY'):
|
||||
jx, url = 0, ''
|
||||
return {'jx': jx, 'parse': 0, 'url': url, 'header': {'User-Agent': ua}}
|
||||
|
||||
def keytime(self):
|
||||
return str(int(datetime.datetime.now().timestamp()))
|
||||
|
||||
def md5(self, str):
|
||||
hash_obj = hashlib.md5()
|
||||
hash_obj.update(str.encode('utf-8'))
|
||||
return hash_obj.hexdigest()
|
||||
|
||||
def apikey(self):
|
||||
date = datetime.datetime.now()
|
||||
year = str(date.year)
|
||||
hour = str(date.hour)
|
||||
minute = str(date.minute)
|
||||
|
||||
if len(hour) < 2:
|
||||
hour = "0" + hour
|
||||
if len(minute) < 2:
|
||||
minute = "0" + minute
|
||||
|
||||
str_value = self.apisignkey
|
||||
sign_str = f"{year}:{hour}:{year}:{minute}:{str_value}"
|
||||
md5_hash = self.md5(sign_str)
|
||||
return md5_hash
|
||||
|
||||
def datasign(self, url='', timestamp=''):
|
||||
parsed_url = urlparse(url)
|
||||
query_params = self._parse_query_params(parsed_url.query)
|
||||
if not timestamp:
|
||||
timestamp = str(time.time())
|
||||
query_params["timestamp"] = timestamp
|
||||
sorted_params = sorted(query_params.items(), key=lambda x: x[0])
|
||||
sign = self._generate_signature(sorted_params)
|
||||
query_params["datasign"] = sign
|
||||
new_query = urlencode(query_params)
|
||||
new_url = parsed_url._replace(query=new_query).geturl()
|
||||
return new_url
|
||||
|
||||
def _parse_query_params(self, query_str):
|
||||
params = {}
|
||||
if not query_str:
|
||||
return params
|
||||
for param in query_str.split('&'):
|
||||
if '=' not in param:
|
||||
continue
|
||||
key, value = param.split('=', 1)
|
||||
if value:
|
||||
params[key] = value
|
||||
return params
|
||||
|
||||
def _generate_signature(self, sorted_params):
|
||||
param_str = '&'.join([f"{k}={v}" for k, v in sorted_params])
|
||||
raw_sign_str = f"{param_str}{self.datasignkey}"
|
||||
md5_hash = hashlib.md5(raw_sign_str.encode('utf-8')).hexdigest()
|
||||
return md5_hash
|
||||
|
||||
def localProxy(self, param):
|
||||
pass
|
||||
|
||||
def getName(self):
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def destroy(self):
|
||||
pass
|
|
@ -0,0 +1,343 @@
|
|||
import re
|
||||
import sys
|
||||
import uuid
|
||||
import json
|
||||
import base64
|
||||
from Crypto.Cipher import AES
|
||||
from base.spider import Spider
|
||||
from Crypto.Util.Padding import pad
|
||||
from Crypto.Util.Padding import unpad
|
||||
# 移除了urlencode导入,将使用自定义方法
|
||||
|
||||
sys.path.append('..')
|
||||
|
||||
headerx = {
|
||||
'User-Agent': 'okhttp/3.10.0' # okhttp/3.14.9
|
||||
}
|
||||
|
||||
class Spider(Spider):
|
||||
global headerx
|
||||
init_data = ''
|
||||
search_verify = ''
|
||||
|
||||
def getName(self):
|
||||
return "首页"
|
||||
|
||||
def init(self, extend):
|
||||
js1=json.loads(extend)
|
||||
host = js1['host']
|
||||
if re.match(r'^https?:\/\/.*\.(txt|json)$',host):
|
||||
host = self.fetch(host, headers=headerx, timeout=10).text.rstrip('/')
|
||||
self.xurl = host + js1.get('api','/api.php/getappapi')
|
||||
self.key = js1['datakey']
|
||||
self.iv = js1.get('dataiv',self.key)
|
||||
|
||||
res = self.fetch(self.xurl + '.index/initV119', headers=headerx).json()
|
||||
encrypted_data = res['data']
|
||||
response = self.decrypt(encrypted_data)
|
||||
init_data = json.loads(response)
|
||||
self.init_data = init_data
|
||||
self.search_verify = init_data['config'].get('system_search_verify_status',False)
|
||||
|
||||
def homeContent(self, filter):
|
||||
kjson = self.init_data
|
||||
result = {"class": [], "filters": {}}
|
||||
for i in kjson['type_list']:
|
||||
if not(i['type_name'] in ['全部', 'QQ', 'juo.one'] or '企鹅群' in i['type_name']):
|
||||
result['class'].append({
|
||||
"type_id": i['type_id'],
|
||||
"type_name": i['type_name']
|
||||
})
|
||||
name_mapping = {'class': '类型', 'area': '地区', 'lang': '语言', 'year': '年份', 'sort': '排序'}
|
||||
filter_items = []
|
||||
for filter_type in i.get('filter_type_list', []):
|
||||
filter_name = filter_type.get('name')
|
||||
values = filter_type.get('list', [])
|
||||
|
||||
if not values:
|
||||
continue
|
||||
|
||||
value_list = [{"n": value, "v": value} for value in values]
|
||||
display_name = name_mapping.get(filter_name, filter_name)
|
||||
key = 'by' if filter_name == 'sort' else filter_name
|
||||
|
||||
filter_items.append({
|
||||
"key": key,
|
||||
"name": display_name,
|
||||
"value": value_list
|
||||
})
|
||||
|
||||
type_id = i.get('type_id')
|
||||
if filter_items:
|
||||
result["filters"][str(type_id)] = filter_items
|
||||
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
videos = []
|
||||
kjson = self.init_data
|
||||
for i in kjson['type_list']:
|
||||
for item in i['recommend_list']:
|
||||
vod_id = item['vod_id']
|
||||
name = item['vod_name']
|
||||
pic = item['vod_pic']
|
||||
remarks = item['vod_remarks']
|
||||
video = {
|
||||
"vod_id": vod_id,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": remarks
|
||||
}
|
||||
videos.append(video)
|
||||
return {'list': videos}
|
||||
|
||||
def categoryContent(self, cid, pg, filter, ext):
|
||||
videos = []
|
||||
payload = {
|
||||
'area': ext.get('area','全部'),
|
||||
'year': ext.get('year','全部'),
|
||||
'type_id': cid,
|
||||
'page': str(pg),
|
||||
'sort': ext.get('sort','最新'),
|
||||
'lang': ext.get('lang','全部'),
|
||||
'class': ext.get('class','全部')
|
||||
}
|
||||
url = f'{self.xurl}.index/typeFilterVodList'
|
||||
res = self.post(url=url, headers=headerx,data=payload).json()
|
||||
encrypted_data = res['data']
|
||||
kjson = self.decrypt(encrypted_data)
|
||||
kjson1 = json.loads(kjson)
|
||||
for i in kjson1['recommend_list']:
|
||||
id = i['vod_id']
|
||||
name = i['vod_name']
|
||||
pic = i['vod_pic']
|
||||
remarks = i['vod_remarks']
|
||||
video = {
|
||||
"vod_id": id,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": remarks
|
||||
}
|
||||
videos.append(video)
|
||||
return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
|
||||
|
||||
def detailContent(self, ids):
|
||||
did = ids[0]
|
||||
payload = {
|
||||
'vod_id': did,
|
||||
}
|
||||
api_endpoints = ['vodDetail', 'vodDetail2']
|
||||
|
||||
for endpoint in api_endpoints:
|
||||
url = f'{self.xurl}.index/{endpoint}'
|
||||
response = self.post(url=url, headers=headerx, data=payload)
|
||||
|
||||
if response.status_code == 200:
|
||||
response_data = response.json()
|
||||
encrypted_data = response_data['data']
|
||||
kjson1 = self.decrypt(encrypted_data)
|
||||
kjson = json.loads(kjson1)
|
||||
break
|
||||
videos = []
|
||||
play_form = ''
|
||||
play_url = ''
|
||||
|
||||
actor = kjson['vod']['vod_actor']
|
||||
director = kjson['vod'].get('vod_director', '')
|
||||
area = kjson['vod']['vod_area']
|
||||
name = kjson['vod']['vod_name']
|
||||
year = kjson['vod']['vod_year']
|
||||
content = kjson['vod']['vod_content']
|
||||
subtitle = kjson['vod']['vod_remarks']
|
||||
desc = kjson['vod']['vod_lang']
|
||||
remark = '时间:' + subtitle + ' 语言:' + desc
|
||||
for line in kjson['vod_play_list']:
|
||||
keywords = ['防走丢', '群', '防失群', 'Q','juo.one',]
|
||||
if any(keyword in line['player_info']['show'] for keyword in keywords):
|
||||
continue
|
||||
play_form += line['player_info']['show'] + '$$$'
|
||||
parse = line['player_info']['parse']
|
||||
player_parse_type = line['player_info']['player_parse_type']
|
||||
kurls = ""
|
||||
for vod in line['urls']:
|
||||
kurl = vod['url']
|
||||
if '.m3u8' in kurl:
|
||||
kurls += str(vod['name']) + '$' + vod['url'] + '#'
|
||||
else:
|
||||
if 'm3u8' not in kurl:
|
||||
token = 'token+' + vod['token']
|
||||
kurls += str(vod['name']) + '$' + parse + ',' + vod[
|
||||
'url'] + ',' + token + ',' + player_parse_type + '#'
|
||||
kurls = kurls.rstrip('#')
|
||||
play_url += kurls + '$$$'
|
||||
play_form = play_form.rstrip('$$$')
|
||||
play_url = play_url.rstrip('$$$')
|
||||
videos.append({
|
||||
"vod_id": did,
|
||||
"vod_name": name,
|
||||
"vod_actor": actor.replace('演员', ''),
|
||||
"vod_director": director.replace('导演', ''),
|
||||
"vod_content": content,
|
||||
"vod_remarks": remark,
|
||||
"vod_year": year + '年',
|
||||
"vod_area": area,
|
||||
"vod_play_from": play_form,
|
||||
"vod_play_url": play_url
|
||||
})
|
||||
return {'list': videos}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
url = ''
|
||||
if re.search(r'https?:\/\/.*\.(m3u8|mp4|flv)', id):
|
||||
url = id
|
||||
elif 'url=' in id:
|
||||
aid = id.split(',')
|
||||
uid = aid[0]
|
||||
kurl = aid[1]
|
||||
kjson = uid + kurl
|
||||
url2 = f"{kjson}"
|
||||
response = self.fetch(url=url2)
|
||||
if response.status_code == 200:
|
||||
kjson1 = response.json()
|
||||
url = kjson1['url']
|
||||
else:
|
||||
aid = id.split(',')
|
||||
bid = aid[-1]
|
||||
uid = aid[0]
|
||||
kurl = aid[1]
|
||||
token = aid[2].replace('token+', '')
|
||||
id1 = self.decrypt_wb(kurl)
|
||||
payload = {
|
||||
'parse_api': uid,
|
||||
'url': id1,
|
||||
'player_parse_type': bid,
|
||||
'token': token
|
||||
}
|
||||
url1 = f"{self.xurl}.index/vodParse"
|
||||
response = self.post(url=url1, headers=headerx, data=payload)
|
||||
if response.status_code == 200:
|
||||
response_data = response.json()
|
||||
encrypted_data = response_data['data']
|
||||
kjson = self.decrypt(encrypted_data)
|
||||
kjson1 = json.loads(kjson)
|
||||
kjson2 = kjson1['json']
|
||||
kjson3 = json.loads(kjson2)
|
||||
url = kjson3['url']
|
||||
return {"parse": 0, "playUrl": '', "url": url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
videos = []
|
||||
payload = {
|
||||
'keywords': key,
|
||||
'type_id': "0",
|
||||
'page': str(pg)
|
||||
}
|
||||
if self.search_verify:
|
||||
verifi = self.verification()
|
||||
if verifi is None:
|
||||
return {'list': []}
|
||||
payload['code'] = verifi['code']
|
||||
payload['key'] = verifi['uuid']
|
||||
|
||||
# 替换urlencode的实现
|
||||
data_str = '&'.join([f"{k}={v}" for k, v in payload.items()])
|
||||
|
||||
# 设置请求头
|
||||
headers = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
**headerx # 保留原来的 headerx 内容
|
||||
}
|
||||
|
||||
url = f'{self.xurl}.index/searchList'
|
||||
res = self.post(url=url, data=data_str, headers=headers).json()
|
||||
|
||||
if not res.get('data'):
|
||||
return {'list': [], 'msg': res.get('msg')}
|
||||
|
||||
encrypted_data = res['data']
|
||||
kjson = self.decrypt(encrypted_data)
|
||||
kjson1 = json.loads(kjson)
|
||||
|
||||
for i in kjson1['search_list']:
|
||||
video = {
|
||||
"vod_id": i['vod_id'],
|
||||
"vod_name": i['vod_name'],
|
||||
"vod_pic": i['vod_pic'],
|
||||
"vod_remarks": f"{i.get('vod_year', '')} {i.get('vod_class', '')}".strip()
|
||||
}
|
||||
videos.append(video)
|
||||
|
||||
return {
|
||||
'list': videos,
|
||||
'page': pg,
|
||||
'pagecount': 9999,
|
||||
'limit': 90,
|
||||
'total': 999999
|
||||
}
|
||||
|
||||
def localProxy(self, params):
|
||||
if params['type'] == "m3u8":
|
||||
return self.proxyM3u8(params)
|
||||
elif params['type'] == "media":
|
||||
return self.proxyMedia(params)
|
||||
elif params['type'] == "ts":
|
||||
return self.proxyTs(params)
|
||||
return None
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def decrypt(self, encrypted_data_b64):
|
||||
key_text = self.key
|
||||
iv_text = self.iv
|
||||
key_bytes = key_text.encode('utf-8')
|
||||
iv_bytes = iv_text.encode('utf-8')
|
||||
encrypted_data = base64.b64decode(encrypted_data_b64)
|
||||
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
|
||||
decrypted_padded = cipher.decrypt(encrypted_data)
|
||||
decrypted = unpad(decrypted_padded, AES.block_size)
|
||||
return decrypted.decode('utf-8')
|
||||
|
||||
def decrypt_wb(self, sencrypted_data):
|
||||
key_text = self.key
|
||||
iv_text = self.iv
|
||||
key_bytes = key_text.encode('utf-8')
|
||||
iv_bytes = iv_text.encode('utf-8')
|
||||
data_bytes = sencrypted_data.encode('utf-8')
|
||||
padded_data = pad(data_bytes, AES.block_size)
|
||||
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
|
||||
encrypted_bytes = cipher.encrypt(padded_data)
|
||||
encrypted_data_b64 = base64.b64encode(encrypted_bytes).decode('utf-8')
|
||||
return encrypted_data_b64
|
||||
|
||||
def ocr(self,base64Img):
|
||||
dat2 = self.post("https://api.nn.ci/ocr/b64/text",data=base64Img,headers=headerx).text
|
||||
if dat2:
|
||||
return dat2
|
||||
else:
|
||||
return None
|
||||
|
||||
def verification(self):
|
||||
random_uuid = str(uuid.uuid4())
|
||||
dat = self.fetch(f'{self.xurl}.verify/create?key={random_uuid}',headers=headerx).content
|
||||
base64_img = base64.b64encode(dat).decode('utf-8')
|
||||
if not dat:
|
||||
return None
|
||||
code = self.ocr(base64_img)
|
||||
if not code:
|
||||
return None
|
||||
code = self.replace_code(code) # 修改为类方法调用
|
||||
if not (len(code) == 4 and code.isdigit()):
|
||||
return None
|
||||
return {'uuid': random_uuid, 'code': code}
|
||||
|
||||
@staticmethod # 添加静态方法装饰器
|
||||
def replace_code(text):
|
||||
replacements = {'y': '9','口': '0','q': '0','u': '0','o': '0','>': '1','d': '0','b': '8','已': '2','D': '0','五': '5'}
|
||||
if len(text) == 3:
|
||||
text = text.replace('066', '1666')
|
||||
text = text.replace('566', '5066')
|
||||
return ''.join(replacements.get(c, c) for c in text)
|
|
@ -0,0 +1,337 @@
|
|||
import re
|
||||
import sys
|
||||
import uuid
|
||||
import json
|
||||
import base64
|
||||
from Crypto.Cipher import AES
|
||||
from base.spider import Spider
|
||||
from Crypto.Util.Padding import pad
|
||||
from Crypto.Util.Padding import unpad
|
||||
sys.path.append('..')
|
||||
|
||||
headerx = {
|
||||
'User-Agent': 'okhttp/3.10.0' # okhttp/3.14.9
|
||||
}
|
||||
|
||||
class Spider(Spider):
|
||||
global headerx
|
||||
init_data = ''
|
||||
search_verify = ''
|
||||
|
||||
def getName(self):
|
||||
return "首页"
|
||||
|
||||
def init(self, extend):
|
||||
js1=json.loads(extend)
|
||||
host = js1['host']
|
||||
if re.match(r'^https?:\/\/.*\.(txt|json)$',host):
|
||||
host = self.fetch(host, headers=headerx, timeout=10).text.rstrip('/')
|
||||
self.xurl = host + js1.get('api','/api.php/getappapi')
|
||||
self.key = js1['datakey']
|
||||
self.iv = js1.get('dataiv',self.key)
|
||||
|
||||
res = self.fetch(self.xurl + '.index/initV119', headers=headerx).json()
|
||||
encrypted_data = res['data']
|
||||
response = self.decrypt(encrypted_data)
|
||||
init_data = json.loads(response)
|
||||
self.init_data = init_data
|
||||
self.search_verify = init_data['config'].get('system_search_verify_status',False)
|
||||
|
||||
def homeContent(self, filter):
|
||||
kjson = self.init_data
|
||||
result = {"class": [], "filters": {}}
|
||||
for i in kjson['type_list']:
|
||||
if not(i['type_name'] in ['全部', 'QQ', 'juo.one'] or '企鹅群' in i['type_name']):
|
||||
result['class'].append({
|
||||
"type_id": i['type_id'],
|
||||
"type_name": i['type_name']
|
||||
})
|
||||
name_mapping = {'class': '类型', 'area': '地区', 'lang': '语言', 'year': '年份', 'sort': '排序'}
|
||||
filter_items = []
|
||||
for filter_type in i.get('filter_type_list', []):
|
||||
filter_name = filter_type.get('name')
|
||||
values = filter_type.get('list', [])
|
||||
|
||||
if not values:
|
||||
continue
|
||||
|
||||
value_list = [{"n": value, "v": value} for value in values]
|
||||
display_name = name_mapping.get(filter_name, filter_name)
|
||||
key = 'by' if filter_name == 'sort' else filter_name
|
||||
|
||||
filter_items.append({
|
||||
"key": key,
|
||||
"name": display_name,
|
||||
"value": value_list
|
||||
})
|
||||
|
||||
type_id = i.get('type_id')
|
||||
if filter_items:
|
||||
result["filters"][str(type_id)] = filter_items
|
||||
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
videos = []
|
||||
kjson = self.init_data
|
||||
for i in kjson['type_list']:
|
||||
for item in i['recommend_list']:
|
||||
vod_id = item['vod_id']
|
||||
name = item['vod_name']
|
||||
pic = item['vod_pic']
|
||||
remarks = item['vod_remarks']
|
||||
video = {
|
||||
"vod_id": vod_id,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": remarks
|
||||
}
|
||||
videos.append(video)
|
||||
return {'list': videos}
|
||||
|
||||
def categoryContent(self, cid, pg, filter, ext):
|
||||
videos = []
|
||||
payload = {
|
||||
'area': ext.get('area','全部'),
|
||||
'year': ext.get('year','全部'),
|
||||
'type_id': cid,
|
||||
'page': str(pg),
|
||||
'sort': ext.get('sort','最新'),
|
||||
'lang': ext.get('lang','全部'),
|
||||
'class': ext.get('class','全部')
|
||||
}
|
||||
url = f'{self.xurl}.index/typeFilterVodList'
|
||||
res = self.post(url=url, headers=headerx,data=payload).json()
|
||||
encrypted_data = res['data']
|
||||
kjson = self.decrypt(encrypted_data)
|
||||
kjson1 = json.loads(kjson)
|
||||
for i in kjson1['recommend_list']:
|
||||
id = i['vod_id']
|
||||
name = i['vod_name']
|
||||
pic = i['vod_pic']
|
||||
remarks = i['vod_remarks']
|
||||
video = {
|
||||
"vod_id": id,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": remarks
|
||||
}
|
||||
videos.append(video)
|
||||
return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
|
||||
|
||||
def detailContent(self, ids):
|
||||
did = ids[0]
|
||||
payload = {
|
||||
'vod_id': did,
|
||||
}
|
||||
api_endpoints = ['vodDetail', 'vodDetail2']
|
||||
|
||||
for endpoint in api_endpoints:
|
||||
url = f'{self.xurl}.index/{endpoint}'
|
||||
response = self.post(url=url, headers=headerx, data=payload)
|
||||
|
||||
if response.status_code == 200:
|
||||
response_data = response.json()
|
||||
encrypted_data = response_data['data']
|
||||
kjson1 = self.decrypt(encrypted_data)
|
||||
kjson = json.loads(kjson1)
|
||||
break
|
||||
videos = []
|
||||
play_form = ''
|
||||
play_url = ''
|
||||
|
||||
actor = kjson['vod']['vod_actor']
|
||||
director = kjson['vod'].get('vod_director', '')
|
||||
area = kjson['vod']['vod_area']
|
||||
name = kjson['vod']['vod_name']
|
||||
year = kjson['vod']['vod_year']
|
||||
content = kjson['vod']['vod_content']
|
||||
subtitle = kjson['vod']['vod_remarks']
|
||||
desc = kjson['vod']['vod_lang']
|
||||
remark = '时间:' + subtitle + ' 语言:' + desc
|
||||
for line in kjson['vod_play_list']:
|
||||
keywords = ['防走丢', '群', '防失群', 'Q','juo.one',]
|
||||
if any(keyword in line['player_info']['show'] for keyword in keywords):
|
||||
continue
|
||||
play_form += line['player_info']['show'] + '$$$'
|
||||
parse = line['player_info']['parse']
|
||||
player_parse_type = line['player_info']['player_parse_type']
|
||||
kurls = ""
|
||||
for vod in line['urls']:
|
||||
kurl = vod['url']
|
||||
if '.m3u8' in kurl:
|
||||
kurls += str(vod['name']) + '$' + vod['url'] + '#'
|
||||
else:
|
||||
if 'm3u8' not in kurl:
|
||||
token = 'token+' + vod['token']
|
||||
kurls += str(vod['name']) + '$' + parse + ',' + vod[
|
||||
'url'] + ',' + token + ',' + player_parse_type + '#'
|
||||
kurls = kurls.rstrip('#')
|
||||
play_url += kurls + '$$$'
|
||||
play_form = play_form.rstrip('$$$')
|
||||
play_url = play_url.rstrip('$$$')
|
||||
videos.append({
|
||||
"vod_id": did,
|
||||
"vod_name": name,
|
||||
"vod_actor": actor.replace('演员', ''),
|
||||
"vod_director": director.replace('导演', ''),
|
||||
"vod_content": content,
|
||||
"vod_remarks": remark,
|
||||
"vod_year": year + '年',
|
||||
"vod_area": area,
|
||||
"vod_play_from": play_form,
|
||||
"vod_play_url": play_url
|
||||
})
|
||||
return {'list': videos}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
url = ''
|
||||
if re.search(r'https?:\/\/.*\.(m3u8|mp4|flv)', id):
|
||||
url = id
|
||||
elif 'url=' in id:
|
||||
aid = id.split(',')
|
||||
uid = aid[0]
|
||||
kurl = aid[1]
|
||||
kjson = uid + kurl
|
||||
url2 = f"{kjson}"
|
||||
response = self.fetch(url=url2)
|
||||
if response.status_code == 200:
|
||||
kjson1 = response.json()
|
||||
url = kjson1['url']
|
||||
else:
|
||||
aid = id.split(',')
|
||||
bid = aid[-1]
|
||||
uid = aid[0]
|
||||
kurl = aid[1]
|
||||
token = aid[2].replace('token+', '')
|
||||
id1 = self.decrypt_wb(kurl)
|
||||
payload = {
|
||||
'parse_api': uid,
|
||||
'url': id1,
|
||||
'player_parse_type': bid,
|
||||
'token': token
|
||||
}
|
||||
url1 = f"{self.xurl}.index/vodParse"
|
||||
response = self.post(url=url1, headers=headerx, data=payload)
|
||||
if response.status_code == 200:
|
||||
response_data = response.json()
|
||||
encrypted_data = response_data['data']
|
||||
kjson = self.decrypt(encrypted_data)
|
||||
kjson1 = json.loads(kjson)
|
||||
kjson2 = kjson1['json']
|
||||
kjson3 = json.loads(kjson2)
|
||||
url = kjson3['url']
|
||||
return {"parse": 0, "playUrl": '', "url": url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
videos = []
|
||||
# 使用urllib.parse.quote确保关键词被正确编码
|
||||
import urllib.parse
|
||||
encoded_key = urllib.parse.quote(key)
|
||||
|
||||
# 构建POST请求的表单数据,使用编码后的关键词
|
||||
payload = {
|
||||
'keywords': encoded_key,
|
||||
'type_id': "0",
|
||||
'page': str(pg)
|
||||
}
|
||||
|
||||
if self.search_verify:
|
||||
verifi = self.verification()
|
||||
if verifi is None:
|
||||
return {'list':[]}
|
||||
payload['code'] = verifi['code']
|
||||
payload['key'] = verifi['uuid']
|
||||
|
||||
url = f'{self.xurl}.index/searchList'
|
||||
# 发送POST请求并携带表单数据
|
||||
res = self.post(url=url, data=payload, headers=headerx).json()
|
||||
|
||||
if not res.get('data'):
|
||||
return {'list':[] ,'msg': res.get('msg')}
|
||||
|
||||
encrypted_data = res['data']
|
||||
kjson = self.decrypt(encrypted_data)
|
||||
kjson1 = json.loads(kjson)
|
||||
|
||||
for i in kjson1['search_list']:
|
||||
id = i['vod_id']
|
||||
name = i['vod_name']
|
||||
pic = i['vod_pic']
|
||||
remarks = i['vod_year'] + ' ' + i['vod_class']
|
||||
|
||||
video = {
|
||||
"vod_id": id,
|
||||
"vod_name": name,
|
||||
"vod_pic": pic,
|
||||
"vod_remarks": remarks
|
||||
}
|
||||
videos.append(video)
|
||||
|
||||
return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
|
||||
|
||||
def localProxy(self, params):
|
||||
if params['type'] == "m3u8":
|
||||
return self.proxyM3u8(params)
|
||||
elif params['type'] == "media":
|
||||
return self.proxyMedia(params)
|
||||
elif params['type'] == "ts":
|
||||
return self.proxyTs(params)
|
||||
return None
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def decrypt(self, encrypted_data_b64):
|
||||
key_text = self.key
|
||||
iv_text = self.iv
|
||||
key_bytes = key_text.encode('utf-8')
|
||||
iv_bytes = iv_text.encode('utf-8')
|
||||
encrypted_data = base64.b64decode(encrypted_data_b64)
|
||||
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
|
||||
decrypted_padded = cipher.decrypt(encrypted_data)
|
||||
decrypted = unpad(decrypted_padded, AES.block_size)
|
||||
return decrypted.decode('utf-8')
|
||||
|
||||
def decrypt_wb(self, sencrypted_data):
|
||||
key_text = self.key
|
||||
iv_text = self.iv
|
||||
key_bytes = key_text.encode('utf-8')
|
||||
iv_bytes = iv_text.encode('utf-8')
|
||||
data_bytes = sencrypted_data.encode('utf-8')
|
||||
padded_data = pad(data_bytes, AES.block_size)
|
||||
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
|
||||
encrypted_bytes = cipher.encrypt(padded_data)
|
||||
encrypted_data_b64 = base64.b64encode(encrypted_bytes).decode('utf-8')
|
||||
return encrypted_data_b64
|
||||
|
||||
def ocr(self,base64Img):
|
||||
dat2 = self.post("https://api.nn.ci/ocr/b64/text",data=base64Img,headers=headerx).text
|
||||
if dat2:
|
||||
return dat2
|
||||
else:
|
||||
return None
|
||||
|
||||
def verification(self):
|
||||
random_uuid = str(uuid.uuid4())
|
||||
dat = self.fetch(f'{self.xurl}.verify/create?key={random_uuid}',headers=headerx).content
|
||||
base64_img = base64.b64encode(dat).decode('utf-8')
|
||||
if not dat:
|
||||
return None
|
||||
code = self.ocr(base64_img)
|
||||
if not code:
|
||||
return None
|
||||
code = replace_code(code)
|
||||
if not (len(code) == 4 and code.isdigit()):
|
||||
return None
|
||||
return {'uuid': random_uuid, 'code': code}
|
||||
|
||||
def replace_code(text):
|
||||
replacements = {'y': '9','口': '0','q': '0','u': '0','o': '0','>': '1','d': '0','b': '8','已': '2','D': '0','五': '5'}
|
||||
if len(text) == 3:
|
||||
text = text.replace('066', '1666')
|
||||
text = text.replace('566', '5066')
|
||||
return ''.join(replacements.get(c, c) for c in text)
|
|
@ -0,0 +1,169 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# by @嗷呜
|
||||
import re
|
||||
import sys
|
||||
from Crypto.Hash import MD5
|
||||
sys.path.append("..")
|
||||
import json
|
||||
import time
|
||||
from pyquery import PyQuery as pq
|
||||
from base.spider import Spider
|
||||
|
||||
|
||||
class Spider(Spider):
|
||||
|
||||
def init(self, extend=""):
|
||||
pass
|
||||
|
||||
def getName(self):
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def action(self, action):
|
||||
pass
|
||||
|
||||
def destroy(self):
|
||||
pass
|
||||
|
||||
host = 'https://www.lreeok.vip'
|
||||
|
||||
headers = {
|
||||
'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',
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'sec-ch-ua-platform': '"macOS"',
|
||||
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
|
||||
'Origin': host,
|
||||
'Referer': f"{host}/",
|
||||
}
|
||||
|
||||
def homeContent(self, filter):
|
||||
data = self.getpq(self.fetch(self.host, headers=self.headers).text)
|
||||
result = {}
|
||||
classes = []
|
||||
for k in data('.head-more.box a').items():
|
||||
i = k.attr('href')
|
||||
if i and '/vod' in i:
|
||||
classes.append({
|
||||
'type_name': k.text(),
|
||||
'type_id': re.search(r'\d+', i).group(0)
|
||||
})
|
||||
result['class'] = classes
|
||||
result['list'] = self.getlist(data('.border-box.diy-center .public-list-div'))
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
pass
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
body = {'type': tid, 'class': '', 'area': '', 'lang': '', 'version': '', 'state': '', 'letter': '', 'page': pg}
|
||||
data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json()
|
||||
result = {}
|
||||
result['list'] = data['list']
|
||||
result['page'] = pg
|
||||
result['pagecount'] = 9999
|
||||
result['limit'] = 90
|
||||
result['total'] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self, ids):
|
||||
data = self.getpq(self.fetch(f"{self.host}/voddetail/{ids[0]}.html", headers=self.headers).text)
|
||||
v = data('.detail-info.lightSpeedIn .slide-info')
|
||||
vod = {
|
||||
'vod_year': v.eq(-1).text(),
|
||||
'vod_remarks': v.eq(0).text(),
|
||||
'vod_actor': v.eq(3).text(),
|
||||
'vod_director': v.eq(2).text(),
|
||||
'vod_content': data('.switch-box #height_limit').text()
|
||||
}
|
||||
np = data('.anthology.wow.fadeInUp')
|
||||
ndata = np('.anthology-tab .swiper-wrapper .swiper-slide')
|
||||
pdata = np('.anthology-list .anthology-list-box ul')
|
||||
play, names = [], []
|
||||
for i in range(len(ndata)):
|
||||
n = ndata.eq(i)('a')
|
||||
n('span').remove()
|
||||
names.append(n.text())
|
||||
vs = []
|
||||
for v in pdata.eq(i)('li').items():
|
||||
vs.append(f"{v.text()}${v('a').attr('href')}")
|
||||
play.append('#'.join(vs))
|
||||
vod["vod_play_from"] = "$$$".join(names)
|
||||
vod["vod_play_url"] = "$$$".join(play)
|
||||
result = {"list": [vod]}
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
# data = self.getpq(self.fetch(f"{self.host}/vodsearch/{key}----------{pg}---.html", headers=self.headers).text)
|
||||
# return {'list': self.getlist(data('.row-right .search-box .public-list-bj')), 'page': pg}
|
||||
data = self.fetch(
|
||||
f"{self.host}/index.php/ajax/suggest?mid={pg}&wd={key}&limit=999×tamp={int(time.time() * 1000)}",
|
||||
headers=self.headers).json()
|
||||
videos = []
|
||||
for i in data['list']:
|
||||
videos.append({
|
||||
'vod_id': i['id'],
|
||||
'vod_name': i['name'],
|
||||
'vod_pic': i['pic']
|
||||
})
|
||||
return {'list': videos, 'page': pg}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
h, p = {"User-Agent": "okhttp/3.14.9"}, 1
|
||||
url = f"{self.host}{id}"
|
||||
data = self.getpq(self.fetch(url, headers=self.headers).text)
|
||||
try:
|
||||
jstr = data('.player .player-left script').eq(0).text()
|
||||
jsdata = json.loads(jstr.split('aaa=')[-1])
|
||||
body = {'url': jsdata['url']}
|
||||
if not re.search(r'\.m3u8|\.mp4', body['url']):
|
||||
data = self.post(f"{self.host}/okplay/api_config.php", headers=self.headers,
|
||||
data=self.getbody(body)).json()
|
||||
url = data.get('url') or data.get('data', {}).get('url')
|
||||
p = 0
|
||||
except Exception as e:
|
||||
print('错误信息:', e)
|
||||
pass
|
||||
result = {}
|
||||
result["parse"] = p
|
||||
result["url"] = url
|
||||
result["header"] = h
|
||||
return result
|
||||
|
||||
def localProxy(self, param):
|
||||
pass
|
||||
|
||||
def getbody(self, params):
|
||||
t = int(time.time())
|
||||
h = MD5.new()
|
||||
h.update(f"DS{t}DCC147D11943AF75".encode('utf-8'))
|
||||
key = h.hexdigest()
|
||||
params.update({'time': t, 'key': key})
|
||||
return params
|
||||
|
||||
def getlist(self, data):
|
||||
videos = []
|
||||
for i in data.items():
|
||||
id = i('a').attr('href')
|
||||
if id:
|
||||
id = re.search(r'\d+', id).group(0)
|
||||
img = i('img').attr('data-src')
|
||||
if img and 'url=' in img: img = f'{self.host}{img}'
|
||||
videos.append({
|
||||
'vod_id': id,
|
||||
'vod_name': i('img').attr('alt'),
|
||||
'vod_pic': img,
|
||||
'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text()
|
||||
})
|
||||
return videos
|
||||
|
||||
def getpq(self, data):
|
||||
try:
|
||||
return pq(data)
|
||||
except Exception as e:
|
||||
print(f"{str(e)}")
|
||||
return pq(data.encode('utf-8'))
|
|
@ -0,0 +1,380 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import requests
|
||||
import re
|
||||
import json
|
||||
import traceback
|
||||
import sys
|
||||
from urllib.parse import quote
|
||||
|
||||
sys.path.append('../../')
|
||||
try:
|
||||
from base.spider import Spider
|
||||
except ImportError:
|
||||
# 定义一个基础接口类,用于本地测试
|
||||
class Spider:
|
||||
def init(self, extend=""):
|
||||
pass
|
||||
|
||||
class Spider(Spider):
|
||||
def __init__(self):
|
||||
self.siteUrl = "https://www.kuaikaw.cn"
|
||||
self.cateManual = {
|
||||
"甜宠": "462",
|
||||
"古装仙侠": "1102",
|
||||
"现代言情": "1145",
|
||||
"青春": "1170",
|
||||
"豪门恩怨": "585",
|
||||
"逆袭": "417-464",
|
||||
"重生": "439-465",
|
||||
"系统": "1159",
|
||||
"总裁": "1147",
|
||||
"职场商战": "943"
|
||||
}
|
||||
self.headers = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
|
||||
"Referer": self.siteUrl,
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
|
||||
}
|
||||
|
||||
def getName(self):
|
||||
return "河马短剧"
|
||||
|
||||
def init(self, extend=""):
|
||||
return
|
||||
|
||||
def fetch(self, url, headers=None, retry=2):
|
||||
"""统一的网络请求接口"""
|
||||
if headers is None:
|
||||
headers = self.headers
|
||||
|
||||
for i in range(retry + 1):
|
||||
try:
|
||||
response = requests.get(url, headers=headers, timeout=10, allow_redirects=True)
|
||||
response.raise_for_status()
|
||||
return response
|
||||
except Exception as e:
|
||||
if i == retry:
|
||||
print(f"请求异常: {url}, 错误: {str(e)}")
|
||||
return None
|
||||
continue
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
video_formats = ['.mp4', '.mkv', '.avi', '.wmv', '.m3u8', '.flv', '.rmvb']
|
||||
return any(format in url.lower() for format in video_formats)
|
||||
|
||||
def manualVideoCheck(self):
|
||||
return False
|
||||
|
||||
def homeContent(self, filter):
|
||||
result = {}
|
||||
classes = [{'type_name': k, 'type_id': v} for k, v in self.cateManual.items()]
|
||||
result['class'] = classes
|
||||
|
||||
try:
|
||||
result['list'] = self.homeVideoContent()['list']
|
||||
except:
|
||||
result['list'] = []
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
videos = []
|
||||
try:
|
||||
response = self.fetch(self.siteUrl)
|
||||
if not response:
|
||||
return {'list': []}
|
||||
|
||||
html_content = response.text
|
||||
next_data_pattern = r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>'
|
||||
next_data_match = re.search(next_data_pattern, html_content, re.DOTALL)
|
||||
if not next_data_match:
|
||||
return {'list': []}
|
||||
|
||||
next_data_json = json.loads(next_data_match.group(1))
|
||||
page_props = next_data_json.get("props", {}).get("pageProps", {})
|
||||
|
||||
# 处理轮播图数据
|
||||
if "bannerList" in page_props:
|
||||
for banner in page_props["bannerList"]:
|
||||
if banner.get("bookId"):
|
||||
videos.append({
|
||||
"vod_id": f"/drama/{banner['bookId']}",
|
||||
"vod_name": banner.get("bookName", ""),
|
||||
"vod_pic": banner.get("coverWap", ""),
|
||||
"vod_remarks": f"{banner.get('statusDesc', '')} {banner.get('totalChapterNum', '')}集".strip()
|
||||
})
|
||||
|
||||
# 处理SEO分类推荐
|
||||
if "seoColumnVos" in page_props:
|
||||
for column in page_props["seoColumnVos"]:
|
||||
for book in column.get("bookInfos", []):
|
||||
if book.get("bookId"):
|
||||
videos.append({
|
||||
"vod_id": f"/drama/{book['bookId']}",
|
||||
"vod_name": book.get("bookName", ""),
|
||||
"vod_pic": book.get("coverWap", ""),
|
||||
"vod_remarks": f"{book.get('statusDesc', '')} {book.get('totalChapterNum', '')}集".strip()
|
||||
})
|
||||
|
||||
# 去重处理
|
||||
seen = set()
|
||||
unique_videos = []
|
||||
for video in videos:
|
||||
key = (video["vod_id"], video["vod_name"])
|
||||
if key not in seen:
|
||||
seen.add(key)
|
||||
unique_videos.append(video)
|
||||
|
||||
except Exception as e:
|
||||
print(f"获取首页推荐内容出错: {e}")
|
||||
unique_videos = []
|
||||
|
||||
return {'list': unique_videos}
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
result = {'list': [], 'page': pg, 'pagecount': 1, 'limit': 20, 'total': 0}
|
||||
url = f"{self.siteUrl}/browse/{tid}/{pg}"
|
||||
|
||||
response = self.fetch(url)
|
||||
if not response:
|
||||
return result
|
||||
|
||||
html_content = response.text
|
||||
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html_content, re.DOTALL)
|
||||
if not next_data_match:
|
||||
return result
|
||||
|
||||
try:
|
||||
next_data_json = json.loads(next_data_match.group(1))
|
||||
page_props = next_data_json.get("props", {}).get("pageProps", {})
|
||||
|
||||
current_page = page_props.get("page", 1)
|
||||
total_pages = page_props.get("pages", 1)
|
||||
book_list = page_props.get("bookList", [])
|
||||
|
||||
videos = []
|
||||
for book in book_list:
|
||||
if book.get("bookId"):
|
||||
videos.append({
|
||||
"vod_id": f"/drama/{book['bookId']}",
|
||||
"vod_name": book.get("bookName", ""),
|
||||
"vod_pic": book.get("coverWap", ""),
|
||||
"vod_remarks": f"{book.get('statusDesc', '')} {book.get('totalChapterNum', '')}集".strip()
|
||||
})
|
||||
|
||||
result.update({
|
||||
'list': videos,
|
||||
'page': int(current_page),
|
||||
'pagecount': total_pages,
|
||||
'limit': len(videos),
|
||||
'total': len(videos) * total_pages if videos else 0
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
print(f"分类内容获取出错: {e}")
|
||||
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick, pg=1):
|
||||
return self.searchContentPage(key, quick, pg)
|
||||
|
||||
def searchContentPage(self, key, quick, pg=1):
|
||||
result = {'list': [], 'page': pg, 'pagecount': 1, 'limit': 20, 'total': 0}
|
||||
search_url = f"{self.siteUrl}/search?searchValue={quote(key)}&page={pg}"
|
||||
|
||||
response = self.fetch(search_url)
|
||||
if not response:
|
||||
return result
|
||||
|
||||
html_content = response.text
|
||||
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html_content, re.DOTALL)
|
||||
if not next_data_match:
|
||||
return result
|
||||
|
||||
try:
|
||||
next_data_json = json.loads(next_data_match.group(1))
|
||||
page_props = next_data_json.get("props", {}).get("pageProps", {})
|
||||
|
||||
total_pages = page_props.get("pages", 1)
|
||||
book_list = page_props.get("bookList", [])
|
||||
|
||||
videos = []
|
||||
for book in book_list:
|
||||
if book.get("bookId"):
|
||||
videos.append({
|
||||
"vod_id": f"/drama/{book['bookId']}",
|
||||
"vod_name": book.get("bookName", ""),
|
||||
"vod_pic": book.get("coverWap", ""),
|
||||
"vod_remarks": f"{book.get('statusDesc', '')} {book.get('totalChapterNum', '')}集".strip()
|
||||
})
|
||||
|
||||
result.update({
|
||||
'list': videos,
|
||||
'pagecount': total_pages,
|
||||
'total': len(videos) * total_pages if videos else 0
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
print(f"搜索内容出错: {e}")
|
||||
|
||||
return result
|
||||
|
||||
def detailContent(self, ids):
|
||||
result = {'list': []}
|
||||
if not ids:
|
||||
return result
|
||||
|
||||
vod_id = ids[0]
|
||||
if not vod_id.startswith('/drama/'):
|
||||
vod_id = f'/drama/{vod_id}'
|
||||
|
||||
drama_url = f"{self.siteUrl}{vod_id}"
|
||||
response = self.fetch(drama_url)
|
||||
if not response:
|
||||
return result
|
||||
|
||||
html = response.text
|
||||
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html, re.DOTALL)
|
||||
if not next_data_match:
|
||||
return result
|
||||
|
||||
try:
|
||||
next_data = json.loads(next_data_match.group(1))
|
||||
page_props = next_data.get("props", {}).get("pageProps", {})
|
||||
book_info = page_props.get("bookInfoVo", {})
|
||||
chapter_list = page_props.get("chapterList", [])
|
||||
|
||||
if not book_info.get("bookId"):
|
||||
return result
|
||||
|
||||
# 基本信息
|
||||
categories = [c.get("name", "") for c in book_info.get("categoryList", [])]
|
||||
performers = [p.get("name", "") for p in book_info.get("performerList", [])]
|
||||
|
||||
vod = {
|
||||
"vod_id": vod_id,
|
||||
"vod_name": book_info.get("title", ""),
|
||||
"vod_pic": book_info.get("coverWap", ""),
|
||||
"type_name": ",".join(categories),
|
||||
"vod_year": "",
|
||||
"vod_area": book_info.get("countryName", ""),
|
||||
"vod_remarks": f"{book_info.get('statusDesc', '')} {book_info.get('totalChapterNum', '')}集".strip(),
|
||||
"vod_actor": ", ".join(performers),
|
||||
"vod_director": "",
|
||||
"vod_content": book_info.get("introduction", "")
|
||||
}
|
||||
|
||||
# 处理剧集
|
||||
play_urls = self.processEpisodes(vod_id, chapter_list)
|
||||
if play_urls:
|
||||
vod['vod_play_from'] = '河马剧场'
|
||||
vod['vod_play_url'] = '$$$'.join(play_urls)
|
||||
|
||||
result['list'] = [vod]
|
||||
|
||||
except Exception as e:
|
||||
print(f"详情页解析出错: {e}")
|
||||
traceback.print_exc()
|
||||
|
||||
return result
|
||||
|
||||
def processEpisodes(self, vod_id, chapter_list):
|
||||
play_urls = []
|
||||
episodes = []
|
||||
|
||||
for chapter in chapter_list:
|
||||
chapter_id = chapter.get("chapterId", "")
|
||||
chapter_name = chapter.get("chapterName", "")
|
||||
|
||||
if not chapter_id or not chapter_name:
|
||||
continue
|
||||
|
||||
# 尝试获取直接视频链接
|
||||
video_url = self.getDirectVideoUrl(chapter)
|
||||
if video_url:
|
||||
episodes.append(f"{chapter_name}${video_url}")
|
||||
continue
|
||||
|
||||
# 回退方案
|
||||
episodes.append(f"{chapter_name}${vod_id}${chapter_id}${chapter_name}")
|
||||
|
||||
if episodes:
|
||||
play_urls.append("#".join(episodes))
|
||||
|
||||
return play_urls
|
||||
|
||||
def getDirectVideoUrl(self, chapter):
|
||||
if "chapterVideoVo" not in chapter or not chapter["chapterVideoVo"]:
|
||||
return None
|
||||
|
||||
video_info = chapter["chapterVideoVo"]
|
||||
for key in ["mp4", "mp4720p", "vodMp4Url"]:
|
||||
if key in video_info and video_info[key] and ".mp4" in video_info[key].lower():
|
||||
return video_info[key]
|
||||
return None
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
result = {
|
||||
"parse": 0,
|
||||
"url": id,
|
||||
"header": json.dumps(self.headers)
|
||||
}
|
||||
|
||||
# 如果已经是视频链接直接返回
|
||||
if 'http' in id and ('.mp4' in id or '.m3u8' in id):
|
||||
return result
|
||||
|
||||
# 解析参数
|
||||
parts = id.split('$')
|
||||
if len(parts) < 2:
|
||||
return result
|
||||
|
||||
drama_id = parts[0].replace('/drama/', '')
|
||||
chapter_id = parts[1]
|
||||
|
||||
# 尝试获取视频链接
|
||||
video_url = self.getEpisodeVideoUrl(drama_id, chapter_id)
|
||||
if video_url:
|
||||
result["url"] = video_url
|
||||
|
||||
return result
|
||||
|
||||
def getEpisodeVideoUrl(self, drama_id, chapter_id):
|
||||
episode_url = f"{self.siteUrl}/episode/{drama_id}/{chapter_id}"
|
||||
response = self.fetch(episode_url)
|
||||
if not response:
|
||||
return None
|
||||
|
||||
html = response.text
|
||||
|
||||
# 方法1: 从NEXT_DATA提取
|
||||
next_data_match = re.search(r'<script id="__NEXT_DATA__".*?>(.*?)</script>', html, re.DOTALL)
|
||||
if next_data_match:
|
||||
try:
|
||||
next_data = json.loads(next_data_match.group(1))
|
||||
page_props = next_data.get("props", {}).get("pageProps", {})
|
||||
chapter_info = page_props.get("chapterInfo", {})
|
||||
|
||||
if chapter_info and "chapterVideoVo" in chapter_info:
|
||||
video_info = chapter_info["chapterVideoVo"]
|
||||
for key in ["mp4", "mp4720p", "vodMp4Url"]:
|
||||
if key in video_info and video_info[key] and ".mp4" in video_info[key].lower():
|
||||
return video_info[key]
|
||||
except:
|
||||
pass
|
||||
|
||||
# 方法2: 直接从HTML提取
|
||||
mp4_matches = re.findall(r'(https?://[^"\']+\.mp4)', html)
|
||||
if mp4_matches:
|
||||
for url in mp4_matches:
|
||||
if chapter_id in url or drama_id in url:
|
||||
return url
|
||||
return mp4_matches[0]
|
||||
|
||||
return None
|
||||
|
||||
def localProxy(self, param):
|
||||
return [200, "video/MP2T", {}, param]
|
||||
|
||||
def destroy(self):
|
||||
pass
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Catvod | 主页</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
||||
<meta name="description" content="Catvod 提供简洁高效的 Tvbox 接口、GitHub 文件加速服务与美图壁纸服务。" />
|
||||
<meta name="keywords" content="Catvod, TVbox, GitHub 加速, 高清壁纸, 壁纸 API, 文件加速" />
|
||||
<meta name="robots" content="index,follow" />
|
||||
<meta name="theme-color" content="#0F7D00" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<link rel="stylesheet" href="/css/all.min.css" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<link rel="icon" href="/icons/icon-192.png" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/css/all.min.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="/css/main.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<main id="main" role="main">
|
||||
<header>
|
||||
<div class="avatar">
|
||||
<img src="/image/avatar.jpg" alt="Catvod 头像" loading="lazy" />
|
||||
</div>
|
||||
<h1>Catvod.com</h1>
|
||||
<p>简简单单!</p>
|
||||
</header>
|
||||
<footer>
|
||||
<ul class="icons" role="list">
|
||||
<li><a href="https://tvbox.catvod.com/" title="Tvbox接口" aria-label="Tvbox接口" target="_blank" rel="noopener noreferrer"><i class="fas fa-tv"></i></a></li>
|
||||
<li><a href="https://github.catvod.com/" title="GitHub 文件加速" aria-label="GitHub 文件加速" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i></a></li>
|
||||
<li><a href="https://imgs.catvod.com/" title="随机精美壁纸" aria-label="随机精美壁纸" target="_blank" rel="noopener noreferrer"><i class="fas fa-image"></i></a></li>
|
||||
<li><a href="https://img.catvod.com/" title="4K随机背景图片" aria-label="4K随机背景图片" target="_blank" rel="noopener noreferrer"><i class="fas fa-photo-video"></i></a></li>
|
||||
<li><a href="https://lives.catvod.com/" title="TXT/M3U 转换工具" aria-label="TXT/M3U 转换工具" target="_blank" rel="noopener noreferrer"><i class="fas fa-cogs"></i></a></li>
|
||||
<li><a href="https://www.catvod.com/jiaoliu" title="联系我们" aria-label="联系我们" target="_blank" rel="noopener noreferrer"><i class="fas fa-comments"></i></a></li>
|
||||
</ul>
|
||||
</footer>
|
||||
</main>
|
||||
</div>
|
||||
<footer id="footer" role="contentinfo">
|
||||
<p id="copyright"></p>
|
||||
</footer>
|
||||
<script src="/js/main.js"></script>
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/service-worker.js')
|
||||
.catch(err => console.warn('Service Worker 注册失败:', err));
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,279 @@
|
|||
# coding=utf-8
|
||||
# !/usr/bin/python
|
||||
# by嗷呜(finally)
|
||||
import sys
|
||||
import os
|
||||
sys.path.append("..")
|
||||
import re
|
||||
import hashlib
|
||||
import hmac
|
||||
import random
|
||||
import string
|
||||
from Crypto.Util.Padding import unpad
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Cipher import PKCS1_v1_5, AES
|
||||
from base64 import b64encode, b64decode
|
||||
import json
|
||||
import time
|
||||
from base.spider import Spider
|
||||
|
||||
class Spider(Spider):
|
||||
|
||||
def getName(self):
|
||||
return "电影猎手"
|
||||
|
||||
def init(self, extend=""):
|
||||
self.device = self.device_id()
|
||||
self.host = self.gethost()
|
||||
pass
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
pass
|
||||
|
||||
def manualVideoCheck(self):
|
||||
pass
|
||||
|
||||
def action(self, action):
|
||||
pass
|
||||
|
||||
def destroy(self):
|
||||
pass
|
||||
|
||||
t = str(int(time.time()))
|
||||
|
||||
def homeContent(self, filter):
|
||||
result = {}
|
||||
filters = {}
|
||||
classes = []
|
||||
bba = self.url()
|
||||
data = self.fetch(f"{self.host}/api/v1/app/config?pack={bba[0]}&signature={bba[1]}", headers=self.header()).text
|
||||
data1 = self.aes(data)
|
||||
dy = {"class":"类型","area":"地区","lang":"语言","year":"年份","letter":"字母","by":"排序","sort":"排序"}
|
||||
data1['data']['movie_screen']['sort'].pop(0)
|
||||
for item in data1['data']['movie_screen']['sort']:
|
||||
item['n'] = item.pop('name')
|
||||
item['v'] = item.pop('value')
|
||||
for item in data1['data']['movie_screen']['filter']:
|
||||
has_non_empty_field = False
|
||||
classes.append({"type_name": item["name"], "type_id": str(item["id"])})
|
||||
for key in dy:
|
||||
if key in item and item[key]:
|
||||
has_non_empty_field = True
|
||||
break
|
||||
if has_non_empty_field:
|
||||
filters[str(item["id"])] = []
|
||||
filters[str(item["id"])].append(
|
||||
{"key": 'sort', "name": '排序', "value": data1['data']['movie_screen']['sort']})
|
||||
for dkey in item:
|
||||
if dkey in dy and item[dkey]:
|
||||
item[dkey].pop(0)
|
||||
value_array = [
|
||||
{"n": value.strip(), "v": value.strip()}
|
||||
for value in item[dkey]
|
||||
if value.strip() != ""
|
||||
]
|
||||
filters[str(item["id"])].append(
|
||||
{"key": dkey, "name": dy[dkey], "value": value_array}
|
||||
)
|
||||
result["class"] = classes
|
||||
result["filters"] = filters
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
bba = self.url()
|
||||
url = f'{self.host}/api/v1/movie/index_recommend?pack={bba[0]}&signature={bba[1]}'
|
||||
data = self.fetch(url, headers=self.header()).json()
|
||||
videos = []
|
||||
for item in data['data']:
|
||||
if len(item['list']) > 0:
|
||||
for it in item['list']:
|
||||
try:
|
||||
videos.append(self.voides(it))
|
||||
except Exception as e:
|
||||
continue
|
||||
result = {"list": videos}
|
||||
return result
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
body = {"type_id": tid, "sort": extend.get("sort", "by_default"), "class": extend.get("class", "类型"),
|
||||
"area": extend.get("area", "地区"), "year": extend.get("year", "年份"), "page": str(pg),
|
||||
"pageSize": "21"}
|
||||
result = {}
|
||||
list = []
|
||||
bba = self.url(body)
|
||||
url = f"{self.host}/api/v1/movie/screen/list?pack={bba[0]}&signature={bba[1]}"
|
||||
data = self.fetch(url, headers=self.header()).json()['data']['list']
|
||||
for item in data:
|
||||
list.append(self.voides(item))
|
||||
result["list"] = list
|
||||
result["page"] = pg
|
||||
result["pagecount"] = 9999
|
||||
result["limit"] = 90
|
||||
result["total"] = 999999
|
||||
return result
|
||||
|
||||
def detailContent(self, ids):
|
||||
body = {"id": ids[0]}
|
||||
bba = self.url(body)
|
||||
url = f'{self.host}/api/v1/movie/detail?pack={bba[0]}&signature={bba[1]}'
|
||||
data = self.fetch(url, headers=self.header()).json()['data']
|
||||
video = {'vod_name': data.get('name'),'type_name': data.get('type_name'),'vod_year': data.get('year'),'vod_area': data.get('area'),'vod_remarks': data.get('dynami'),'vod_content': data.get('content')}
|
||||
play = []
|
||||
names = []
|
||||
tasks = []
|
||||
for itt in data["play_from"]:
|
||||
name = itt["name"]
|
||||
a = []
|
||||
if len(itt["list"]) > 0:
|
||||
names.append(name)
|
||||
play.append(self.playeach(itt['list']))
|
||||
else:
|
||||
tasks.append({"movie_id": ids[0], "from_code": itt["code"]})
|
||||
names.append(name)
|
||||
if tasks:
|
||||
with ThreadPoolExecutor(max_workers=len(tasks)) as executor:
|
||||
results = executor.map(self.playlist, tasks)
|
||||
for result in results:
|
||||
if result:
|
||||
play.append(result)
|
||||
else:
|
||||
play.append("")
|
||||
video["vod_play_from"] = "$$$".join(names)
|
||||
video["vod_play_url"] = "$$$".join(play)
|
||||
result = {"list": [video]}
|
||||
return result
|
||||
|
||||
def searchContent(self, key, quick, pg=1):
|
||||
body = {"keyword": key, "sort": "", "type_id": "0", "page": str(pg), "pageSize": "10",
|
||||
"res_type": "by_movie_name"}
|
||||
bba = self.url(body)
|
||||
url = f"{self.host}/api/v1/movie/search?pack={bba[0]}&signature={bba[1]}"
|
||||
data = self.fetch(url, headers=self.header()).json()['data'].get('list')
|
||||
videos = []
|
||||
for it in data:
|
||||
try:
|
||||
videos.append(self.voides(it))
|
||||
except Exception as e:
|
||||
continue
|
||||
result = {"list": videos, "page": pg}
|
||||
return result
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
url = id
|
||||
if "m3u8" not in url and "mp4" not in url:
|
||||
try:
|
||||
add = id.split('|||')
|
||||
data = {"from_code": add[0], "play_url": add[1], "episode_id": add[2], "type": "play"}
|
||||
bba = self.url(data)
|
||||
data2 = self.fetch(f"{self.host}/api/v1/movie_addr/parse_url?pack={bba[0]}&signature={bba[1]}",
|
||||
headers=self.header()).json()['data']
|
||||
url = data2.get('play_url') or data2.get('download_url')
|
||||
try:
|
||||
url1 = self.fetch(url, headers=self.header(), allow_redirects=False).headers['Location']
|
||||
if url1 and "http" in url1:
|
||||
url = url1
|
||||
except:
|
||||
pass
|
||||
except Exception as e:
|
||||
pass
|
||||
if '.jpg' in url or '.jpeg' in url or '.png' in url:
|
||||
url = self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8"
|
||||
result = {}
|
||||
result["parse"] = 0
|
||||
result["url"] = url
|
||||
result["header"] = {'user-agent': 'okhttp/4.9.2'}
|
||||
return result
|
||||
|
||||
def localProxy(self, param):
|
||||
url = b64decode(param["url"]).decode('utf-8')
|
||||
durl = url[:url.rfind('/')]
|
||||
data = self.fetch(url, headers=self.header()).content.decode("utf-8")
|
||||
lines = data.strip().split('\n')
|
||||
for index, string in enumerate(lines):
|
||||
# if 'URI="' in string and 'http' not in string:
|
||||
# lines[index] = index
|
||||
# 暂时预留,貌似用不到
|
||||
if '#EXT' not in string and 'http' not in string:
|
||||
lines[index] = durl + ('' if string.startswith('/') else '/') + string
|
||||
data = '\n'.join(lines)
|
||||
return [200, "application/vnd.apple.mpegur", data]
|
||||
|
||||
def device_id(self):
|
||||
characters = string.ascii_lowercase + string.digits
|
||||
random_string = ''.join(random.choices(characters, k=32))
|
||||
return random_string
|
||||
|
||||
def gethost(self):
|
||||
headers = {
|
||||
'User-Agent': 'okhttp/4.9.2',
|
||||
'Connection': 'Keep-Alive',
|
||||
}
|
||||
response = self.fetch('https://app-site.ecoliving168.com/domain_v5.json', headers=headers).json()
|
||||
url = response['api_service'].replace('/api/', '')
|
||||
return url
|
||||
|
||||
def header(self):
|
||||
headers = {
|
||||
'User-Agent': 'Android',
|
||||
'Accept': 'application/prs.55App.v2+json',
|
||||
'timestamp': self.t,
|
||||
'x-client-setting': '{"pure-mode":1}',
|
||||
'x-client-uuid': '{"device_id":' + self.device + '}, "type":1,"brand":"Redmi", "model":"M2012K10C", "system_version":30, "sdk_version":"3.1.0.7"}',
|
||||
'x-client-version': '3096 '
|
||||
}
|
||||
return headers
|
||||
|
||||
def url(self, id=None):
|
||||
if not id:
|
||||
id = {}
|
||||
id["timestamp"] = self.t
|
||||
public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA02F/kPg5A2NX4qZ5JSns+bjhVMCC6JbTiTKpbgNgiXU+Kkorg6Dj76gS68gB8llhbUKCXjIdygnHPrxVHWfzmzisq9P9awmXBkCk74Skglx2LKHa/mNz9ivg6YzQ5pQFUEWS0DfomGBXVtqvBlOXMCRxp69oWaMsnfjnBV+0J7vHbXzUIkqBLdXSNfM9Ag5qdRDrJC3CqB65EJ3ARWVzZTTcXSdMW9i3qzEZPawPNPe5yPYbMZIoXLcrqvEZnRK1oak67/ihf7iwPJqdc+68ZYEmmdqwunOvRdjq89fQMVelmqcRD9RYe08v+xDxG9Co9z7hcXGTsUquMxkh29uNawIDAQAB'
|
||||
encrypted_text = json.dumps(id)
|
||||
public_key = RSA.import_key(b64decode(public_key))
|
||||
cipher = PKCS1_v1_5.new(public_key)
|
||||
encrypted_message = cipher.encrypt(encrypted_text.encode('utf-8'))
|
||||
encrypted_message_base64 = b64encode(encrypted_message).decode('utf-8')
|
||||
result = encrypted_message_base64.replace('+', '-').replace('/', '_').replace('=', '')
|
||||
key = '635a580fcb5dc6e60caa39c31a7bde48'
|
||||
sign = hmac.new(key.encode(), result.encode(), hashlib.md5).hexdigest()
|
||||
return result, sign
|
||||
|
||||
def playlist(self, body):
|
||||
try:
|
||||
bba = self.url(body)
|
||||
url = f'{self.host}/api/v1/movie_addr/list?pack={bba[0]}&signature={bba[1]}'
|
||||
data = self.fetch(url, headers=self.header()).json()['data']
|
||||
return self.playeach(data)
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
def playeach(self,data):
|
||||
play_urls = []
|
||||
for it in data:
|
||||
if re.search(r"mp4|m3u8", it["play_url"]):
|
||||
play_urls.append(f"{it['episode_name']}${it['play_url']}")
|
||||
else:
|
||||
play_urls.append(
|
||||
f"{it['episode_name']}${it['from_code']}|||{it['play_url']}|||{it['episode_id']}"
|
||||
)
|
||||
return '#'.join(play_urls)
|
||||
|
||||
def voides(self, item):
|
||||
if item['name'] or item['title']:
|
||||
voide = {
|
||||
"vod_id": item.get('id') or item.get('click'),
|
||||
'vod_name': item.get('name') or item.get('title'),
|
||||
'vod_pic': item.get('cover') or item.get('image'),
|
||||
'vod_year': item.get('year') or item.get('label'),
|
||||
'vod_remarks': item.get('dynamic') or item.get('sub_title')
|
||||
}
|
||||
return voide
|
||||
|
||||
def aes(self, text):
|
||||
text = text.replace('-', '+').replace('_', '/') + '=='
|
||||
key = b"e6d5de5fcc51f53d"
|
||||
iv = b"2f13eef7dfc6c613"
|
||||
cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||
pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size).decode("utf-8")
|
||||
return json.loads(pt)
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Catvod | 主页</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
||||
<meta name="description" content="Catvod 提供简洁高效的 Tvbox 接口、GitHub 文件加速服务与美图壁纸服务。" />
|
||||
<meta name="keywords" content="Catvod, TVbox, GitHub 加速, 高清壁纸, 壁纸 API, 文件加速" />
|
||||
<meta name="robots" content="index,follow" />
|
||||
<meta name="theme-color" content="#0F7D00" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<link rel="stylesheet" href="/css/all.min.css" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<link rel="icon" href="/icons/icon-192.png" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/css/all.min.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="/css/main.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<main id="main" role="main">
|
||||
<header>
|
||||
<div class="avatar">
|
||||
<img src="/image/avatar.jpg" alt="Catvod 头像" loading="lazy" />
|
||||
</div>
|
||||
<h1>Catvod.com</h1>
|
||||
<p>简简单单!</p>
|
||||
</header>
|
||||
<footer>
|
||||
<ul class="icons" role="list">
|
||||
<li><a href="https://tvbox.catvod.com/" title="Tvbox接口" aria-label="Tvbox接口" target="_blank" rel="noopener noreferrer"><i class="fas fa-tv"></i></a></li>
|
||||
<li><a href="https://github.catvod.com/" title="GitHub 文件加速" aria-label="GitHub 文件加速" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i></a></li>
|
||||
<li><a href="https://imgs.catvod.com/" title="随机精美壁纸" aria-label="随机精美壁纸" target="_blank" rel="noopener noreferrer"><i class="fas fa-image"></i></a></li>
|
||||
<li><a href="https://img.catvod.com/" title="4K随机背景图片" aria-label="4K随机背景图片" target="_blank" rel="noopener noreferrer"><i class="fas fa-photo-video"></i></a></li>
|
||||
<li><a href="https://lives.catvod.com/" title="TXT/M3U 转换工具" aria-label="TXT/M3U 转换工具" target="_blank" rel="noopener noreferrer"><i class="fas fa-cogs"></i></a></li>
|
||||
<li><a href="https://www.catvod.com/jiaoliu" title="联系我们" aria-label="联系我们" target="_blank" rel="noopener noreferrer"><i class="fas fa-comments"></i></a></li>
|
||||
</ul>
|
||||
</footer>
|
||||
</main>
|
||||
</div>
|
||||
<footer id="footer" role="contentinfo">
|
||||
<p id="copyright"></p>
|
||||
</footer>
|
||||
<script src="/js/main.js"></script>
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/service-worker.js')
|
||||
.catch(err => console.warn('Service Worker 注册失败:', err));
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Catvod | 主页</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
||||
<meta name="description" content="Catvod 提供简洁高效的 Tvbox 接口、GitHub 文件加速服务与美图壁纸服务。" />
|
||||
<meta name="keywords" content="Catvod, TVbox, GitHub 加速, 高清壁纸, 壁纸 API, 文件加速" />
|
||||
<meta name="robots" content="index,follow" />
|
||||
<meta name="theme-color" content="#0F7D00" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<link rel="stylesheet" href="/css/all.min.css" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<link rel="icon" href="/icons/icon-192.png" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.2/css/all.min.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="/css/main.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<main id="main" role="main">
|
||||
<header>
|
||||
<div class="avatar">
|
||||
<img src="/image/avatar.jpg" alt="Catvod 头像" loading="lazy" />
|
||||
</div>
|
||||
<h1>Catvod.com</h1>
|
||||
<p>简简单单!</p>
|
||||
</header>
|
||||
<footer>
|
||||
<ul class="icons" role="list">
|
||||
<li><a href="https://tvbox.catvod.com/" title="Tvbox接口" aria-label="Tvbox接口" target="_blank" rel="noopener noreferrer"><i class="fas fa-tv"></i></a></li>
|
||||
<li><a href="https://github.catvod.com/" title="GitHub 文件加速" aria-label="GitHub 文件加速" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i></a></li>
|
||||
<li><a href="https://imgs.catvod.com/" title="随机精美壁纸" aria-label="随机精美壁纸" target="_blank" rel="noopener noreferrer"><i class="fas fa-image"></i></a></li>
|
||||
<li><a href="https://img.catvod.com/" title="4K随机背景图片" aria-label="4K随机背景图片" target="_blank" rel="noopener noreferrer"><i class="fas fa-photo-video"></i></a></li>
|
||||
<li><a href="https://lives.catvod.com/" title="TXT/M3U 转换工具" aria-label="TXT/M3U 转换工具" target="_blank" rel="noopener noreferrer"><i class="fas fa-cogs"></i></a></li>
|
||||
<li><a href="https://www.catvod.com/jiaoliu" title="联系我们" aria-label="联系我们" target="_blank" rel="noopener noreferrer"><i class="fas fa-comments"></i></a></li>
|
||||
</ul>
|
||||
</footer>
|
||||
</main>
|
||||
</div>
|
||||
<footer id="footer" role="contentinfo">
|
||||
<p id="copyright"></p>
|
||||
</footer>
|
||||
<script src="/js/main.js"></script>
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/service-worker.js')
|
||||
.catch(err => console.warn('Service Worker 注册失败:', err));
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
152
JN/lem.json
|
@ -1,11 +1,8 @@
|
|||
{
|
||||
"spider":"./N3RD/J/lem0718.jar;md5;A331D127115942E0347E59AB8E94A6C0",
|
||||
"spider":"./N3RD/J/lem0730.jar;md5;9FCE4CE1E8DF9D051167F53D22DAF256",
|
||||
|
||||
//"spider":"./N3RD/J/lem0717.jar;md5;6B0AB91BA79E264C16C403E8F10BD1AD",
|
||||
//"spider":"./N3RD/J/lem0712.jar;md5;A0D0865ED4584D92CEDB0213CE5B786A",
|
||||
//"spider":"./N3RD/J/lem0711.jar;md5;4B8B07EDD7C71D7B699A45292949B338",
|
||||
//"spider":"./N3RD/J/lem0704.jar;md5;CC360C9DDA5FE05A87067BB6FC52DAD3",
|
||||
//"spider":"./N3RD/J/lem0702.jar;md5;892CBB97AF5669DFB114418ED9BE362E",
|
||||
//"spider":"./N3RD/J/lem0726.jar;md5;86BD74E0F91B17CD582E9EB4DCD1FDDC",
|
||||
//"spider":"./N3RD/J/lem0721.jar;md5;BCE09983C2B93ACB9C9FC28110772AB5",
|
||||
|
||||
"logo":"./N3RD/W/ICONSGIF.gif",
|
||||
|
||||
|
@ -68,31 +65,29 @@
|
|||
{"key":"vod_木耳资源","name":"雷蒙影视 | ️🚀木耳资源","type":1,"api":"https://json.heimuer.xyz/api.php/provide/vod/?ac=list"},
|
||||
{"key":"vod_海外资源","name":"雷蒙影视 | ️🚀海外资源","type":1,"api":"https://hw8.live/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"vod_华为资源","name":"雷蒙影视 | ️🚀华为资源","type":1,"api":"http://nikanba.live/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1},
|
||||
{"key":"drjs_荐片","name":"雷蒙影视 | 🏆荐片(DRPY)","type":3,"api":"./dr_py/libs/drpy2.min.js","ext":"./EXT/JS/荐片.js"},
|
||||
{"key":"csp_Jianpian_FM","name":"雷蒙影视 | 🏆荐片(SP)","api":"csp_Jianpian","type":3,"playerType":"2"},
|
||||
{"key":"drjs_荐片","name":"雷蒙影视 | 🏆荐片(DRPY)","type":3,"api":"./dr_py/libs/drpy2.min.js","ext":"./EXT/JS/荐片.js"},
|
||||
{"key":"csp_Gz360_FM","name":"雷蒙影视 | 🍉瓜子(SP)","type":3,"api":"csp_Gz360","playerType":2},
|
||||
{"key":"drjs_瓜子","name":"雷蒙影视 | 🍉瓜子(DRPY)","type":3,"api":"./dr_py/libs/drpy2.min.js","ext":"./dr_py/js/瓜子影视.js"},
|
||||
{"key":"csp_IkanBot","name":"雷蒙影视 | 🤖爱看机器人(SP)","type":3,"api":"csp_IkanBot","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"drjs_爱看机器人","name":"雷蒙影视 | 🤖爱看机器人(DRPY)","type":3,"api":"./dr_py/libs/drpy2.min.js","ext":"./EXT/JS/ikanbot2.js"},
|
||||
{"key":"drjs_瓜子影视","name":"雷蒙影视 | 🍉瓜子影视(DRPY)","type":3,"api":"./dr_py/libs/drpy2.min.js","ext":"./dr_py/js/瓜子影视.js"},
|
||||
{"key":"csp_BiliGuard","name":"雷蒙影视 | 🅱哔哩哔哩(SP)","type":3,"api":"csp_BiliGuard","searchable":0,"quickSearch":0,"filterable":0,"ext":{"json":"https://cors.isteed.cc/https://raw.githubusercontent.com/n3rddd/N3RD/master/JN/EXT/XB/Bili1.json"}},
|
||||
{"key":"drjs_我的哔哩[官]","name":"雷蒙影视 | 🅱我的哔哩(DRPY)","type":3,"api":"./dr_py/libs/drpy2.min.js","ext":"./dr_py/js/我的哔哩[官].js?type=url¶ms=https://cors.isteed.cc/https://raw.githubusercontent.com/n3rddd/N3RD/master/JN/dr_py/json/Bili1.json"},
|
||||
{"key":"csp_AllliveGuard","name":"雷蒙影视 | 📽️一直播(SP)","type":3,"api":"csp_AllliveGuard","playerType":2,"searchable":0,"quickSearch":0,"changeable":0},
|
||||
{"key":"csp_YDjisu","name":"雷蒙影视 | ⚡云盘急速(SP)","type":3,"api":"csp_YDjisu","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_WoGGGuard","name":"雷蒙影视 | 👽玩偶哥哥(SP)","type":3,"api":"csp_WoGGGuard","timeout":30,"searchable":1,"quickSearch":1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto","siteUrl":"https://www.wogg.com/","danMu":"弹"}},
|
||||
{"key":"csp_SbaibaiGuard","name":"雷蒙影视 | 🐟素白白(SP)","type":3,"api":"csp_SbaibaiGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_NewCzGuard","name":"雷蒙影视 | 👴厂长资源(SP)","type":3,"api":"csp_NewCzGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_NanGuaGuard","name":"雷蒙影视 | 🎃南瓜(SP)","type":3,"api":"csp_NanGuaGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_YCyzGuard","name":"雷蒙影视 | ☀原创(SP)","type":3,"api":"csp_YCyzGuard","timeout":30,"playerType":1,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_LiteAppleGuard","name":"雷蒙影视 | 🍎小苹果(SP)","type":3,"api":"csp_LiteAppleGuard","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_NmyswvGuard","name":"雷蒙影视 | 🍓糯米(SP)","type":3,"api":"csp_NmyswvGuard","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_JpysGuard","name":"雷蒙影视 | 💮文才(SP)","type":3,"api":"csp_JpysGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_AppSxGuard_溢彩","name":"雷蒙影视 | 💡溢彩(SP)","type":3,"api":"csp_AppSxGuard","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"rfOb1uAWbkRHp7hdxprG9un3+TfN183v1zIyaYDoDAIaLw5L8Dp8+v88LrEL3dBzrmWbdMBX0WNm7HtkQuw0AIzUurGBVyPqCKzDmbriATuukhctJlsLo8KxCw=="},
|
||||
{"key":"csp_LibvioGuard","name":"雷蒙影视 | 🎉Libvio(SP)","type":3,"api":"csp_LibvioGuard","timeout":15,"searchable":1,"quickSearch":1,"filterable":1,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
{"key":"csp_ZxzjGuard","name":"雷蒙影视 | 📹在线之家(SP)","type":3,"api":"csp_ZxzjGuard","timeout":15,"searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.zxzjhd.com/"},
|
||||
{"key":"csp_BttooGuard","name":"雷蒙影视 | 🍄两个BT(SP)","type":3,"api":"csp_BttwooGuard","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_DdrkGuard","name":"雷蒙影视 | ⏮️低端影视(SP)","type":3,"api":"csp_DdrkGuard","timeout":15,"playerType":"2","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_AppTTGuard_萌米","name":"雷蒙影视 | 👀萌米(SP)","type":3,"api":"csp_AppTTGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext":"uqGL1bNENEIVq+dC1p/Y9uWjuA=="},
|
||||
{"key":"csp_AppTTGuard_热播","name":"雷蒙影视 | 📺热播(SP)","type":3,"api":"csp_AppTTGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext":"uqGL1bNENExT7/hGxpSE5qU="},
|
||||
{"key":"csp_AppSxGuard_水星","name":"雷蒙影视 | 🍊水星(SP)","type":3,"api":"csp_AppSxGuard","timeout":15,"searchable":1,"quickSearch":1,"filterable":1,"ext":"rfOb1uAWbkRHp7hdxprG9un3+SLP183q3ik3cJDiAwlFdF8L6SIvrvc9LrpTyIg76T7QJZdEkWNj43wiSaA0TJyQpu2IF2jsSLWFx7WkAmG40hFxJ1tI+Jf+EVG8DtoDRcNi+TtVGULnWrSz3EWnVcxR3EJhXnrwYWe1kJtNW5txuHAO"},
|
||||
{"key":"csp_AppSxGuard_即看","name":"雷蒙影视 | 🐻即看(SP)","type":3,"api":"csp_AppSxGuard","timeout":15,"searchable":1,"quickSearch":0,"changeable":0,"ext":"rfOX1voDIQhH8epBwtCFsub1+2maloq8lmJuL821WUsZJAZft2UtrrwhKK5Zxt1toWyFctBUmThhuDAjVuU="},
|
||||
{"key":"csp_AppTTGuard_欢视","name":"雷蒙影视 | 👓欢视(SP)","type":3,"api":"csp_AppTTGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext":"uqGL1bNENExT9fFAy5mE5qU="},
|
||||
{"key":"csp_AueteGuard","name":"雷蒙影视 | 🏝奥特(SP)","type": 3,"api":"csp_AueteGuard","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://auete.com/"},
|
||||
{"key":"csp_JPJGuard","name":"雷蒙影视 | 🐭荐片(SP)","type":3,"api":"csp_JPJGuard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":0},
|
||||
|
@ -105,6 +100,7 @@
|
|||
{"key":"csp_DaGongRen","name":"雷蒙影视 | 👤打工人电影(SP)","type":3,"api":"csp_DaGongRen","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_HkTv","name":"雷蒙影视 | 🌥TVB云播(SP)","type":3,"api":"csp_HkTv","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_XuanFeng","name":"雷蒙影视 | 🌀旋风影视(SP)","type":3,"api":"csp_XuanFeng","searchable":1,"changeable":1,"ext":{}},
|
||||
{"key":"csp_YDjisu","name":"雷蒙影视 | ⚡云盘急速(SP)","type":3,"api":"csp_YDjisu","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_AppXY","name":"雷蒙影视 | ⭐星芽短剧(SP)","type":3,"api":"csp_AppXY","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Living","name":"雷蒙影视 | 🍋柠檬直播(SP)","type":3,"api":"csp_Living","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lemonlive.pages.dev"},
|
||||
{"key":"csp_Dm84Guard","name":"雷蒙影视 | 🐾动漫巴士(SP)","type":3,"api":"csp_Dm84Guard","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"filterable":1},
|
||||
|
@ -112,7 +108,7 @@
|
|||
{"key":"csp_Anime1Guard","name":"雷蒙影视 | 🐾Anime1动画线上看(SP)","api":"csp_Anime1Guard","type":3,"filterable":1,"quickSearch":1,"searchable":1},
|
||||
{"key":"csp_YHDM","name":"雷蒙影视 | 🐾樱花动漫(SP)","api":"csp_YHDM","timeout":15,"type":3,"filterable":1,"quickSearch":1,"searchable":1},
|
||||
{"key":"csp_SP360","name":"雷蒙影视 | 3️⃣360(SP)","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_kanqiu926Guard","name":"雷蒙影视 | ⚽926看球(SP)","type":3,"api":"csp_kanqiu926Guard","timeout":15,"searchable":0,"changeable":0,"style":{"type":"list"}},
|
||||
{"key":"csp_kanqiu926Guard","name":"雷蒙影视 | ⚽926看球(SP)","type":3,"api":"csp_kanqiu926Guard","timeout":15,"searchable":0,"changeable":0,"style":{"type":"list"},"ext":"uqGL1fpJNAUa4uUHi9iMsef1+C/R"},
|
||||
{"key":"csp_Sir88Guard","name":"雷蒙影视 | ⚽88看球(SP)","type":3,"api":"csp_Sir88Guard","timeout":15,"searchable":0,"changeable":0,"style":{"type":"list"}},
|
||||
{"key":"csp_KanqiuGuard","name":"雷蒙影视 | ⚽看球(SP)","type":3,"api":"csp_KanqiuGuard","timeout":15,"searchable":0,"changeable":0,"style":{"type":"list"}},
|
||||
{"key":"csp_AppYsV2_臻彩","name":"雷蒙影视 | 🅰臻彩(SP)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://cmszcsj.lfytv.cn/api.php/app/"},
|
||||
|
@ -126,24 +122,23 @@
|
|||
{"key":"csp_TTian_追剧_QJ","name":"雷蒙影视 | ✈追剧(SP)","type":3,"api":"csp_TTian","playerType":2,"searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939791h1l2681i6g94li291li"},
|
||||
{"key":"csp_JpysQJ","name":"雷蒙影视 | 🥇️剧评(SP)","type":3,"api":"csp_JpysQJ","playerType":1,"ext":"7lj763gg402i7942463j9j9jh84l8798l8gli652828g332i"},
|
||||
{"key":"csp_qiao2_QJ","name":"雷蒙影视 | 🎄巧技(SP)","type":3,"api":"csp_qiao2","playerType":2,"ext":"7lj763gg402i79425739i7jghj118797l4hj840gi18633331l4708g2h7145403549g44l8ii56i187681hkjj3hhgh1ih3l32j250lk1k786lj20j468hk3hli4l46gig4i3g7g2722328j0136h01i7g5183k22k7gg3i72hk81gl8k9839kl7i0707"},
|
||||
{"key":"csp_AppYsV2QJ_超级一","name":"雷蒙影视 | 🎐超级一(SP)","type":3,"api":"csp_AppYsV2QJ","playerType":2,"ext":"7lj763gg09397907492i87j2g8128687kgg1ih5hij8772225j4i54l2k91k151k138612h68842ji"},
|
||||
{"key":"csp_Xdai_云云_QJ","name":"雷蒙影视 | ☁云云(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg093979580864jh86k312jji4g5k69h0k9hj36h760g1954g2h71j4801158g09h3i00191ji6i1kk980g3l919h6g131680gk0kg98lk7kj23kg76il84841ghg693hkg72777"},
|
||||
{"key":"csp_AppYsV2QJ_超级","name":"雷蒙影视 | 🎐超级(SP)","type":3,"api":"csp_AppYsV2QJ","playerType":2,"ext":"7lj763gg09397907492i87j2g8128687kgg1ih5hij8772225j4i54l2k91k151k138612h68842ji"},
|
||||
{"key":"csp_Xdai_云云_QJ","name":"雷蒙影视 | ☁云云(SP)","type":3,"api":"csp_Qiji","playerType":2,"ext":"7lj763gg402i79425h2384j4g949j899hll9990i9kjl6l740h1342hjlg1848401g8610h9995i998j351gl38kklkj1hkhll757010k7hji6h377ih37k060g35161jhl3i5h0l2702g7299452l4297k5697g5390lk6935k2i9g48l8j2kh27l1g014k7j9475g8"},
|
||||
{"key":"csp_Qiji_橘子_QJ","name":"雷蒙影视 | 🍊橘子(SP)","type":3,"api":"csp_Qiji","playerType":2,"ext":"7lj763gg0939795i0678i481k40hi2i3ghlg840i9lj166700g1449g3k5244k2017h35698h4739ih31117kigil3k02hl2jk6i5155ih9kkgl311gl37g240g85111ggg2"},
|
||||
{"key":"csp_Qiji_狂风_QJ","name":"雷蒙影视 | 🌪狂风(SP)","type":3,"api":"csp_Qiji","playerType":2,"ext":"7lj763gg402i7942522k849kg4499i9hl1k5ik48i38l292l1l4l1klgl41255091i8313k2ik478h8j751kh28kh9gk56l3k874684ll3h7j9k83l9034li7lhi5g45k8k3j6hkk760276g8h5h295i9jk7597177g3kk7g3hh79ili"},
|
||||
{"key":"csp_Muou_火猫_QJ","name":"雷蒙影视 | 😺火猫(SP)","type":3,"api":"csp_Muou","playerType":2,"ext":"7lj763gg0939790i413gi484k8058896highi4414h68l7g6hk8qiaojig9k2k289l9ik807i213k5j602"},
|
||||
{"key":"csp_Qiji_狂风_QJ","name":"雷蒙影视 | 🌪狂风(SP)","type":3,"api":"csp_Qiji","playerType":2,"ext":"7lj763gg402i79425k2785j5g552i29kljg4855ki38l3g24570l0lkhkj0h4g191k8449gk8j5h9i942g0gh891k2l104l6k765664gljg7i2l336942gl67jh9405ighg592"},
|
||||
{"key":"csp_Muou_火猫_QJ","name":"雷蒙影视 | 😺火猫(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942523l84j0h849j4jiljggj913il87712l5j530llhh4431503029k48h68l579g873712g887h8ll17kghl302610l0ggjlk00ij31ijg409l666gg9i7l38jji5i0l2183686g74hhj87g4j58k2ig5l08iik581ji9778l038"},
|
||||
{"key":"csp_Muou_驿站_QJ","name":"雷蒙影视 | 🚗驿站(SP)","type":3,"api":"csp_Muou","playerType":2,"ext":"7lj763gg402i7942403h83i2h945858hljhji148i18k2837535112l2qiaojik9075l17028i49g192419i8g3245h3j1l9gi02h6k7732650h3h09jkg759j65hj39l50347k3gj97l4g12l7h6418h6k9j04l26i1glgj3631973hh280lkihjh "},
|
||||
{"key":"csp_Muou_主角_QJ","name":"雷蒙影视 | 👓主角(SP)","type":3,"api":"csp_Muou","playerType":2,"ext":"7lj763gg402i794247258k9jh6598585l3g6ij13il8g20g9qiaoji8j9i9k1g3k90h7i507i213k5j602"},
|
||||
{"key":"csp_Muou_柚子_QJ","name":"雷蒙影视 | 🍈柚子(SP)","type":3,"api":"csp_Muou","playerType":2,"ext":"7lj763gg402i79425i3l85i6hqiaoji14i9ijiljhhj910il877129534l1ik9l1184k401g9g54gk8j5i9097751kh28kh9j12ji8i541446kghk792gj76jj64g621h95554k67k18797k9jl3l058g4h59763kh1i2823llg3"},
|
||||
{"key":"csp_Xdai_永夜_QJ","name":"雷蒙影视 | 🌙永夜(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942503g9gj0hj4li286k8h1j913j490266k53510hk6kh1h151g0382419ih40485880116ggj5i1j04jllg9304142il9k9jkg2ghl36k4399g6115k2gk9297kg23752g"},
|
||||
{"key":"csp_Muou_柚子_QJ","name":"雷蒙影视 | 🍈柚子(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg093979590864j880k512jji3g6k69h0496ji693j43161il9gj11020i09i55hhh8h049j8i270ikg84lig81khkl2722758k8g19jl22k996gg23l"},
|
||||
{"key":"csp_Xdai_永夜_QJ","name":"雷蒙影视 | 🌙永夜(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942522l99jhh90ljii5g1l09i13i39g2l6i514l56l1li1k5107159113h6945h8g91351kgkijl5l315g8l373614ik8lijlk4329907gg37867541j6k3kjl0k15473488h47206lihgl635k739jkk4175l1kjljh59l2ihj394j43"},
|
||||
{"key":"csp_Muou_趣看_QJ","name":"雷蒙影视 | 🥽趣看(SP)","type":3,"api":"csp_Muou","playerType":2,"ext":"7lj763gg402i7942463j9j9jg1499j87l9g9i413il8gqiaoji20g7g4919j3g019296lk9351hh3k5gg38lj0754il3jg"},
|
||||
{"key":"csp_Shark_专业_QJ","name":"雷蒙影视 | 👔专业(SP)","type":3,"api":"csp_Shark","playerType":1,"ext":"7lj763gg0939795i007gi487k212jhjig3lh9g079jj16g774k401gk0kg135l190i8k45hh94418hj52301kiijg3h248lhk265774gk5hiiil0238439k06kg95541k6l6i3g3kk6l3g60875g245491l4"},
|
||||
{"key":"csp_Xdai_星河_QJ","name":"雷蒙影视 | 💫星河(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i794247239g9jk10kjl82l3g6845ki2i66j7906194lg6g8460h5k548i51l8805497807509g597kgk419l4l461675gl5g5ikkk329i28lg60h15541k9l3i3h1l266357j8j5625409hl8543522k5"},
|
||||
{"key":"csp_Xdai_时常_QJ","name":"雷蒙影视 | 🏛时常(SP)","type":3,"api":"csp_Xdai","playerType":1,"ext":"7lj763gg402i79425i3l85i6h14i9ijiljqiaojihhj910il877129534l1ik9l1184k401g9g54gk8j5i9097751kh28kh9j12ji8i541446kghk19hg576j46gg538l41l0kkkklj6hk72gjj3li45h3h492747k8g976kk5h43i69h6"},
|
||||
{"key":"csp_Xdai_鲨鱼_QJ","name":"雷蒙影视 | 🦈鲨鱼(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942463j9j9jh7498j9gl6k6i952i1953g7373163lg7jh4k7k5638i70hk2ih038l82693ikgg7g2jk41i2g8432508h1k19gk077j76j"},
|
||||
{"key":"csp_Shark_雨滴_QJ","name":"雷蒙影视 | 💧雨滴(SP)","type":3,"api":"csp_Shark","playerType":1,"ext":"7lj763gg402i794247239g9jk10kjl82l3g6845ki2i66j7906194lg6g8460h5k548i51l8824hjj902309g182l7kl0hk3l4776346lihki7kl3kj425kl3jk31j0kggkhj0g7l5632376984k395496k449626gh0k66l26k7j6h49j9331h9701k106i"},
|
||||
{"key":"csp_Xdai_时常_QJ","name":"雷蒙影视 | 🏛时常(SP)","type":3,"api":"csp_Qiji","playerType":1,"ext":"7lj763gg402i7942423k8hi1h1498h87k1hi9h0l9ljj69771i4k08k0h4145543139753h0825g9i91751ih18gklk916k4k32k7751k9lj9gh2329j29kl7ih94i52lhk2i5h7k563732gii1669038kk45i6760h0kl6932l5jgljj7j87jl43k03423j31"},
|
||||
{"key":"csp_Xdai_鲨鱼_QJ","name":"雷蒙影视 | 🦈鲨鱼(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942463j9j9jg8558j9jlgh1j913il86313j776l14ljjh3l5k383999648j9064g6h22738938il8jk30k2i6427h67jkhglji910996ig539"},
|
||||
{"key":"csp_Xdai_优质_QJ","name":"雷蒙影视 | 🌈优质(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942503g83j2g04i8090khhh8451ik902l6l53510hg9gi410i5607974jhk994283883904gk88l3k549h1g87i754kkjh3jhki2g8724k064g85411gigljkl3g620"},
|
||||
{"key":"csp_Xdai_客星_QJ","name":"雷蒙影视 | 🍃客星(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg402i7942503g839jh8558j82k2k6i952i1i73l2l4k1349g5g144085l49i40ih597509i863401klj1g0g44hh4g132260lk6hji9l3248g21g23ll8"},
|
||||
{"key":"csp_Xdai_客星_QJ","name":"雷蒙影视 | 🍃客星(SP)","type":3,"api":"csp_Xdai","playerType":2,"ext":"7lj763gg0939790i413gi486k509jgi3ggk6j244j6j36j76041707h0lk124l0l0h867j83h576h3j66h4lk89lh5lh1jl3l170647kj09lklji74j56lg673li1h16"},
|
||||
{"key":"csp_Hudie_QJ","name":"雷蒙影视 | 🦋蝴蝶(SP)","type":3,"api":"csp_Hudie","playerType":2,"ext":"7lj763gg402i794255648kj0hj539g9hl7k6jk52ji"},
|
||||
{"key":"csp_AI2_速搜_QJ","name":"雷蒙影视 | 🔎速搜(SP)","type":3,"api":"csp_AI2","searchable":1,"quickSearch":1,"filterable":0,"playerType":2,"ext":"7lj763gg0939790i4123i4i0g54l8387hihii54j96jh6k72015j14k3l8045l081i9k52g7994197823i15g18hk2k808hjhl2l754kkjlij8k9358g28hj7hg25j0llkkk8ig8k5782i649k4g2l45i3g51h3227k7gj367kh69llk99g626hh61131l6k2k9069g8l303814k812j733g1kik5lg086591h990jj2725lh73h14i59j104j092h481i3032hg668ki4g907638k7g7jkj2551h71jg24g44952j2hk34k5g6ik13001g29ij71j853gil4j62g75gj9843l357k2i4k04j0k2044000j6il06k964j83i3i10332123j0 "},
|
||||
{"key":"csp_Nmvod_QJ","name":"雷蒙影视 | 🍋柠檬(SP)","type":3,"api":"csp_Nmvod","playerType":2,"ext":"7lj763gg402i7942503g839jg74h8h88highi40799jh6i6k454419l0l5184k0g549h0kg2i01i838i2h42g891lgg1"},
|
||||
{"key":"csp_AI_1_QJ","name":"雷蒙影视 | ️💻AI1(SP)","type":3,"api":"csp_AI","searchable":1,"quickSearch":1,"filterable":0,"playerType":2,"ext":"7lj763gg0939795i067li482k704i2igg2k6980j95i631231j400hlgh707531k54864lh88k5h9781740hh287h9k035k8kg697852k5lj9kh276i575jk6kgk444kkkl8j1gggj370h768h473015hll64h265j82hg5667h79k93j4jk16l6215l327l71i922ilh6499j4k9h66297k5gjh4ii39j5107h837lh5104k477449hj1104h1i384l164k779h4595jlkh577l8i6570l23h4hg71hj92243h9076glj4k1k3il2404gl2i4i445ii0ji55578"},
|
||||
{"key":"csp_AI_2_QJ","name":"雷蒙影视 | ️💻AI2(SP)","type":3,"api":"csp_AI","searchable":1,"quickSearch":1,"filterable":0,"playerType":2,"ext":"7lj763gg0939795i067li482k704i2igg2k6980j95i631231j5203kgkg585g1k12j84jhl881j8396340hh487l3h30kk8l42l6851klhgjlk836ig69hj36k31i5ikhlki3gjli7k"},
|
||||
|
@ -157,20 +152,33 @@
|
|||
{"key":"csp_Auete_QJ","name":"雷蒙影视 | 🛰Auete(SP)","type":3,"api":"csp_Auete","searchable":1,"playerType":1,"quickSearch":1,"filterable":1},
|
||||
|
||||
// ⇩⇩ FM SPIDER ⇩⇩
|
||||
{"key":"csp_AppRJ_潮流_FM","name":"雷蒙影视 | 🏜潮流(SP)","type":3,"api":"csp_AppRJ","ext":"http://v.rbotv.cn"},
|
||||
{"key":"csp_AppRJ_梦回_FM","name":"雷蒙影视 | 🏈梦回(SP)","type":3,"api":"csp_AppRJ","ext":"http://v.lkuys.cn"},
|
||||
{"key":"csp_AppRJ_星辉_FM","name":"雷蒙影视 | 🦢星辉(SP)","type":3,"api":"csp_AppRJ","ext":"http://tt.ysdqjs.cn"},
|
||||
{"key":"csp_AppGet_肥猫_FM","name":"雷蒙影视 | 🐼肥猫(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://mac.555618.xyz","dataKey":"#getapp@TMD@2025","siteApi":"get","version":"201"}},
|
||||
{"key":"csp_AppGet_干饭_FM","name":"雷蒙影视 | 🍚干饭(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://omofun.lol/coffee.txt","dataKey":"qwertyuiopqwertm","siteApi":"qiji","version":"301"}},
|
||||
{"key":"csp_AppGet_光盘_FM","name":"雷蒙影视 | 📀光盘(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://app.xifanys.com","dataKey":"HM6Ly9yeS4ya3dvL","siteApi":"get","version":"119"}},
|
||||
{"key":"csp_AppGet_行动_FM","name":"雷蒙影视 | 😌行动(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://vip.123pan.cn/1848451100/zl/xfdd.txt","dataKey":"xasdasdqwertyuio","siteApi":"get","version":"304"}},
|
||||
{"key":"csp_AppGet_再来_FM","name":"雷蒙影视 | ✌️再来(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://cnb.cool/xiaomideyun/xiaomideyun/-/git/raw/main/kan.txt","dataKey":"2268331221bobobo","siteApi":"get","version":"107"}},
|
||||
{"key":"csp_AppGet_一碗_FM","name":"雷蒙影视 | 🥣一碗(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://bind.315999.xyz/89.txt","dataKey":"#getapp@TMD@2025","siteApi":"get","version":"102"}},
|
||||
{"key":"csp_AppGet_猫抓_FM","name":"雷蒙影视 | 🐱猫抓(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://qjappcms.ll4k.xyz","dataKey":"1yGA85sJ5STtE7uj","siteApi":"qiji","version":""}},
|
||||
{"key":"csp_AppGet_仓鼠_FM","name":"雷蒙影视 | 🐹耗子(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://lanyinghz.oss-cn-hangzhou.aliyuncs.com/lanyingxmy.txt","dataKey":"ca94b06ca359d80e","siteApi":"qiji","version":""}},
|
||||
{"key":"csp_AppGet_蔬菜_FM","name":"雷蒙影视 | 🥦蔬菜(SP)","type":3,"api":"csp_AppGet","ext":{"url":"http://huohu.yihn.cc","dataKey":"huohushipingetap","siteApi":"get","version":"140"}},
|
||||
{"key":"csp_AppGet_黑猫_FM","name":"雷蒙影视 | 🐼黑猫(SP)","type":3,"api":"csp_AppGet","ext":{"url":"https://dm.xxdm123.top:9991","dataKey":"0fe3b5781782c621","siteApi":"get","version":"203"}},
|
||||
{"key":"csp_AppGet_小丑_FM","name":"雷蒙影视 | 🤡小丑(SP)","type":3,"api":"csp_AppGet","ext":{"url":"http://172.247.192.138:18520","dataKey":"SuNlEkOLAoWJj1Oe","siteApi":"qiji","version":""}},
|
||||
{"key":"csp_Jpys_FM","name":"雷蒙影视 | 🥇️金牌(SP)","type":3,"api":"csp_Jpys"},
|
||||
{"key":"csp_Wwys_FM","name":"雷蒙影视 | 🌾️农民(SP)","type":3,"api":"csp_Wwys","ext":"https://wwgz.cn"},
|
||||
{"key":"csp_KmeiJu_FM","name":"雷蒙影视 | 🍐鸭梨(SP)","type":3,"api":"csp_KmeiJu"},
|
||||
{"key":"csp_FourK_FM","name":"雷蒙影视 | 🐿️绝对(SP)","type":3,"api":"csp_FourK","ext":"https://www.4kvm.tv"},
|
||||
{"key":"csp_Lkdy_FM","name":"雷蒙影视 | 🏔️来看(SP)","type":3,"api":"csp_Lkdy"},
|
||||
{"key":"csp_Xlys_FM","name":"雷蒙影视 |🏔️修罗(SP)","type":3,"api":"csp_Xlys","ext":"https://xl01.com.de"},
|
||||
{"key":"csp_Tvyb_FM","name":"雷蒙影视 | ☁︎云播(SP)","type":3,"api":"csp_Tvyb"},
|
||||
{"key":"csp_Qiyou_FM","name":"雷蒙影视 | 🥝奇优(SP)","type":3,"api":"csp_Qiyou"},
|
||||
{"key":"csp_Quanwk_FM","name":"雷蒙影视 | 👁🗨全看(SP)","type":3,"api":"csp_Quanwk","ext":"https://www.91qkw.com"},
|
||||
{"key":"csp_Jiaozi_FM","name":"雷蒙影视 | 🌎饺子(SP)","type":3,"api":"csp_Jiaozi","playerType":2},
|
||||
{"key":"csp_SaoHuo_FM","name":"雷蒙影视 | 🔥骚火(SP)","type":3,"api":"csp_SaoHuo","playerType":2,"ext":"https://shdy5.us"},
|
||||
{"key":"csp_Gz360_FM","name":"雷蒙影视 | 🍉瓜子(SP)","type":3,"api":"csp_Gz360","playerType":2},
|
||||
{"key":"csp_LiteApple_FM","name":"雷蒙影视 | 🍎苹果(SP)","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Czsapp_FM","name":"雷蒙影视 | 🏭厂长(SP)","type":3,"api":"csp_Czsapp","playerType":2,"searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.czzymovie.com"},
|
||||
{"key":"csp_AppXYFM","name":"雷蒙影视 | 🎀️星牙(SP)","type":3,"api":"csp_AppXYFM"},
|
||||
{"key":"csp_FourK_FM","name":"雷蒙影视 | 🐿️绝对(SP)","type":3,"api":"csp_FourK","ext":"https://www.4kvm.tv"},
|
||||
{"key":"csp_Kugou_FM","name":"雷蒙影视 | 🐾酷狗(SP)","type":3,"api":"csp_Kugou","playerType":2,"ext":{"classes":[{"type_name":"酷狗","type_id":"kugou"}]}},
|
||||
{"key":"csp_Kanqiu_FM","name":"雷蒙影视 | ⚾看球(SP)","type":3,"api":"csp_Kanqiu","searchable":1,"quickSearch":1,"changeable":0,"gridview":3,"style":{"type":"list"}},
|
||||
|
||||
|
@ -189,9 +197,9 @@
|
|||
{"key":"csp_CandyMuj_yinfans","name":"雷蒙影视 | 🧲音范丝(SP)","type":3,"api":"csp_CandyMuj_yinfans","searchable":1,"quickSearch":1,"filterable":1},
|
||||
|
||||
// ⇩⇩ 网盘搜索 ⇩⇩
|
||||
{"key":"csp_SeedhubGuard","name":"雷蒙影视 | 📀SeedHub(网盘APP扫码)","type":3,"api":"csp_SeedhubGuard","changeable":0,"ext":"5++kwLhNYm9UrO9wh7Dl7eKamTee4s/5","searchable":1,"quickSearch":1,"changeable":0, "indexs":0,"style":{"type":"list"}},
|
||||
{"key":"csp_KkSsGuard","name":"雷蒙影视 | 📀抠抠(网盘APP扫码)","type":3,"api":"csp_KkSsGuard","searchable":1,"quickSearch":1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
{"key":"csp_UuSsGuard","name":"雷蒙影视 | 📀优汐(网盘APP扫码)","type":3,"api":"csp_UuSsGuard","searchable":1,"quickSearch":1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
{"key":"csp_PanSsoGuard","name":"雷蒙影视 | 📀盘他(网盘APP扫码)","type":3,"api":"csp_PanSsoGuard","searchable":1,"quickSearch":1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
{"key":"csp_YpanSoGuard","name":"雷蒙影视 | 📀盘她(网盘APP扫码)","type":3,"api":"csp_YpanSoGuard","searchable":1,"quickSearch":1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
{"key":"csp_XzsoGuard","name":"雷蒙影视 | 📀盘它(网盘APP扫码)","type":3,"api":"csp_XzsoGuard","searchable": 1,"quickSearch": 1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
{"key":"csp_MIPanSoGuard","name":"雷蒙影视 | 📀米搜(网盘APP扫码)","type":3,"api":"csp_MIPanSoGuard","searchable":1,"quickSearch":1,"changeable":0,"ext":{"Cloud-drive":"tvfan/Cloud-drive.txt","from":"4k|auto"}},
|
||||
|
@ -213,48 +221,45 @@
|
|||
|
||||
|
||||
// ⇩⇩ PY ⇩⇩
|
||||
{"key":"py_咖啡_APP","name":"雷蒙影视 | 🧿咖啡(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://cdn-tupic-duofun-neimenggu.56uxi.com/2.txt","api":"/api.php/qijiappapi","datakey":"qwertyuiopqwertt","dataiv":"qwertyuiopqwertt"}},
|
||||
{"key":"py_在看_APP","name":"雷蒙影视 | 🧿在看(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://149.88.64.161/","api":"/api.php/getappapi","datakey":"123456789ABCDEFG","dataiv":"123456789ABCDEFG"}},
|
||||
{"key":"py_APP4K_APP","name":"雷蒙影视 | 🧿APP4K(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://59.153.167.186","api":"/api.php/getappapi","datakey":"SDSFET23215FDSF2","dataiv":"SDSFET23215FDSF2"}},
|
||||
{"key":"py_知了_APP","name":"雷蒙影视 | 🧿知了(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://zzos.cc","api":"/api.php/getappapi","datakey":"zzoccc2025555555","dataiv":"zzoccc2025555555"}},
|
||||
{"key":"py_麻花_APP","name":"雷蒙影视 | 🧿麻花(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://124.223.27.166:130","api":"/api.php/getappapi","datakey":"q7gj4f9br3fls6nh","dataiv":"q7gj4f9br3fls6nh"}},
|
||||
{"key":"py_豆丁_APP","name":"雷蒙影视 | 🧿豆丁(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://vip.123pan.cn/1848451100/zl/xfdd.txt","api":"/api.php/getappapi","datakey":"xasdasdqwertyuio","dataiv":"xasdasdqwertyuio"}},
|
||||
{"key":"py_灵虎_APP","name":"雷蒙影视 | 🧿灵虎(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://bind.315999.xyz/89.txt","api":"/api.php/getappapi","datakey":"#getapp@TMD@2025","dataiv":"#getapp@TMD@2025"}},
|
||||
{"key":"py_橘猫_APP","name":"雷蒙影视 | 🧿橘猫(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.jm4k.top","api":"/api.php/qijiappapi","datakey":"pBVmysmGX8TsgrQN","dataiv":"pBVmysmGX8TsgrQN"}},
|
||||
{"key":"py_顾我_APP","name":"雷蒙影视 | 🧿顾我(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://121.62.21.14:520","api":"/api.php/qijiappapi","datakey":"ca94b06ca3c7d80e","dataiv":"ca94b06ca3c7d80e"}},
|
||||
{"key":"py_雄鹰_APP","name":"雷蒙影视 | 🧿雄鹰(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://lanyinghz.oss-cn-hangzhou.aliyuncs.com/lanyingxmy.txt","api":"/api.php/qijiappapi","datakey":"ca94b06ca359d80e","dataiv":"ca94b06ca359d80e"}},
|
||||
{"key":"py_榴莲_APP","name":"雷蒙影视 | 🧿榴莲(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.ll4k.xyz","api":"/api.php/qijiappapi","datakey":"1yGA85sJ5STtE7uj","dataiv":"1yGA85sJ5STtE7uj"}},
|
||||
{"key":"py_蓝鹰_APP","name":"雷蒙影视 | 🧿蓝鹰(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://172.247.192.138:18520","api":"/api.php/qijiappapi","datakey":"SuNlEkOLAoWJj1Oe","dataiv":"SuNlEkOLAoWJj1Oe"}},
|
||||
{"key":"py_仓鼠_APP","name":"雷蒙影视 | 🧿仓鼠(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.cs4k.top","api":"/api.php/qijiappapi","datakey":"Z98KXaLtO2wC1Pte","dataiv":"Z98KXaLtO2wC1Pte"}},
|
||||
{"key":"py_鲸鱼_APP","name":"雷蒙影视 | 🧿鲸鱼(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json","api":"/api.php/qijiappapi","datakey":"AAdgrdghjfgswerA","dataiv":"AAdgrdghjfgswerA"}},
|
||||
{"key":"py_热剧_APP","name":"雷蒙影视 | 🧿热剧(PY)","type":3,"api":"./PY/app/get3.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://app-qy.oss-cn-shanghai.aliyuncs.com/rebo.txt","api":"/api.php/qijiappapi","datakey":"8191A7F47B37882F","dataiv":"8191A7F47B37882F"}},
|
||||
{"key":"py_码头_APP","name":"雷蒙影视 | 🧿码头(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.lgmt.cc","api":"/api.php/getappapi","datakey":"asfjaskasgggassf","dataiv":"asfjaskasgggassf"}},
|
||||
{"key":"py_米诺_APP","name":"雷蒙影视 | 🧿米诺(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://www.milkidc.cn","api":"/api.php/getappapi","datakey":"20c79c979da8db0f","dataiv":"20c79c979da8db0f"}},
|
||||
{"key":"py_云速_APP","name":"雷蒙影视 | 🧿云速(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://59.153.167.137:7788/1.json","api":"/api.php/getappapi","datakey":"4d83b87c4c5ea111","dataiv":"4d83b87c4c5ea111"}},
|
||||
{"key":"py_桃子_APP","name":"雷蒙影视 | 🧿桃子(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://appcms.tzys.xyz","api":"/api.php/getappapi","datakey":"KL6vlZkw6WL5x90U","dataiv":"KL6vlZkw6WL5x90U"}},
|
||||
{"key":"py_魔方_APP","name":"雷蒙影视 | 🧿魔方(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://mfsp33.top","api":"/api.php/getappapi","datakey":"1234567887654321","dataiv":"1234567887654321"}},
|
||||
{"key":"py_海豚_APP","name":"雷蒙影视 | 🧿海豚(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://getapp.hiapp.com.cn","api":"/api.php/getappapi","datakey":"2268331221bobobo","dataiv":"2268331221bobobo"}},
|
||||
{"key":"py_溜溜_APP","name":"雷蒙影视 | 🧿溜溜(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://appcms.ll4k.xyz","api":"/api.php/getappapi","datakey":"NiDGaKiVnkO3QX1Q","dataiv":"NiDGaKiVnkO3QX1Q"}},
|
||||
{"key":"py_瓜萌_APP","name":"雷蒙影视 | 🧿瓜萌(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.guahd.com","api":"/api.php/getappapi","datakey":"f2A7D4B9E8C16531","dataiv":"f2A7D4B9E8C16531"}},
|
||||
{"key":"py_晴天_APP","name":"雷蒙影视 | 🧿晴天(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.sun4k.top","api":"/api.php/getappapi","datakey":"sBxqXVF5pAHbGzrH","dataiv":"sBxqXVF5pAHbGzrH"}},
|
||||
{"key":"py_橘子_APP","name":"雷蒙影视 | 🧿橘子(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://api1.bffree.cn","api":"/api.php/getappapi","datakey":"2015692015692015","dataiv":"2015692015692015"}},
|
||||
{"key":"py_彼岸_APP","name":"雷蒙影视 | 🧿彼岸(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://mfsp33.top","api":"/api.php/getappapi","datakey":"1234567887654321","dataiv":"1234567887654321"}},
|
||||
{"key":"py_雨滴_APP","name":"雷蒙影视 | 🧿雨滴(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://c8w2ov7u5wg2z1o8p21c.aliyuncs.click:27899","api":"/api.php/getappapi","datakey":"k9o3p2c8b7m3z0o8","dataiv":"k9o3p2c8b7m3z0o8"}},
|
||||
{"key":"py_萝卜_APP","name":"雷蒙影视 | 🧿萝卜(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://apiapplbys.lbys.app:5678","api":"/api.php/getappapi","datakey":"apiapplbyskey168","dataiv":"apiapplbyskey168"}},
|
||||
{"key":"py_米兔_APP","name":"雷蒙影视 | 🧿米兔(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://new.tkbot.fun","api":"/api.php/getappapi","datakey":"d032c12876bc6848","dataiv":"d032c12876bc6848"}},
|
||||
{"key":"py_小红_APP","name":"雷蒙影视 | 🧿小红(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.xiaohys.com","api":"/api.php/getappapi","datakey":"ENonBHeVBoYZhVUV","dataiv":"ENonBHeVBoYZhVUV"}},
|
||||
{"key":"py_星河_APP","name":"雷蒙影视 | 🧿星河(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://121.62.22.204:9876","api":"/api.php/getappapi","datakey":"f5e2tx53ykp6s2c9","dataiv":"f5e2tx53ykp6s2c9"}},
|
||||
{"key":"py_若惜_APP","name":"雷蒙影视 | 🧿若惜(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://110.40.59.188:9527","api":"/api.php/getappapi","datakey":"ebad3f1a58b13933","dataiv":"ebad3f1a58b13933"}},
|
||||
{"key":"py_外剧_APP","name":"雷蒙影视 | 🧿外剧(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://guowaiju.com","api":"/api.php/getappapi","datakey":"7xv16h7qgkrs9b1p","dataiv":"7xv16h7qgkrs9b1p"}},
|
||||
{"key":"py_诺映_APP","name":"雷蒙影视 | 🧿诺映(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.noad.top","api":"/api.php/getappapi","datakey":"708FA298F0855840","dataiv":"708FA298F0855840"}},
|
||||
{"key":"py_曼波_APP","name":"雷蒙影视 | 🧿曼波(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://app.omofun1.top","api":"/api.php/getappapi","datakey":"66dc309cbeeca454","dataiv":"66dc309cbeeca454"}},
|
||||
{"key":"py_稀饭_APP","name":"雷蒙影视 | 🧿稀饭(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://xfapp-1305390065.cos.ap-guangzhou.myqcloud.com/getapp.txt","api":"/api.php/getappapi","datakey":"1yZ2Spn9krnzVKoC","dataiv":"1yZ2Spn9krnzVKoC"}},
|
||||
{"key":"py_咕咕_APP","name":"雷蒙影视 | 🧿咕咕(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.gugu3.com","api":"/api.php/getappapi","datakey":"nKfZ8KX6JTNWRzTD","dataiv":"nKfZ8KX6JTNWRzTD"}},
|
||||
{"key":"py_米饭_APP","name":"雷蒙影视 | 🧿米饭(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://45.43.29.111:9527","api":"/api.php/getappapi","datakey":"GETMIFUNGEIMIFUN","dataiv":"GETMIFUNGEIMIFUN"}},
|
||||
{"key":"py_次元_APP","name":"雷蒙影视 | 🧿次元(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://jjjj.nilinili.org","api":"/api.php/getappapi","datakey":"672263e98f232a05","dataiv":"672263e98f232a05"}},
|
||||
{"key":"py_派对_APP","name":"雷蒙影视 | 🧿派对(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.acg.party","api":"/api.php/getappapi","datakey":"AmtMYFCJDPoTlK7z","dataiv":"AmtMYFCJDPoTlK7z"}},
|
||||
{"key":"py_丫丫_APP","name":"雷蒙影视 | 🧿丫丫(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://tv.yy-fun.cc","api":"/api.php/getappapi","datakey":"qkxnwkfjwpcnwycl","dataiv":"qkxnwkfjwpcnwycl"}},
|
||||
{"key":"py_黑猫_APP","name":"雷蒙影视 | 🧿黑猫(PY)","type":3,"api":"./PY/app/get4.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://dm.xxdm123.top:9991","api":"/api.php/getappapi","datakey":"0fe3b5781782c621","dataiv":"0fe3b5781782c621"}},
|
||||
{"key":"py_咖啡_APP","name":"雷蒙影视 | 🧿咖啡(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://omofun.lol/1.txt","api":"/api.php/getappapi","datakey":"skdhalkshqklwkj1","dataiv":"skdhalkshqklwkj1"}},
|
||||
{"key":"py_蓝光_APP","name":"雷蒙影视 | 🧿蓝光(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://122.228.193.2:9654","api":"/api.php/getappapi","datakey":"ca94b06ca3c7d80e","dataiv":"ca94b06ca3c7d80e"}},
|
||||
{"key":"py_魔方_APP","name":"雷蒙影视 | 🧿魔方(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.snysw.xyz/mfys.txt","api":"/api.php/getappapi","datakey":"1234567887654321","dataiv":"1234567887654321"}},
|
||||
{"key":"py_小野_APP","name":"雷蒙影视 | 🧿小野(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://appcms.xy4k.com","api":"/api.php/getappapi","datakey":"7SDWjknU34zqFbVr","dataiv":"7SDWjknU34zqFbVr"}},
|
||||
{"key":"py_爱看_APP","name":"雷蒙影视 | 🧿爱看(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://154.37.220.65","api":"/api.php/getappapi","datakey":"uI1TkPJC8B46AyN3","dataiv":"uI1TkPJC8B46AyN3"}},
|
||||
{"key":"py_稀饭_APP","name":"雷蒙影视 | 🧿稀饭(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://app.xifanys.com","api":"/api.php/getappapi","datakey":"HM6Ly9yeS4ya3dvL","dataiv":"HM6Ly9yeS4ya3dvL"}},
|
||||
{"key":"py_麻花_APP","name":"雷蒙影视 | 🧿麻花(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://124.223.27.166:130","api":"/api.php/getappapi","datakey":"q7gj4f9br3fls6nh","dataiv":"q7gj4f9br3fls6nh"}},
|
||||
{"key":"py_豆丁_APP","name":"雷蒙影视 | 🧿豆丁(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://vip.123pan.cn/1848451100/zl/xfdd.txt","api":"/api.php/getappapi","datakey":"xasdasdqwertyuio","dataiv":"xasdasdqwertyuio"}},
|
||||
{"key":"py_灵虎_APP","name":"雷蒙影视 | 🧿灵虎(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://bind.315999.xyz/89.txt","api":"/api.php/getappapi","datakey":"#getapp@TMD@2025","dataiv":"#getapp@TMD@2025"}},
|
||||
{"key":"py_顾我_APP","name":"雷蒙影视 | 🧿顾我(PY)","type":3,"api":"./PY/app/qijiapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://guwozj-1319364746.cos.ap-guangzhou.myqcloud.com/app.txt","api":"/api.php/qijiappapi","datakey":"ca94b06ca3c7d80e","dataiv":"ca94b06ca3c7d80e"}},
|
||||
{"key":"py_雄鹰_APP","name":"雷蒙影视 | 🧿雄鹰(PY)","type":3,"api":"./PY/app/qijiapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://lanyinghz.oss-cn-hangzhou.aliyuncs.com/lanyingxmy.txt","api":"/api.php/qijiappapi","datakey":"ca94b06ca359d80e","dataiv":"ca94b06ca359d80e"}},
|
||||
{"key":"py_榴莲_APP","name":"雷蒙影视 | 🧿榴莲(PY)","type":3,"api":"./PY/app/qijiapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.ll4k.xyz","api":"/api.php/qijiappapi","datakey":"1yGA85sJ5STtE7uj","dataiv":"1yGA85sJ5STtE7uj"}},
|
||||
{"key":"py_蓝鹰_APP","name":"雷蒙影视 | 🧿蓝鹰(PY)","type":3,"api":"./PY/app/qijiapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://172.247.192.138:18520","api":"/api.php/qijiappapi","datakey":"SuNlEkOLAoWJj1Oe","dataiv":"SuNlEkOLAoWJj1Oe"}},
|
||||
{"key":"py_仓鼠_APP","name":"雷蒙影视 | 🧿仓鼠(PY)","type":3,"api":"./PY/app/qijiapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://newappcms.cs4k.top","api":"/api.php/qijiappapi","datakey":"Z98KXaLtO2wC1Pte","dataiv":"Z98KXaLtO2wC1Pte"}},
|
||||
{"key":"py_鲸鱼_APP","name":"雷蒙影视 | 🧿鲸鱼(PY)","type":3,"api":"./PY/app/qijiapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json","api":"/api.php/qijiappapi","datakey":"AAdgrdghjfgswerA","dataiv":"AAdgrdghjfgswerA"}},
|
||||
{"key":"py_米诺_APP","name":"雷蒙影视 | 🧿米诺(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://www.milkidc.cn","api":"/api.php/getappapi","datakey":"20c79c979da8db0f","dataiv":"20c79c979da8db0f"}},
|
||||
{"key":"py_云速_APP","name":"雷蒙影视 | 🧿云速(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://59.153.167.137:7788/1.json","api":"/api.php/getappapi","datakey":"4d83b87c4c5ea111","dataiv":"4d83b87c4c5ea111"}},
|
||||
{"key":"py_海豚_APP","name":"雷蒙影视 | 🧿海豚(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://getapp.hiapp.com.cn","api":"/api.php/getappapi","datakey":"2268331221bobobo","dataiv":"2268331221bobobo"}},
|
||||
{"key":"py_溜溜_APP","name":"雷蒙影视 | 🧿溜溜(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://appcms.ll4k.xyz","api":"/api.php/getappapi","datakey":"NiDGaKiVnkO3QX1Q","dataiv":"NiDGaKiVnkO3QX1Q"}},
|
||||
{"key":"py_瓜萌_APP","name":"雷蒙影视 | 🧿瓜萌(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.guahd.com/1.txt","api":"/api.php/getappapi","datakey":"f2A7D4B9E8C16531","dataiv":"f2A7D4B9E8C16531"}},
|
||||
{"key":"py_晴天_APP","name":"雷蒙影视 | 🧿晴天(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.sun4k.top","api":"/api.php/getappapi","datakey":"sBxqXVF5pAHbGzrH","dataiv":"sBxqXVF5pAHbGzrH"}},
|
||||
{"key":"py_橘子_APP","name":"雷蒙影视 | 🧿橘子(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://t.bffree.cn/1.txt","api":"/api.php/getappapi","datakey":"2015692015692015","dataiv":"2015692015692015"}},
|
||||
{"key":"py_雨滴_APP","name":"雷蒙影视 | 🧿雨滴(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://c8w2ov7u5wg2z1o8p21c.aliyuncs.click:27899","api":"/api.php/getappapi","datakey":"k9o3p2c8b7m3z0o8","dataiv":"k9o3p2c8b7m3z0o8"}},
|
||||
{"key":"py_萝卜_APP","name":"雷蒙影视 | 🧿萝卜(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://apiapplbys.lbys.app:5678","api":"/api.php/getappapi","datakey":"apiapplbyskey168","dataiv":"apiapplbyskey168"}},
|
||||
{"key":"py_米兔_APP","name":"雷蒙影视 | 🧿米兔(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://new.tkbot.fun","api":"/api.php/getappapi","datakey":"d032c12876bc6848","dataiv":"d032c12876bc6848"}},
|
||||
{"key":"py_小红_APP","name":"雷蒙影视 | 🧿小红(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.xiaohys.com","api":"/api.php/getappapi","datakey":"ENonBHeVBoYZhVUV","dataiv":"ENonBHeVBoYZhVUV"}},
|
||||
{"key":"py_白蛇_APP","name":"雷蒙影视 | 🧿白蛇(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://tengxunyunaliyun.oss-cn-shanghai.aliyuncs.com/tengxunyun.txt","api":"/api.php/getappapi","datakey":"n3l2tx5jdkp9s2c8","dataiv":"n3l2tx5jdkp9s2c8"}},
|
||||
{"key":"py_若惜_APP","name":"雷蒙影视 | 🧿若惜(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://110.40.59.188:9527","api":"/api.php/getappapi","datakey":"ebad3f1a58b13933","dataiv":"ebad3f1a58b13933"}},
|
||||
{"key":"py_外剧_APP","name":"雷蒙影视 | 🧿外剧(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://guowaiju.com","api":"/api.php/getappapi","datakey":"7xv16h7qgkrs9b1p","dataiv":"7xv16h7qgkrs9b1p"}},
|
||||
{"key":"py_诺映_APP","name":"雷蒙影视 | 🧿诺映(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.noad.top","api":"/api.php/getappapi","datakey":"708FA298F0855840","dataiv":"708FA298F0855840"}},
|
||||
{"key":"py_曼波_APP","name":"雷蒙影视 | 🧿曼波(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://app.omofun1.top","api":"/api.php/getappapi","datakey":"66dc309cbeeca454","dataiv":"66dc309cbeeca454"}},
|
||||
{"key":"py_喜饭_APP","name":"雷蒙影视 | 🧿喜饭(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://xfapp-1305390065.cos.ap-guangzhou.myqcloud.com/getapp.txt","api":"/api.php/getappapi","datakey":"1yZ2Spn9krnzVKoC","dataiv":"1yZ2Spn9krnzVKoC"}},
|
||||
{"key":"py_咕咕_APP","name":"雷蒙影视 | 🧿咕咕(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://www.gugu3.com","api":"/api.php/getappapi","datakey":"nKfZ8KX6JTNWRzTD","dataiv":"nKfZ8KX6JTNWRzTD"}},
|
||||
{"key":"py_米饭_APP","name":"雷蒙影视 | 🧿米饭(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://45.43.29.111:9527","api":"/api.php/getappapi","datakey":"GETMIFUNGEIMIFUN","dataiv":"GETMIFUNGEIMIFUN"}},
|
||||
{"key":"py_次元_APP","name":"雷蒙影视 | 🧿次元(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://jjjj.nilinili.org","api":"/api.php/getappapi","datakey":"672263e98f232a05","dataiv":"672263e98f232a05"}},
|
||||
{"key":"py_派对_APP","name":"雷蒙影视 | 🧿派对(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://qjappcms.acg.party","api":"/api.php/getappapi","datakey":"AmtMYFCJDPoTlK7z","dataiv":"AmtMYFCJDPoTlK7z"}},
|
||||
{"key":"py_丫丫_APP","name":"雷蒙影视 | 🧿丫丫(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"http://tv.yy-fun.cc","api":"/api.php/getappapi","datakey":"qkxnwkfjwpcnwycl","dataiv":"qkxnwkfjwpcnwycl"}},
|
||||
{"key":"py_黑猫_APP","name":"雷蒙影视 | 🧿黑猫(PY)","type":3,"api":"./PY/app/getapp.py","searchable":1,"quickSearch":1,"filterable":1,"ext":{"host":"https://dm.xxdm123.top:9991","api":"/api.php/getappapi","datakey":"0fe3b5781782c621","dataiv":"0fe3b5781782c621"}},
|
||||
{"key":"py_猪猪_APP","name":"雷蒙影视 | 🧿猪猪(PY)","type":3,"api":"./PY/app/AppV2.py","searchable":1,"quickSearch":1,"filterable":1,"playerType":2,"ext":{"api":"http://dmmax.juxiafan.com/icciu_api.php/v1.vod","datasignkey":"6QQNUsP3PkD2ajJCPCY8","apisignkey":"lvdoutv-1.0.0"}},
|
||||
|
||||
{"key":"py_CliCli","name":"雷蒙影视 | 🧿CliCli(PY)","type":3,"api":"./PY/app/CliCli动漫APP.py"},
|
||||
{"key":"py_HiTV","name":"雷蒙影视 | 🧿HiTV(PY)","type":3,"api":"./PY/app/hitvAPP.py"},
|
||||
|
@ -286,6 +291,9 @@
|
|||
{"key":"py_4KAV","name":"雷蒙影视 | 🧿4KAV(PY)","type":3,"api":"./PY/html/4KAV.py"},
|
||||
{"key":"py_NUNFLIX","name":"雷蒙影视 | 🧿Nunflix(PY)","type":3,"api":"./PY/html/NUNFLIX.py"},
|
||||
{"key":"py_荐片","name":"雷蒙影视 | 🧿荐片(PY)","type":3,"api":"./PY/html/荐片.py"},
|
||||
{"key":"py_想看","name":"雷蒙影视 | 🧿想看(PY)","type":3,"api":"./PY/html/想看影视.py"},
|
||||
{"key":"py_追星","name":"雷蒙影视 | 🧿追星(PY)","type":3,"api":"./PY/html/追星影视.py"},
|
||||
{"key":"py_猎手","name":"雷蒙影视 | 🧿猎手(PY)","type":3,"api":"./PY/html/电影猎手.py"},
|
||||
{"key":"py_柯南","name":"雷蒙影视 | 🧿柯南(PY)","type":3,"api":"./PY/html/柯南影视.py"},
|
||||
{"key":"py_骚火","name":"雷蒙影视 | 🧿骚火(PY)","type":3,"api":"./PY/html/骚火电影.py"},
|
||||
{"key":"py_剧粑","name":"雷蒙影视 | 🧿剧粑(PY)","type":3,"api":"./PY/html/剧粑粑.py"},
|
||||
|
@ -293,6 +301,9 @@
|
|||
{"key":"py_金牌","name":"雷蒙影视 | 🧿金牌(PY)","type":3,"api":"./PY/html/金牌.py","ext":{"site":"https://www.hkybqufgh.com,https://www.sizhengxt.com,https://0996zp.com,https://9zhoukj.com,https://www.sizhengxt.com,https://www.tjrongze.com,https://www.jiabaide.cn,https://cqzuoer.com"}},
|
||||
{"key":"py_旺旺","name":"雷蒙影视 | 🧿旺旺(PY)","type":3,"api":"./PY/html/旺旺.py"},
|
||||
{"key":"py_绝对","name":"雷蒙影视 | 🧿绝对(PY)","type":3,"api":"./PY/html/绝对影视.py"},
|
||||
{"key":"py_爱看","name":"雷蒙影视 | 🧿爱看(PY)","type":3,"api":"./PY/html/爱看短剧.py"},
|
||||
{"key":"py_锦鲤","name":"雷蒙影视 | 🧿锦鲤(PY)","type":3,"api":"./PY/html/锦鲤短剧.py"},
|
||||
{"key":"py_河马","name":"雷蒙影视 | 🧿河马(PY)","type":3,"api":"./PY/html/河马短剧.py"},
|
||||
{"key":"py_偷乐","name":"雷蒙影视 | 🧿偷乐(PY)","type":3,"api":"./PY/html/偷乐短剧.py"},
|
||||
{"key":"py_好帅","name":"雷蒙影视 | 🧿好帅(PY)","type":3,"api":"./PY/html/好帅短剧.py"},
|
||||
{"key":"py_红果","name":"雷蒙影视 | 🧿红果(PY)","type":3,"api":"./PY/html/红果网页.py"},
|
||||
|
@ -335,6 +346,7 @@
|
|||
{"key":"vod_黑木","name":"雷蒙影视 | 🚀黑木","type":1,"api":"https://json.heimuer.xyz/api.php/provide/vod","playUrl":"json:https://4tvbox.ggff.net/hme.php?url=","header":{"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36"},"searchable":1,"changeable":1,"categories":["国产剧","港剧","欧美剧","台剧","韩剧","日剧","泰剧","国产综艺","欧美综艺","韩国综艺","日本综艺","日本动漫","国产动漫","欧美动漫","动画电影","冒险片","剧情片","动作片","喜剧片","奇幻片","恐怖片","悬疑片","惊悚片","战争片","歌舞片","灾难片","爱情片","犯罪片","科幻片","纪录片","同性片","经典片"]},
|
||||
{"key":"vod_木木","name":"雷蒙影视 | 🚀木木","type":1,"api":"https://json.heimuer.xyz/api.php/provide/vod","playUrl":"json:https://tvbox.linkpc.net/api/kill_ads?url=","header":{"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36"},"searchable":1,"changeable":1,"categories":["国产剧","港剧","欧美剧","台剧","韩剧","日剧","泰剧","国产综艺","欧美综艺","韩国综艺","日本综艺","日本动漫","国产动漫","欧美动漫","动画电影","冒险片","剧情片","动作片","喜剧片","奇幻片","恐怖片","悬疑片","惊悚片","战争片","歌舞片","灾难片","爱情片","犯罪片","科幻片","纪录片","同性片","经典片"]},
|
||||
{"key":"vod_优质","name":"雷蒙影视 | 🚀优质","type":1,"jar":"./N3RD/J/pg.jar","playUrl":"json:http://127.0.0.1:10079/parse/?thread=0&proxy=&url=","api":"https://api.1080zyku.com/inc/api_mac10.php","searchable":1,"quickSearch":1},
|
||||
{"key":"vod_七七","name":"雷蒙影视 | 🚀七七","type":1,"api":"http://6.qqqtv.top/api.php/provide/vod/","searchable":1,"quickSearch":1,"filterable":1,"categories":["推荐","电影","电视剧","综艺","动漫"]},
|
||||
{"key":"vod_飞速","name":"雷蒙影视 | ️🚀飞速","type":1,"api":"https://www.feisuzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"vod_光速","name":"雷蒙影视 | 🚀光速","type":1,"api":"https://api.guangsuapi.com/api.php/provide/vod/from/gsm3u8/?ac=list","searchable":1,"quickSearch":1,"filterable":1,"categories":["动作片","爱情片","科幻片","战争片","剧情片","恐怖片","喜剧片","大陆剧","港澳剧","台湾剧","欧美剧","动漫电影","韩剧","日剧","泰剧"]},
|
||||
{"key":"vod_豪华","name":"雷蒙影视 | ️🚀豪华","type":1,"api":"https://hhzyapi.com/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":0,"filterable":1,"categories":["动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","悬疑片","犯罪片","奇幻片","记录片","动画片","伦理片","内地剧","香港剧","台湾剧","日剧","韩剧","欧美剧","马泰剧","大陆综艺","港台综艺","日韩综艺","欧美综艺","中国动漫","日本动漫","欧美动漫"]},
|
||||
|
|
|
@ -60,6 +60,9 @@
|
|||
{"key":"csp_Wogg","name":"雷蒙影视 | 💿玩偶哥哥(SP)","type":3,"api":"csp_Wogg","searchable":1,"quickSearch":1,"filterable":1,"ext":"./N3RD/T/pg.json$$$http://wogg.888484.xyz/$$$cfg$$$1$$$./N3RD/T/wogg.json$$$WOGG"},
|
||||
{"key":"csp_Hmxz","name":"雷蒙影视 | 💿海绵(SP)","type":3,"api":"csp_Hmxz","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$https://haimian.eu.org/$$$cfg$$$1$$$./N3RD/T/hmxz.txt$$$HMXZ","style":{"type":"list","ratio":1.1}},
|
||||
{"key":"csp_Panta_雷鲸","name":"雷蒙影视 | 💿雷鲸(SP)","type":3,"api":"csp_Panta","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$https://leijing.xyz/$$$cfg$$$1$$$./N3RD/T/leijing.txt$$$LEIJING","style":{"type":"list","ratio":1.1}},
|
||||
{"key":"csp_Panta_影搜","name":"雷蒙影视 | 💿影搜(SP)","type":3,"api":"csp_Panta","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$https://yingso.fun/$$$cfg$$$1$$$LEIJING","style":{"type":"list","ratio":1.1}},
|
||||
{"key":"csp_FourKZN","name":"雷蒙影视 | 💿4K指南(SP)","type":3,"api":"csp_FourKZN","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$http://xuexizhinan.com/$$$cfg$$$1$$$./N3RD/T/4kzn.txt$$$4KZN"},
|
||||
{"key":"csp_FourKFox","name":"雷蒙影视 | 💿4KFox(SP)","type":3,"api":"csp_FourKFox","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$http://4kfox.com/$$$cfg$$$1$$$./N3RD/T/4kfox.txt$$$4KFOX"},
|
||||
{"key":"csp_TianYiSou","name":"雷蒙影视 | 💿天逸搜(SP)","type":3,"api":"csp_TianYiSou","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$null$$$cfg"},
|
||||
{"key":"csp_Wobg_小米UC","name":"雷蒙影视 | 💿小米UC(SP)","type":3,"api":"csp_Wobg","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$https://milvdou.fun$$$cfg$$$1$$$./N3RD/T/wogg.json$$$XIAOMI"},
|
||||
{"key":"csp_Wobg_小虎斑","name":"雷蒙影视 | 💿小虎斑(SP)","type":3,"api":"csp_Wobg","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"./N3RD/T/pg.json$$$http://103.45.162.207:20720$$$cfg$$$1$$$./N3RD/T/wogg.json$$$U_HUBAN"},
|
||||
|
|
|
@ -82,6 +82,9 @@
|
|||
{"key":"csp_Wogg","name":"雷蒙影视 | 💿玩偶哥哥(SP)","type":3,"api":"csp_Wogg","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$http://wogg.888484.xyz/$$$cfg$$$1$$$./N3RD/T/wogg.json$$$WOGG"},
|
||||
{"key":"csp_Hmxz","name":"雷蒙影视 | 💿海绵(SP)","type":3,"api":"csp_Hmxz","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$https://haimian.eu.org/$$$cfg$$$1$$$./N3RD/T/hmxz.txt$$$HMXZ","style":{"type":"list","ratio":1.1}},
|
||||
{"key":"csp_Panta_雷鲸","name":"雷蒙影视 | 💿雷鲸(SP)","type":3,"api":"csp_Panta","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$https://leijing.xyz/$$$cfg$$$1$$$./N3RD/T/leijing.txt$$$LEIJING","style":{"type":"list","ratio":1.1}},
|
||||
{"key":"csp_Panta_影搜","name":"雷蒙影视 | 💿影搜(SP)","type":3,"api":"csp_Panta","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$https://yingso.fun/$$$cfg$$$1$$$LEIJING","style":{"type":"list","ratio":1.1}},
|
||||
{"key":"csp_FourKZN","name":"雷蒙影视 | 💿4K指南(SP)","type":3,"api":"csp_FourKZN","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$http://xuexizhinan.com/$$$cfg$$$1$$$./N3RD/T/4kzn.txt$$$4KZN"},
|
||||
{"key":"csp_FourKFox","name":"雷蒙影视 | 💿4KFox(SP)","type":3,"api":"csp_FourKFox","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$http://4kfox.com/$$$cfg$$$1$$$./N3RD/T/4kfox.txt$$$4KFOX"},
|
||||
{"key":"csp_TianYiSou","name":"雷蒙影视 | 💿天逸搜(SP)","type":3,"api":"csp_TianYiSou","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$null$$$cfg"},
|
||||
{"key":"csp_Wobg_小米UC","name":"雷蒙影视 | 💿小米UC(SP)","type":3,"api":"csp_Wobg","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$https://milvdou.fun$$$cfg$$$1$$$./N3RD/T/wogg.json$$$XIAOMI"},
|
||||
{"key":"csp_Wobg_小虎斑","name":"雷蒙影视 | 💿小虎斑(SP)","type":3,"api":"csp_Wobg","quickSearch":1,"changeable":1,"filterable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/ctv/pg.json$$$http://103.45.162.207:20720$$$cfg$$$1$$$./N3RD/T/wogg.json$$$U_HUBAN"},
|
||||
|
|
BIN
JN/雷蒙影视.bmp
Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 244 KiB |
BIN
JN/雷蒙影视JS.bmp
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
BIN
JN/雷蒙影视VOD.bmp
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
BIN
JN/雷蒙影视WP.bmp
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 168 KiB |