Compare commits

...

71 Commits

Author SHA1 Message Date
github-actions[bot] a058039c23 雷蒙影视配置更新 2025-07-30 22:36:03 +00:00
n3rddd c4a7bd4a40
Update lem.json 2025-07-30 21:21:40 +08:00
n3rddd 25cd14f1cd
Update lempg2.json 2025-07-30 20:44:05 +08:00
n3rddd 050c3b0e3d
Update lempg.json 2025-07-30 20:44:03 +08:00
n3rddd 83cebbc6b8
Create 4kfox.txt 2025-07-30 20:43:17 +08:00
n3rddd e6a8fb7e7a
pg.20250730-1514 2025-07-30 20:41:01 +08:00
n3rddd 25f26aaa32
pg.20250730-1514 2025-07-30 20:40:37 +08:00
n3rddd 5f5f76d2bb
Update lem.json 2025-07-30 20:39:53 +08:00
n3rddd 888a8cbf46
Add files via upload 2025-07-30 20:33:39 +08:00
github-actions[bot] 91a899b97f 雷蒙影视配置更新 2025-07-30 10:40:14 +00:00
github-actions[bot] ef7d39fe95 雷蒙影视配置更新 2025-07-29 22:36:09 +00:00
n3rddd 635a6555b3
Update lem.json 2025-07-29 22:35:11 +08:00
n3rddd 55d4dad518
Update lem.json 2025-07-29 22:30:19 +08:00
n3rddd 2468a1f6bd
Add files via upload 2025-07-29 22:28:17 +08:00
n3rddd e60e1f8375
Update lem.json 2025-07-29 21:52:38 +08:00
n3rddd c0f47bead1
Add files via upload 2025-07-29 21:49:15 +08:00
n3rddd cb0850d024
Update lem.json 2025-07-29 19:49:50 +08:00
n3rddd d8c63982cf
Update pg.json 2025-07-29 19:44:31 +08:00
n3rddd 1c82a6db5a
pg.20250729-1058 2025-07-29 19:42:57 +08:00
n3rddd 665619ba47
pg.20250729-1058 2025-07-29 19:42:16 +08:00
github-actions[bot] f7f31138da 雷蒙影视配置更新 2025-07-29 10:39:49 +00:00
github-actions[bot] 7144d57ea0 雷蒙影视配置更新 2025-07-28 22:37:49 +00:00
github-actions[bot] 5322cf08c9 雷蒙影视配置更新 2025-07-28 10:41:20 +00:00
github-actions[bot] bde852f456 雷蒙影视配置更新 2025-07-27 22:34:31 +00:00
n3rddd 845131b4c9
Update pg.json 2025-07-27 18:45:30 +08:00
github-actions[bot] b68c8a713b 雷蒙影视配置更新 2025-07-27 10:36:33 +00:00
n3rddd 5580477f24
Update lempg.json 2025-07-27 17:47:38 +08:00
n3rddd ad3cbcd1b7
Update lempg2.json 2025-07-27 17:46:59 +08:00
n3rddd fd6a29ebfa
Create 4kzn.txt 2025-07-27 17:46:39 +08:00
n3rddd b89d73a354
pg.20250727-1231 2025-07-27 17:43:42 +08:00
n3rddd dbdd0f6671
pg.20250727-1231 2025-07-27 17:43:13 +08:00
github-actions[bot] 93caec3ce7 雷蒙影视配置更新 2025-07-26 22:34:15 +00:00
github-actions[bot] 9957c8fcb7 雷蒙影视配置更新 2025-07-26 10:36:22 +00:00
n3rddd e115f163b8
Update lem.json 2025-07-26 16:45:11 +08:00
n3rddd 2dfcb797ff
Add files via upload 2025-07-26 16:36:04 +08:00
n3rddd 031dc10fea
Update market.json 2025-07-26 16:25:16 +08:00
n3rddd cab1ea79ef
Update lempg2.json 2025-07-26 11:54:33 +08:00
github-actions[bot] 862b3dbce4 雷蒙影视配置更新 2025-07-25 22:34:51 +00:00
n3rddd 926c21e564
pg.20250725-1527 2025-07-25 22:58:16 +08:00
n3rddd 56a7c1f838
pg.20250725-1527 2025-07-25 22:57:26 +08:00
n3rddd 27d20ee298
Update lem.json 2025-07-25 22:53:48 +08:00
n3rddd d5c878db61
Add files via upload 2025-07-25 22:51:56 +08:00
n3rddd 6f253e74c8
Update lem.json 2025-07-25 22:42:33 +08:00
github-actions[bot] 23267ad500 雷蒙影视配置更新 2025-07-25 10:39:50 +00:00
github-actions[bot] 36bb751090 雷蒙影视配置更新 2025-07-24 22:35:21 +00:00
n3rddd 6420553aea
pg.20250723-1908 2025-07-24 22:26:57 +08:00
n3rddd 78abae83b2
Update lem.json 2025-07-24 22:24:56 +08:00
github-actions[bot] 1edcf5a8d2 雷蒙影视配置更新 2025-07-24 10:39:22 +00:00
github-actions[bot] b4ecf74955 雷蒙影视配置更新 2025-07-23 22:35:40 +00:00
n3rddd 8fd613226a
Update lem.json 2025-07-23 21:12:08 +08:00
github-actions[bot] 09ee641a27 雷蒙影视配置更新 2025-07-23 10:39:53 +00:00
github-actions[bot] 6cb828449b 雷蒙影视配置更新 2025-07-22 22:35:04 +00:00
github-actions[bot] d7aabb9348 雷蒙影视配置更新 2025-07-22 10:39:08 +00:00
github-actions[bot] 4c12aac5af 雷蒙影视配置更新 2025-07-21 22:35:43 +00:00
n3rddd deb7422666
Update lem.json 2025-07-21 22:19:20 +08:00
n3rddd cea240c9d9
Add files via upload 2025-07-21 22:18:26 +08:00
n3rddd f05833bb48
Update lem.json 2025-07-21 22:17:21 +08:00
n3rddd b51c0c2edf
Rename 猎手影视.py to 电影猎手.py 2025-07-21 22:16:44 +08:00
n3rddd fbe13ddca6
Add files via upload 2025-07-21 22:15:08 +08:00
n3rddd ccd3d903d7
Update lem.json 2025-07-21 22:14:00 +08:00
n3rddd 963076a56f
Add files via upload 2025-07-21 22:12:59 +08:00
github-actions[bot] adff7c54be 雷蒙影视配置更新 2025-07-21 10:40:36 +00:00
github-actions[bot] 7d5a53bbe7 雷蒙影视配置更新 2025-07-20 22:34:45 +00:00
github-actions[bot] beb30d152f 雷蒙影视配置更新 2025-07-20 10:37:32 +00:00
n3rddd ce9c4bea69
Update lem.json 2025-07-20 15:17:39 +08:00
n3rddd ea02909463
Update lem.json 2025-07-20 11:22:13 +08:00
github-actions[bot] effdabf261 雷蒙影视配置更新 2025-07-19 22:34:01 +00:00
github-actions[bot] bb624b734f 雷蒙影视配置更新 2025-07-19 10:36:39 +00:00
n3rddd a866fd88eb
Update lem.json 2025-07-19 15:40:44 +08:00
n3rddd 40cdb6cd66
Add files via upload 2025-07-19 15:38:39 +08:00
github-actions[bot] 3ed2de8d1b 雷蒙影视配置更新 2025-07-18 22:35:02 +00:00
30 changed files with 2027 additions and 82 deletions

