Sync all projects
This commit is contained in:
@@ -0,0 +1,463 @@
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import hashlib
|
||||
from base64 import b64decode, b64encode
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import requests
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Util.Padding import unpad
|
||||
from pyquery import PyQuery as pq
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider as BaseSpider
|
||||
|
||||
img_cache = {}
|
||||
|
||||
class Spider(BaseSpider):
|
||||
|
||||
def init(self, extend=""):
|
||||
try:
|
||||
self.proxies = json.loads(extend)
|
||||
except:
|
||||
self.proxies = {}
|
||||
self.headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'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',
|
||||
'Connection': 'keep-alive',
|
||||
'Cache-Control': 'no-cache',
|
||||
}
|
||||
self.host = self.get_working_host()
|
||||
self.headers.update({'Origin': self.host, 'Referer': f"{self.host}/"})
|
||||
print(f"使用站点: {self.host}")
|
||||
|
||||
def getName(self):
|
||||
return "🌈 每日大赛|终极完美版"
|
||||
|
||||
def isVideoFormat(self, url):
|
||||
return any(ext in (url or '') for ext in ['.m3u8', '.mp4', '.ts'])
|
||||
|
||||
def manualVideoCheck(self):
|
||||
return False
|
||||
|
||||
def destroy(self):
|
||||
global img_cache
|
||||
img_cache.clear()
|
||||
|
||||
def get_working_host(self):
|
||||
dynamic_urls = [
|
||||
'https://www.mrds66.com/',
|
||||
'https://mrdsa2.com/',
|
||||
'https://mrdsa1.com/',
|
||||
'https://mrdsk.com/',
|
||||
]
|
||||
for url in dynamic_urls:
|
||||
try:
|
||||
response = requests.get(
|
||||
url,
|
||||
headers=self.headers,
|
||||
proxies=self.proxies,
|
||||
timeout=6,
|
||||
verify=False,
|
||||
allow_redirects=True
|
||||
)
|
||||
if response.status_code == 200:
|
||||
return response.url.rstrip('/')
|
||||
except Exception:
|
||||
continue
|
||||
return 'https://www.mrds66.com'
|
||||
|
||||
def homeContent(self, filter):
|
||||
try:
|
||||
response = requests.get(self.host, headers=self.headers, proxies=self.proxies, timeout=15)
|
||||
if response.status_code != 200:
|
||||
return {'class': [], 'list': []}
|
||||
data = self.getpq(response.text)
|
||||
|
||||
classes = []
|
||||
category_selectors = ['.category-list ul li', '.nav-menu li', '.menu li', 'nav ul li']
|
||||
for selector in category_selectors:
|
||||
for k in data(selector).items():
|
||||
link = k('a')
|
||||
href = (link.attr('href') or '').strip()
|
||||
name = (link.text() or '').strip()
|
||||
if not href or href == '#' or not name or href == '/':
|
||||
continue
|
||||
if not href.startswith('http'):
|
||||
href = href if href.startswith('/') else f"/{href}"
|
||||
classes.append({'type_name': name, 'type_id': href})
|
||||
if classes:
|
||||
break
|
||||
|
||||
if not classes:
|
||||
classes = [
|
||||
{'type_name': '每日大赛', 'type_id': '/category/mrds/'},
|
||||
]
|
||||
|
||||
return {
|
||||
'class': classes,
|
||||
'list': self.getlist(data('#index article, article'))
|
||||
}
|
||||
except Exception:
|
||||
return {'class': [], 'list': []}
|
||||
|
||||
def homeVideoContent(self):
|
||||
try:
|
||||
response = requests.get(self.host, headers=self.headers, proxies=self.proxies, timeout=15)
|
||||
if response.status_code != 200:
|
||||
return {'list': []}
|
||||
data = self.getpq(response.text)
|
||||
return {'list': self.getlist(data('#index article, article'))}
|
||||
except Exception:
|
||||
return {'list': []}
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
try:
|
||||
if '@folder' in tid:
|
||||
v = self.getfod(tid.replace('@folder', ''))
|
||||
return {'list': v, 'page': 1, 'pagecount': 1, 'limit': 90, 'total': len(v)}
|
||||
|
||||
pg = int(pg) if pg else 1
|
||||
|
||||
if tid.startswith('http'):
|
||||
base_url = tid.rstrip('/')
|
||||
else:
|
||||
path = tid if tid.startswith('/') else f"/{tid}"
|
||||
base_url = f"{self.host}{path}".rstrip('/')
|
||||
|
||||
if pg == 1:
|
||||
url = f"{base_url}/"
|
||||
else:
|
||||
host_no_slash = self.host.rstrip('/')
|
||||
if base_url == host_no_slash:
|
||||
url = f"{host_no_slash}/page/{pg}/"
|
||||
elif '/category/' in base_url or '/tag/' in base_url:
|
||||
url = f"{base_url}/{pg}/"
|
||||
else:
|
||||
if '/page/' in base_url:
|
||||
url = f"{base_url}/{pg}/"
|
||||
else:
|
||||
url = f"{base_url}/page/{pg}/"
|
||||
|
||||
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=15)
|
||||
if response.status_code != 200:
|
||||
return {
|
||||
'list': [],
|
||||
'page': pg,
|
||||
'pagecount': 9999,
|
||||
'limit': 90,
|
||||
'total': 0
|
||||
}
|
||||
|
||||
data = self.getpq(response.text)
|
||||
videos = self.getlist(data('#archive article, #index article, article'), tid)
|
||||
|
||||
return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
|
||||
except Exception:
|
||||
return {'list': [], 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 0}
|
||||
|
||||
def detailContent(self, ids):
|
||||
try:
|
||||
url = ids[0] if ids[0].startswith('http') else f"{self.host}{ids[0]}"
|
||||
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=15)
|
||||
data = self.getpq(response.text)
|
||||
|
||||
plist = []
|
||||
used_names = set()
|
||||
|
||||
# 策略1: 提取 DPlayer 配置
|
||||
if data('.dplayer'):
|
||||
for c, k in enumerate(data('.dplayer').items(), start=1):
|
||||
try:
|
||||
config_attr = k.attr('data-config')
|
||||
if config_attr:
|
||||
config = json.loads(config_attr)
|
||||
video_url = config.get('video', {}).get('url', '')
|
||||
|
||||
if video_url:
|
||||
ep_name = ''
|
||||
parent = k.parents().eq(0)
|
||||
for _ in range(4):
|
||||
if not parent: break
|
||||
heading = parent.find('h2, h3, h4').eq(0).text().strip()
|
||||
if heading:
|
||||
ep_name = heading
|
||||
break
|
||||
parent = parent.parents().eq(0)
|
||||
|
||||
base_name = ep_name if ep_name else f"视频{c}"
|
||||
name = base_name
|
||||
count = 2
|
||||
while name in used_names:
|
||||
name = f"{base_name} {count}"
|
||||
count += 1
|
||||
used_names.add(name)
|
||||
|
||||
plist.append(f"{name}${video_url}")
|
||||
except:
|
||||
continue
|
||||
|
||||
# 策略2: 提取正文中的文本链接
|
||||
if not plist:
|
||||
content_area = data('.post-content, article')
|
||||
for i, link in enumerate(content_area('a').items(), start=1):
|
||||
link_text = link.text().strip()
|
||||
link_href = link.attr('href')
|
||||
|
||||
if link_href and any(kw in link_text for kw in ['点击观看', '观看', '播放', '视频', '第一弹']):
|
||||
ep_name = link_text.replace('点击观看:', '').replace('点击观看', '').strip()
|
||||
if not ep_name:
|
||||
ep_name = f"视频{i}"
|
||||
|
||||
if not link_href.startswith('http'):
|
||||
link_href = f"{self.host}{link_href}" if link_href.startswith('/') else f"{self.host}/{link_href}"
|
||||
|
||||
plist.append(f"{ep_name}${link_href}")
|
||||
|
||||
play_url = '#'.join(plist) if plist else f"未找到视频源,请访问网页${url}"
|
||||
|
||||
# ★★★ 标签点击功能修复核心区域 ★★★
|
||||
# 采用 reference 代码中的 [a=cr:...] 格式
|
||||
vod_content = ''
|
||||
try:
|
||||
tags = []
|
||||
seen_names = set()
|
||||
seen_ids = set()
|
||||
|
||||
# 每日大赛的标签选择器
|
||||
tag_links = data('.post-tags a, .tags a, .keywords a')
|
||||
|
||||
candidates = []
|
||||
for k in tag_links.items():
|
||||
title = k.text().strip()
|
||||
href = k.attr('href')
|
||||
if title and href:
|
||||
# 修正相对链接为绝对链接
|
||||
if not href.startswith('http'):
|
||||
href = f"{self.host}{href}" if href.startswith('/') else f"{self.host}/{href}"
|
||||
candidates.append({'name': title, 'id': href})
|
||||
|
||||
# 按长度排序,与参考代码保持一致
|
||||
candidates.sort(key=lambda x: len(x['name']), reverse=True)
|
||||
|
||||
for item in candidates:
|
||||
name = item['name']
|
||||
id_ = item['id']
|
||||
|
||||
if id_ in seen_ids: continue
|
||||
# 简单的去重逻辑
|
||||
is_duplicate = False
|
||||
for seen in seen_names:
|
||||
if name in seen:
|
||||
is_duplicate = True
|
||||
break
|
||||
if is_duplicate and name not in seen_names: pass # 允许完全匹配的标签
|
||||
elif is_duplicate: pass
|
||||
|
||||
# 生成播放器专用跳转代码:[a=cr:{json}/]名称[/a]
|
||||
target = json.dumps({'id': id_, 'name': name})
|
||||
tags.append(f'[a=cr:{target}/]{name}[/a]')
|
||||
|
||||
seen_names.add(name)
|
||||
seen_ids.add(id_)
|
||||
|
||||
# 如果有标签,拼接显示
|
||||
if tags:
|
||||
# 参考代码只显示标签,这里为了体验更好,我加上了正文摘要
|
||||
tags_str = ' '.join(tags)
|
||||
summary = data('.post-content').text() or ''
|
||||
summary = summary[:150] + '...' if len(summary) > 150 else summary
|
||||
vod_content = f"{tags_str}\n\n{summary}"
|
||||
else:
|
||||
vod_content = data('.post-title').text() or data('h1').text()
|
||||
|
||||
except Exception:
|
||||
vod_content = '每日大赛'
|
||||
|
||||
if not vod_content:
|
||||
vod_content = '每日大赛'
|
||||
|
||||
return {'list': [{
|
||||
'vod_play_from': '每日大赛',
|
||||
'vod_play_url': play_url,
|
||||
'vod_content': vod_content
|
||||
}]}
|
||||
except:
|
||||
return {'list': [{'vod_play_from': '每日大赛', 'vod_play_url': '获取失败'}]}
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
try:
|
||||
pg = int(pg) if pg else 1
|
||||
|
||||
if pg == 1:
|
||||
url = f"{self.host}/search/{key}/"
|
||||
else:
|
||||
url = f"{self.host}/search/{key}/{pg}/"
|
||||
|
||||
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=15)
|
||||
return {'list': self.getlist(self.getpq(response.text)('article')), 'page': pg, 'pagecount': 9999}
|
||||
except:
|
||||
return {'list': [], 'page': pg, 'pagecount': 9999}
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
parse = 0 if self.isVideoFormat(id) else 1
|
||||
url = self.proxy(id) if '.m3u8' in id else id
|
||||
return {'parse': parse, 'url': url, 'header': self.headers}
|
||||
|
||||
def localProxy(self, param):
|
||||
try:
|
||||
type_ = param.get('type')
|
||||
url = param.get('url')
|
||||
if type_ == 'cache':
|
||||
key = param.get('key')
|
||||
if content := img_cache.get(key):
|
||||
return [200, 'image/jpeg', content]
|
||||
return [404, 'text/plain', b'Expired']
|
||||
elif type_ == 'img':
|
||||
real_url = self.d64(url) if not url.startswith('http') else url
|
||||
res = requests.get(real_url, headers=self.headers, proxies=self.proxies, timeout=10)
|
||||
content = self.aesimg(res.content)
|
||||
return [200, 'image/jpeg', content]
|
||||
elif type_ == 'm3u8':
|
||||
return self.m3Proxy(url)
|
||||
else:
|
||||
return self.tsProxy(url)
|
||||
except:
|
||||
return [404, 'text/plain', b'']
|
||||
|
||||
def proxy(self, data, type='m3u8'):
|
||||
if data and self.proxies: return f"{self.getProxyUrl()}&url={self.e64(data)}&type={type}"
|
||||
return data
|
||||
|
||||
def m3Proxy(self, url):
|
||||
url = self.d64(url)
|
||||
res = requests.get(url, headers=self.headers, proxies=self.proxies)
|
||||
data = res.text
|
||||
base = res.url.rsplit('/', 1)[0]
|
||||
lines = []
|
||||
for line in data.split('\n'):
|
||||
if '#EXT' not in line and line.strip():
|
||||
if not line.startswith('http'):
|
||||
line = f"{base}/{line}"
|
||||
lines.append(self.proxy(line, 'ts'))
|
||||
else:
|
||||
lines.append(line)
|
||||
return [200, "application/vnd.apple.mpegurl", '\n'.join(lines)]
|
||||
|
||||
def tsProxy(self, url):
|
||||
return [200, 'video/mp2t', requests.get(self.d64(url), headers=self.headers, proxies=self.proxies).content]
|
||||
|
||||
def e64(self, text):
|
||||
return b64encode(str(text).encode()).decode()
|
||||
|
||||
def d64(self, text):
|
||||
return b64decode(str(text).encode()).decode()
|
||||
|
||||
def aesimg(self, data):
|
||||
if len(data) < 16: return data
|
||||
keys = [(b'f5d965df75336270', b'97b60394abc2fbe1'), (b'75336270f5d965df', b'abc2fbe197b60394')]
|
||||
for k, v in keys:
|
||||
try:
|
||||
dec = unpad(AES.new(k, AES.MODE_CBC, v).decrypt(data), 16)
|
||||
if dec.startswith(b'\xff\xd8') or dec.startswith(b'\x89PNG'): return dec
|
||||
except: pass
|
||||
try:
|
||||
dec = unpad(AES.new(k, AES.MODE_ECB).decrypt(data), 16)
|
||||
if dec.startswith(b'\xff\xd8'): return dec
|
||||
except: pass
|
||||
return data
|
||||
|
||||
def getlist(self, data, tid=''):
|
||||
videos = []
|
||||
is_folder = '/mrdg' in (tid or '')
|
||||
for k in data.items():
|
||||
card_html = k.outer_html() if hasattr(k, 'outer_html') else str(k)
|
||||
a = k if k.is_('a') else k('a').eq(0)
|
||||
href = a.attr('href')
|
||||
title = k('h2').text() or k('.entry-title').text() or k('.post-title').text()
|
||||
if not title and k.is_('a'): title = k.text()
|
||||
|
||||
if href and title:
|
||||
img = self.getimg(k('script').text(), k, card_html)
|
||||
|
||||
remarks = k('time').text()
|
||||
if not remarks:
|
||||
full_text = k.text()
|
||||
m = re.search(r'(\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日)', full_text)
|
||||
if m:
|
||||
remarks = m.group(1)
|
||||
else:
|
||||
m2 = re.search(r'(\d{4}-\d{1,2}-\d{1,2})', full_text)
|
||||
if m2:
|
||||
remarks = m2.group(1)
|
||||
|
||||
videos.append({
|
||||
'vod_id': f"{href}{'@folder' if is_folder else ''}",
|
||||
'vod_name': title.strip(),
|
||||
'vod_pic': img,
|
||||
'vod_remarks': remarks.strip() if remarks else '',
|
||||
'vod_tag': 'folder' if is_folder else '',
|
||||
'style': {"type": "rect", "ratio": 1.33}
|
||||
})
|
||||
return videos
|
||||
|
||||
def getfod(self, id):
|
||||
url = f"{self.host}{id}"
|
||||
data = self.getpq(requests.get(url, headers=self.headers, proxies=self.proxies).text)
|
||||
videos = []
|
||||
for i, h2 in enumerate(data('.post-content h2').items()):
|
||||
p_txt = data('.post-content p').eq(i * 2)
|
||||
p_img = data('.post-content p').eq(i * 2 + 1)
|
||||
p_html = p_img.outer_html() if hasattr(p_img, 'outer_html') else str(p_img)
|
||||
videos.append({
|
||||
'vod_id': p_txt('a').attr('href'),
|
||||
'vod_name': p_txt.text().strip(),
|
||||
'vod_pic': self.getimg('', p_img, p_html),
|
||||
'vod_remarks': h2.text().strip()
|
||||
})
|
||||
return videos
|
||||
|
||||
def getimg(self, text, elem=None, html_content=None):
|
||||
if m := re.search(r"loadBannerDirect\('([^']+)'", text or ''):
|
||||
return self._proc_url(m.group(1))
|
||||
|
||||
if html_content is None and elem is not None:
|
||||
html_content = elem.outer_html() if hasattr(elem, 'outer_html') else str(elem)
|
||||
if not html_content: return ''
|
||||
|
||||
html_content = html_content.replace('"', '"').replace(''', "'").replace('&', '&')
|
||||
|
||||
if 'data:image' in html_content:
|
||||
m = re.search(r'(data:image/[a-zA-Z0-9+/=;,]+)', html_content)
|
||||
if m: return self._proc_url(m.group(1))
|
||||
|
||||
m = re.search(r'(https?://[^"\'\s)]+\.(?:jpg|png|jpeg|webp))', html_content, re.I)
|
||||
if m: return self._proc_url(m.group(1))
|
||||
|
||||
if 'url(' in html_content:
|
||||
m = re.search(r'url\s*\(\s*[\'"]?([^"\'\)]+)[\'"]?\s*\)', html_content, re.I)
|
||||
if m: return self._proc_url(m.group(1))
|
||||
|
||||
return ''
|
||||
|
||||
def _proc_url(self, url):
|
||||
if not url: return ''
|
||||
url = url.strip('\'" ')
|
||||
if url.startswith('data:'):
|
||||
try:
|
||||
_, b64_str = url.split(',', 1)
|
||||
raw = b64decode(b64_str)
|
||||
if not (raw.startswith(b'\xff\xd8') or raw.startswith(b'\x89PNG') or raw.startswith(b'GIF8')):
|
||||
raw = self.aesimg(raw)
|
||||
key = hashlib.md5(raw).hexdigest()
|
||||
img_cache[key] = raw
|
||||
return f"{self.getProxyUrl()}&type=cache&key={key}"
|
||||
except: return ""
|
||||
if not url.startswith('http'):
|
||||
url = f"{self.host}{url}" if url.startswith('/') else f"{self.host}/{url}"
|
||||
return f"{self.getProxyUrl()}&url={self.e64(url)}&type=img"
|
||||
|
||||
def getpq(self, data):
|
||||
try: return pq(data)
|
||||
except: return pq(data.encode('utf-8'))
|
||||
@@ -524,6 +524,12 @@
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/91吃瓜中心.py"
|
||||
},
|
||||
{
|
||||
"key": "mrds",
|
||||
"name": "🐬每日大赛.py|🔞",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/每日大赛.py"
|
||||
},
|
||||
{
|
||||
"key": "xmzb",
|
||||
"name": "🐬熊猫视频.py|🔞",
|
||||
|
||||
+719
@@ -0,0 +1,719 @@
|
||||
{
|
||||
"spider": "./tvbox.jar",
|
||||
"logo": "https://img.freepik.com/free-vector/cute-dolphin-swimming-cartoon-vector-icon-illustration-animal-nature-icon-isolated-flat-vector_138676-12582.jpg?semt=ais_hybrid&w=740&q=80",
|
||||
"wallpaper":"http://tool.teyonds.com/api",
|
||||
"warningText": "注意:如果别人倒卖海豚影视接口收费的都是骗子,没有qq群微信群,只有tg官方交流群 TG:@hshsjk",
|
||||
"sites": [
|
||||
{
|
||||
"key": "MGtv",
|
||||
"name": "🐬芒果TV.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/芒果TV.py"
|
||||
},
|
||||
{
|
||||
"key": "ppx",
|
||||
"name": "🐬皮皮虾.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/皮皮虾.py",
|
||||
"ext": "http://43.248.117.123:4680"
|
||||
},
|
||||
{
|
||||
"key": "fY",
|
||||
"name": "🐬枫叶影院(关梯子使用)",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/枫叶影院.py"
|
||||
},
|
||||
{
|
||||
"key": "rb",
|
||||
"name": "🐬热播APP.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/热播APP.py"
|
||||
},
|
||||
{
|
||||
"key": "JP",
|
||||
"name": "🐬金牌APP.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/金牌APP.py"
|
||||
},
|
||||
{
|
||||
"key": "GZ",
|
||||
"name": "🐬瓜子APP.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/瓜子APP.py"
|
||||
},
|
||||
{
|
||||
"key": "nmvm",
|
||||
"name": "🐬农民影视.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/农民影视.py"
|
||||
},
|
||||
{
|
||||
"key": "xc",
|
||||
"name": "🐬星辰影院.py(关梯)",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/星辰影院.py"
|
||||
},
|
||||
{
|
||||
"key": "hstv",
|
||||
"name": "🐬华数TV.py(关梯)",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/华数TV.py"
|
||||
},
|
||||
{
|
||||
"key": "dttv",
|
||||
"name": "🐬蛋挞TV.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/蛋挞TV.py"
|
||||
},
|
||||
{
|
||||
"key": "dsys",
|
||||
"name": "🐬毒舌影视.py(关梯)",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/毒舌影视.py"
|
||||
},
|
||||
{
|
||||
"key": "qw",
|
||||
"name": "🐬七味.py(关梯)",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/七味.py"
|
||||
},
|
||||
{
|
||||
"key": "kf",
|
||||
"name": "🐬咖啡体育直播.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/咖啡直播.py"
|
||||
},
|
||||
{
|
||||
"key": "sm",
|
||||
"name": "🐬熊猫直播",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/熊猫直播.py"
|
||||
},
|
||||
{
|
||||
"key": "blzb",
|
||||
"name": "🐬哔哩直播.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/哔哩直播.py"
|
||||
},
|
||||
{
|
||||
"key": "jhzb",
|
||||
"name": "🐬聚合直播.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/聚合直播.py"
|
||||
},
|
||||
{
|
||||
"key": "MiFun",
|
||||
"name": "🐬MiFun动漫.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/MiFun动漫.py"
|
||||
},
|
||||
{
|
||||
"key": "smdj",
|
||||
"name": "🐬星芽短剧.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/星芽短剧.py"
|
||||
},
|
||||
{
|
||||
"key": "hmjc",
|
||||
"name": "🐬河马剧场.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/河马剧场.py"
|
||||
},
|
||||
{
|
||||
"key": "hgdj",
|
||||
"name": "🐬红果短剧.py",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/红果短剧.py"
|
||||
},
|
||||
{
|
||||
"key": "网易云音|音乐",
|
||||
"name": "🐬网易云音.py",
|
||||
"type": 3,
|
||||
"api": "https://xn--fjq53n.xyz/Ting/yinyue/网易云音乐.py"
|
||||
},
|
||||
{
|
||||
"key": "网易云音乐1",
|
||||
"name": "🐬网易云1.py",
|
||||
"type": 3,
|
||||
"api": "https://xn--fjq53n.xyz/Ting/yinyue/网易云音乐1.py"
|
||||
}
|
||||
],
|
||||
"parses": [
|
||||
{
|
||||
"name": "盘古",
|
||||
"type": 0,
|
||||
"url": "https://www.playm3u8.cn/jiexi.php?url=",
|
||||
"ext": {
|
||||
"header": {
|
||||
"user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "极速",
|
||||
"type": 0,
|
||||
"url": "https://jiexi.789jiexi.net:4433/?url="
|
||||
},
|
||||
{
|
||||
"name": "虾米解析",
|
||||
"type": 0,
|
||||
"url": "https://jx.xmflv.com/?url="
|
||||
},
|
||||
{
|
||||
"name": "淘片解析",
|
||||
"type": 0,
|
||||
"url": "https://jx.yparse.com/index.php?url="
|
||||
},
|
||||
{
|
||||
"name": "解析1",
|
||||
"type": 0,
|
||||
"url": "https://huayong.net/999/?v="
|
||||
},
|
||||
{
|
||||
"name": "解析2",
|
||||
"type": 0,
|
||||
"url": "https://jx.m3u8.tv/jiexi/?url="
|
||||
},
|
||||
{
|
||||
"name": "解析3",
|
||||
"type": 0,
|
||||
"url": "https://t2.qlplayer.cyou/player/analysis.php?v="
|
||||
},
|
||||
|
||||
{
|
||||
"name": "解析4",
|
||||
"type": 0,
|
||||
"url": "https://www.ckplayer.vip/jiexi/?url="
|
||||
},
|
||||
{
|
||||
"name": "解析5",
|
||||
"type": 0,
|
||||
"url": "https://nm.xxxc137.top/static/player/artplayer.html?url="
|
||||
},
|
||||
{
|
||||
"name": "解析6",
|
||||
"type": 0,
|
||||
"url": "https://www.yemu.xyz/?url="
|
||||
},
|
||||
{
|
||||
"name": "冰豆",
|
||||
"type": 0,
|
||||
"url": "https://bd.jx.cn/?url="
|
||||
},
|
||||
{
|
||||
"name":"爱酷",
|
||||
"type":0,
|
||||
"url":"https://jx.zhanlangbu.com/?url="
|
||||
},
|
||||
{"name":"云解析","type":0,"url":"https://jx.yparse.com/index.php?url=","ext":{"header":{"user-agent":"Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36"}}},
|
||||
{"name":"777","type":0,"url":"https://jx.jsonplayer.com/player/?url=","ext":{"header":{"user-agent":"Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36"}}},
|
||||
{"name":"-剖云-","type":0,"url":"https://www.kkvip2022.com/vip/jiexi1/?url=","ext":{"header":{"user-agent":"Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36"}}},
|
||||
{"name":"-全看-","type":0,"url":"https://jx.quankan.app/?url=","ext":{"header":{"user-agent":"Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36"}}}
|
||||
],
|
||||
"doh": [
|
||||
{
|
||||
"name": "Google",
|
||||
"url": "https://dns.google/dns-query",
|
||||
"ips": [
|
||||
"8.8.4.4",
|
||||
"8.8.8.8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Cloudflare",
|
||||
"url": "https://cloudflare-dns.com/dns-query",
|
||||
"ips": [
|
||||
"1.1.1.1",
|
||||
"1.0.0.1",
|
||||
"2606:4700:4700::1111",
|
||||
"2606:4700:4700::1001"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AdGuard",
|
||||
"url": "https://dns.adguard.com/dns-query",
|
||||
"ips": [
|
||||
"94.140.14.140",
|
||||
"94.140.14.141"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DNSWatch",
|
||||
"url": "https://resolver2.dns.watch/dns-query",
|
||||
"ips": [
|
||||
"84.200.69.80",
|
||||
"84.200.70.40"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Quad9",
|
||||
"url": "https://dns.quad9.net/dns-quer",
|
||||
"ips": [
|
||||
"9.9.9.9",
|
||||
"149.112.112.112"
|
||||
]
|
||||
}
|
||||
],
|
||||
"ads": [
|
||||
"mozai.4gtv.tv",
|
||||
"static-mozai.4gtv.tv"
|
||||
],
|
||||
"lives": [
|
||||
{
|
||||
"name": "🐬各大源合集 海豚影视永久免费如有收费的都是骗子",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://gh-proxy.org/https://raw.githubusercontent.com/807080747/zv/refs/heads/main/sese.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬综合直播 海豚影视交流群 TG:@hshsjk9",
|
||||
"type": 0,
|
||||
"playerType": 2,
|
||||
"ua": "okhttp",
|
||||
"url": "https://raw.githubusercontent.com/fleung49/star/refs/heads/main/mit"
|
||||
},
|
||||
{
|
||||
"name": "🐬电视家",
|
||||
"type": 0,
|
||||
"playerType": 2,
|
||||
"ua": "okhttp",
|
||||
"url": "https://gh-proxy.org/https://github.com/bang359/dsj/raw/main/dsjcs.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬地方直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://ghfast.top/https://raw.githubusercontent.com/develop202/migu_video/refs/heads/main/interface.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬地方直播2",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://raw.githubusercontent.com/Guovin/iptv-api/gd/output/ipv4/result.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬海燕直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://gh-proxy.org/https://raw.githubusercontent.com/wujiangliu/live-sources/refs/heads/main/haiyan.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬薄荷直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://gh-proxy.org/https://raw.githubusercontent.com/wujiangliu/live-sources/refs/heads/main/bhmb.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬湘西直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://hub.glowp.xyz/https://raw.githubusercontent.com/wujiangliu/live-sources/refs/heads/main/xiangxi.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬全球直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://gh-proxy.org/https://raw.githubusercontent.com/wujiangliu/live-sources/refs/heads/main/%E5%85%A8%E7%90%83%E7%9B%B4%E6%92%AD.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬咪咕直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "http://www.52top.com.cn:678/downloads/migu.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬iptv直播",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://wget.la/https://raw.githubusercontent.com/vinkerq/iptv-api/refs/heads/master/iptv.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬小新TV",
|
||||
"type": 0,
|
||||
"ua": "okhttp/5.3.2",
|
||||
"url": "https://d.kstore.dev/download/9565/小新TV.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬北美长城源",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://ha.msbot.dpdns.org/wall.php"
|
||||
},
|
||||
{
|
||||
"name": "🐬港台",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://feer-cdn-bp.xpnb.qzz.io/xnkl.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬台湾台",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://epg.pw/test_channels_taiwan.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬体育台",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "http://82.156.243.185:33389/fwc.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬国际TV",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://raw.githubusercontent.com/xJEYDAin/iptv/main/output/all_merged.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬UnifiTV(马来节点)",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/unifi.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬裤佬TV",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://gh-proxy.org/https://raw.githubusercontent.com/Jsnzkpg/Jsnzkpg/Jsnzkpg/Jsnzkpg1.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬Gather",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://iptv.yang-1989.eu.org/m3u/Gather.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬Mytv",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://cdn.qd.je/live.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬新加坡(梯子)",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "http://xtvantsc.xyz/新加坡.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬黄蚂蚁先锋推流源",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "http://ge.html-5.me//ii/黄蚂蚁先锋推流源.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬风云源",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "http://iptv.4666888.xyz/FYTV.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬飞扬源",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://www.985pan.com/down.php/bf5e9607ff407fcdd71f63928ea5bc79.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬港奥台国际",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "http://tv123.vvvv.ee/tv.m3u"
|
||||
},
|
||||
{
|
||||
"name": "🐬中港台直播源",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://t.freetv.fun/m3u/playlist_all.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬4GTV(梯子台湾节点)720p",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/4gtv.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬4GTV怡淳酒店(梯子台湾节点)720p",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "http://xtvantsc.xyz/4gtv.txt"
|
||||
},
|
||||
{
|
||||
"name": "🐬4GTV(梯子任何节点)1080p",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://ha.msbot.dpdns.org/4gtv_api.php"
|
||||
},
|
||||
{
|
||||
"name": "🐬jackTV(梯子)",
|
||||
"type": 0,
|
||||
"ua": "okhttp",
|
||||
"url": "https://php.946985.filegear-sg.me/jackTV.m3u"
|
||||
}
|
||||
],
|
||||
"ijk": [
|
||||
{
|
||||
"group": "软解码",
|
||||
"options": [
|
||||
{
|
||||
"category": 4,
|
||||
"name": "opensles",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "overlay-format",
|
||||
"value": "842225234"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "framedrop",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "soundtouch",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "start-on-prepared",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 1,
|
||||
"name": "http-detect-range-support",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 1,
|
||||
"name": "fflags",
|
||||
"value": "fastseek"
|
||||
},
|
||||
{
|
||||
"category": 2,
|
||||
"name": "skip_loop_filter",
|
||||
"value": "48"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "reconnect",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "enable-accurate-seek",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec-auto-rotate",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec-handle-resolution-change",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec-hevc",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 1,
|
||||
"name": "dns_cache_timeout",
|
||||
"value": "600000000"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "硬解码",
|
||||
"options": [
|
||||
{
|
||||
"category": 4,
|
||||
"name": "opensles",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "overlay-format",
|
||||
"value": "842225234"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "framedrop",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "soundtouch",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "start-on-prepared",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 1,
|
||||
"name": "http-detect-range-support",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 1,
|
||||
"name": "fflags",
|
||||
"value": "fastseek"
|
||||
},
|
||||
{
|
||||
"category": 2,
|
||||
"name": "skip_loop_filter",
|
||||
"value": "48"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "reconnect",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "enable-accurate-seek",
|
||||
"value": "0"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec-auto-rotate",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec-handle-resolution-change",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 4,
|
||||
"name": "mediacodec-hevc",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"category": 1,
|
||||
"name": "dns_cache_timeout",
|
||||
"value": "600000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"proxy": [
|
||||
"file://TV/proxy.json"
|
||||
],
|
||||
"rules": [
|
||||
{
|
||||
"name": "cl",
|
||||
"hosts": [
|
||||
"magnet"
|
||||
],
|
||||
"regex": [
|
||||
"最 新",
|
||||
"直 播",
|
||||
"更 新"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "火山嗅探",
|
||||
"hosts": [
|
||||
"huoshan.com"
|
||||
],
|
||||
"regex": [
|
||||
"item_id="
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "抖音嗅探",
|
||||
"hosts": [
|
||||
"douyin.com"
|
||||
],
|
||||
"regex": [
|
||||
"is_play_url="
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "农民嗅探",
|
||||
"hosts": [
|
||||
"toutiaovod.com"
|
||||
],
|
||||
"regex": [
|
||||
"video/tos/cn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "七新嗅探",
|
||||
"hosts": [
|
||||
"api.52wyb.com"
|
||||
],
|
||||
"regex": [
|
||||
"m3u8?pt=m3u8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "夜市",
|
||||
"hosts": [
|
||||
"yeslivetv.com"
|
||||
],
|
||||
"script": [
|
||||
"document.getElementsByClassName('vjs-big-play-button')[0].click()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "毛驴",
|
||||
"hosts": [
|
||||
"www.maolvys.com"
|
||||
],
|
||||
"script": [
|
||||
"document.getElementsByClassName('swal-button swal-button--confirm')[0].click()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "czzy",
|
||||
"hosts": [
|
||||
"10086.cn"
|
||||
],
|
||||
"regex": [
|
||||
"/storageWeb/servlet/downloadServlet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bdys",
|
||||
"hosts": [
|
||||
"bytetos.com",
|
||||
"byteimg.com",
|
||||
"bytednsdoc.com",
|
||||
"pstatp.com"
|
||||
],
|
||||
"regex": [
|
||||
"/tos-cn"
|
||||
],
|
||||
"exclude": [
|
||||
".m3u8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bdys10",
|
||||
"hosts": [
|
||||
"bdys10.com"
|
||||
],
|
||||
"regex": [
|
||||
"/obj/"
|
||||
],
|
||||
"exclude": [
|
||||
".m3u8"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -608,6 +608,12 @@
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/91吃瓜中心.py"
|
||||
},
|
||||
{
|
||||
"key": "mrds",
|
||||
"name": "🐬每日大赛.py|🔞[成人]",
|
||||
"type": 3,
|
||||
"api": "https://ghfast.top/https://raw.githubusercontent.com/FGBLH/GHK/refs/heads/main/py/每日大赛.py"
|
||||
},
|
||||
{
|
||||
"key": "xmzb",
|
||||
"name": "🐬熊猫视频.py|🔞[成人]",
|
||||
|
||||
Reference in New Issue
Block a user