BIN
JN/N3RD/J/lem0719.jar Normal file

Binary file not shown.

BIN
JN/N3RD/J/lem0721.jar Normal file

Binary file not shown.

BIN
JN/N3RD/J/lem0726.jar Normal file

Binary file not shown.

BIN
JN/N3RD/J/lem0730.jar Normal file

Binary file not shown.

Binary file not shown.

1
JN/N3RD/T/4kfox.txt Normal file
View File

@ -0,0 +1 @@

1
JN/N3RD/T/4kzn.txt Normal file
View File

@ -0,0 +1 @@

Binary file not shown.

View File

@ -1 +1 @@
8a3a79e39b2d2926a0f67bafcaad3baf
8c31b45807b1fad683089f53decabaf0

Binary file not shown.

View File

@ -1 +1 @@
ff5d8f0029bbbd7ef8bb6e9eecc345ab
6756a20c0bab5e28b16c17299a5d3b9c

View File

@ -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"},

View File

@ -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":""
}

View File

@ -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,

263
JN/PY/app/AppV2.py Normal file
View File

@ -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

343
JN/PY/app/getapp.py Normal file
View File

@ -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)

337
JN/PY/app/qijiapp.py Normal file
View File

@ -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)

169
JN/PY/html/想看影视.py Normal file
View File

@ -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&timestamp={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'))

380
JN/PY/html/河马短剧.py Normal file
View File

@ -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

View File

@ -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>

279
JN/PY/html/电影猎手.py Normal file
View File

@ -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)

View File

@ -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>

View File

@ -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>

View File

@ -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&params=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":["动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","悬疑片","犯罪片","奇幻片","记录片","动画片","伦理片","内地剧","香港剧","台湾剧","日剧","韩剧","欧美剧","马泰剧","大陆综艺","港台综艺","日韩综艺","欧美综艺","中国动漫","日本动漫","欧美动漫"]},

View File

@ -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"},

View File

@ -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"},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 168 KiB