更新线路

整体线路:v09.06
PG线路:20250907-1139
潇洒线路:v09.07(22)
This commit is contained in:
Liu
2025-09-08 00:51:24 +08:00
parent 5315971000
commit 068192898a
26 changed files with 1112 additions and 3180 deletions

View File

@@ -20,7 +20,7 @@
},
{
"key": "豆瓣1",
"name": "📢公告❤更新:9/2❤",
"name": "📢公告❤更新:9/6❤",
"type": 3,
"api": "csp_Notice",
"searchable": 0,
@@ -45,7 +45,7 @@
],
"url_key": "woog",
"threadinfo": {
"chunksize": 242,
"chunksize": 259,
"threads": 16
}
}
@@ -74,7 +74,7 @@
],
"url_key": "UC",
"threadinfo": {
"chunksize": 207,
"chunksize": 256,
"threads": 60
}
}
@@ -105,7 +105,7 @@
],
"url_key": "woog2",
"threadinfo": {
"chunksize": 252,
"chunksize": 212,
"threads": 16
}
}
@@ -266,16 +266,13 @@
"api": "csp_Qiyou"
},
{
"key": "AI2",
"name": "💡AI┃仅搜索",
"key": "1905",
"name": "💡1905影视",
"type": 3,
"api": "csp_AI",
"api": "csp_Web1905",
"searchable": 1,
"quickSearch": 1,
"filterable": 0,
"playerType": 2,
"jar": "./jars/AI2.jar",
"ext": "7lj763gg0939795i037ki481k20ki2i3g3lk840883843k6k5l4354k0k10k48411g8654l9885g83ih2h0lh295lll81jg8k66l7011l8hji0l432912jhi3hk3140kghkhj3ghl7782871"
"quickSearch": 0,
"filterable": 0
},
{
"key": "爱看",
@@ -306,20 +303,6 @@
"version": "120"
}
},
{
"key": "1若惜",
"name": "👑若惜|弹幕",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://110.40.59.188:9527",
"dataKey": "ebad3f1a58b13933",
"dataIv": "ebad3f1a58b13933",
"deviceId": "",
"version": ""
}
},
{
"key": "萝卜",
"name": "👑萝卜|弹幕",
@@ -515,18 +498,6 @@
"version": ""
}
},
{
"key": "星河",
"name": "👑星河|弹幕",
"type": 3,
"quickSearch": 1,
"api": "csp_AppSy",
"ext": {
"url": "http://192.140.161.171:2563",
"listKey": "aassddwwxxllsx1x",
"parsesKey": "aassddwwxxllsx1x"
}
},
{
"key": "和友",
"name": "👑和友|弹幕",
@@ -540,22 +511,6 @@
"parsesKey": "gHSLmx3JQRasgztO"
}
},
{
"key": "干饭",
"name": "👑干饭|弹幕",
"type": 3,
"quickSearch": 1,
"api": "csp_AppQi",
"ext": {
"url": "http://110.42.53.99:1080",
"site": "",
"dataKey": "staraugust123456",
"dataIv": "staraugust123456",
"deviceId": "",
"version": "301",
"ua": ""
}
},
{
"key": "鲸鱼",
"name": "👑鲸鱼|弹幕",
@@ -571,37 +526,6 @@
"version": ""
}
},
{
"key": "一三",
"name": "👑一三|弹幕",
"type": 3,
"quickSearch": 1,
"api": "csp_AppQi",
"ext": {
"url": "",
"site": "https://cdn-tupic-duofun-neimenggu.56uxi.com/1.txt",
"dataKey": "qwertyuiopqwerty",
"dataIv": "qwertyuiopqwerty",
"deviceId": "",
"version": "",
"ua": ""
}
},
{
"key": "柚子",
"name": "👑柚子|弹幕",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://cnm.guahd.com",
"dataKey": "f2A7D4B9E8C16531",
"dataIv": "f2A7D4B9E8C16531",
"deviceId": "",
"version": "",
"ua": ""
}
},
{
"key": "漫国",
"name": "👑漫国|弹幕",
@@ -681,13 +605,20 @@
}
},
{
"key": "1905",
"name": "🧿1905影视",
"key": "小猪",
"name": "👑小猪丨弹幕",
"type": 3,
"api": "csp_Web1905",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "",
"site": "https://xz4k.top/url.txt",
"dataKey": "1785acb6c963184b",
"dataIv": "1785acb6c963184b",
"deviceId": "",
"version": "",
"ua": ""
}
},
{
"key": "养生堂",
@@ -801,6 +732,19 @@
"分类url": "https://www.myripon.com/"
}
},
{
"key": "韩国",
"name": "🧿韩国|影视",
"type": 3,
"api": "csp_XBPQ",
"jar": "./jars/养生堂.jar",
"ext": {
"副标题": "欧歌专属",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类url": "https://www.hanjukankan.com/;;"
}
},
{
"key": "猎手影视",
"name": "🧡猎手PY影视",
@@ -812,17 +756,6 @@
"filterable": 1,
"playerType": 2
},
{
"key": "若惜",
"name": "🧡若惜PY影视",
"type": 3,
"api": "./api/若惜追剧APP.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "金牌影视PY",
"name": "🧡金牌PY影视",
@@ -874,6 +807,17 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "软件",
"name": "🅰️软件┃教程",
"type": 3,
"api": "./api/drpy2.min.js",
"searchable": 0,
"quickSearch": 0,
"filterable": 1,
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/软件教程.json"
},
{
"key": "学堂",
"name": "🅰️学堂┃教育",
@@ -1039,28 +983,6 @@
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/哔哩套餐2.json"
},
{
"key": "软件",
"name": "🅰️软件┃教程",
"type": 3,
"api": "./api/drpy2.min.js",
"searchable": 0,
"quickSearch": 0,
"filterable": 1,
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/软件教程.json"
},
{
"key": "演唱会",
"name": "🅰️演唱会┃哔哩",
"type": 3,
"api": "./api/drpy2.min.js",
"searchable": 0,
"quickSearch": 0,
"filterable": 1,
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/演唱会.json"
},
{
"key": "MV",
"name": "🌈歌曲┃哔哩",
@@ -1105,6 +1027,17 @@
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/球星合集.json"
},
{
"key": "演唱会",
"name": "🅰️演唱会┃哔哩",
"type": 3,
"api": "./api/drpy2.min.js",
"searchable": 0,
"quickSearch": 0,
"filterable": 1,
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/演唱会.json"
},
{
"key": "戏曲",
"name": "🅰️戏曲┃合集",
@@ -1116,6 +1049,23 @@
"order_num": 142,
"ext": "./js/我的哔哩.js?type=url&params=https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/戏曲合集.json"
},
{
"key": "哔哩哔哩听书",
"name": "🅰听书┃哔哩",
"type": 3,
"api": "csp_Bili",
"searchable": 0,
"quickSearch": 0,
"filterable": 0,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt",
"json": "https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/Bilibili/小说.json"
},
"style": {
"type": "rect",
"ratio": 1.597
}
},
{
"key": "急救教学",
"name": "🚑急救|教学",
@@ -1130,19 +1080,6 @@
},
"gridview": "0-0-4.1"
},
{
"key": "本地",
"name": "🌸本地|视频",
"type": 3,
"api": "csp_LocalFile"
},
{
"key": "预告",
"name": "🌸新片|预告",
"type": 3,
"api": "csp_DouBan",
"searchable": 0
},
{
"key": "合集",
"name": "💋哔哩┃合集",
@@ -1164,6 +1101,19 @@
},
"ext": "./js/88看球.js"
},
{
"key": "本地",
"name": "🌸本地|视频",
"type": 3,
"api": "csp_LocalFile"
},
{
"key": "预告",
"name": "🌸新片|预告",
"type": 3,
"api": "csp_DouBan",
"searchable": 0
},
{
"key": "曼波动漫",
"name": "🤣曼波|动漫",
@@ -1277,17 +1227,6 @@
"changeable": 1,
"ext": "./json/xm.json"
},
{
"key": "小斑快映",
"name": "❤快映4K弹幕",
"type": 3,
"api": "csp_PanWebShare",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"changeable": 1,
"ext": "./json/xbky.json"
},
{
"key": "多多",
"name": "❤多多4K弹幕",
@@ -1310,6 +1249,33 @@
"changeable": 1,
"ext": "./json/wogg.json"
},
{
"key": "糖果",
"name": "❤糖果|搜索",
"type": 3,
"api": "csp_TGSou",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "音海",
"name": "❤音海|搜索",
"type": 3,
"api": "csp_YinHai",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "盘搜",
"name": "❤盘搜|搜索",
"type": 3,
"api": "csp_PanSou",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "阿里云盘",
"name": "❤我的|阿里",
@@ -1365,24 +1331,6 @@
"ratio": 1.433
}
},
{
"key": "糖果",
"name": "❤糖果|搜索",
"type": 3,
"api": "csp_TGSou",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "音海",
"name": "❤音海|搜索",
"type": 3,
"api": "csp_YinHai",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "push_agent",
"name": "📢手机|推送",

View File

@@ -1,255 +0,0 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from Crypto.Hash import MD5
sys.path.append("..")
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from urllib.parse import quote, urlparse
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor
import json
import time
from base.spider import Spider
class Spider(Spider):
'''
sites照常配置
lives配置
{
"name": "xxxx",
"type": 3,
"api": "路径/若惜追剧APP.py",
"ext": ""
}
'''
def init(self, extend=""):
self.host = self.gethost()
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
def homeContent(self, filter):
data = self.getdata("/api.php/getappapi.index/initV119")
dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序",
"sort": "排序"}
filters = {}
classes = []
json_data = data["type_list"]
homedata = data["banner_list"][8:]
for item in json_data:
if item["type_name"] == "全部":
continue
has_non_empty_field = False
jsontype_extend = json.loads(item["type_extend"])
homedata.extend(item["recommend_list"])
jsontype_extend["sort"] = "最新,最热,最赞"
classes.append({"type_name": item["type_name"], "type_id": item["type_id"]})
for key in dy:
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 dy 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": dy[dkey], "value": value_array})
result = {}
result["class"] = classes
result["filters"] = filters
result["list"] = homedata[1:]
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg,
"sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'),
"class": extend.get('class', '全部')}
result = {}
data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body)
result["list"] = data["recommend_list"]
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
body = f"vod_id={ids[0]}"
data = self.getdata("/api.php/getappapi.index/vodDetail", body)
vod = data["vod"]
play = []
names = []
for itt in data["vod_play_list"]:
a = []
names.append(itt["player_info"]["show"])
for it in itt['urls']:
it['user_agent']=itt["player_info"].get("user_agent")
it["parse"]=itt["player_info"].get("parse")
a.append(f"{it['name']}${self.e64(json.dumps(it))}")
play.append("#".join(a))
vod["vod_play_from"] = "$$$".join(names)
vod["vod_play_url"] = "$$$".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
body = f"keywords={key}&type_id=0&page={pg}"
data = self.getdata("/api.php/getappapi.index/searchList", body)
result = {"list": data["search_list"], "page": pg}
return result
def playerContent(self, flag, id, vipFlags):
ids = json.loads(self.d64(id))
h={"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")}
try:
if re.search(r'url=', ids['parse_api_url']):
data=self.fetch(ids['parse_api_url'], headers=h, timeout=10).json()
url=data.get('url') or data['data'].get('url')
else:
body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'],True))}&token={ids.get('token')}"
b = self.getdata("/api.php/getappapi.index/vodParse", body)['json']
url = json.loads(b)['url']
if 'error' in url:raise ValueError(f"解析失败: {url}")
p=0
except Exception as e:
print('错误信息:',e)
url, p = ids['url'], 1
if re.search(r'\.jpg|\.png|\.jpeg', url):
url = self.Mproxy(url)
result = {}
result["parse"] = p
result["url"] = url
result["header"] = h
return result
def liveContent(self, url):
id=self.homeContent(True)['class'][-1]['type_id']
vlist=self.categoryContent(id,1,False,{})['list']
results = []
with ThreadPoolExecutor(max_workers=len(vlist)) as executor:
futures = [executor.submit(self.livedetailContent, item['vod_name'], item['vod_id']) for item in vlist]
for future in futures:
try:
detail = future.result()
if detail:
results.append(detail)
except Exception as e:
print(f"处理详情数据失败: {str(e)}")
return '\n'.join(results)
def livedetailContent(self, name,id):
try:
print(f"获取直播源:{name}")
body = f"vod_id={id}"
data = self.getdata("/api.php/getappapi.index/vodDetail", body)
play = [f"{name},#genre#"]
for itt in data["vod_play_list"]:
for it in itt['urls']:
play.append(f"{it['name']}, {it['url']}")
except Exception as e:
print(f"获取直播源失败:{str(e)}")
play=[]
return '\n'.join(play)
def localProxy(self, param):
return self.Mlocal(param)
def gethost(self):
headers = {
'User-Agent': 'okhttp/3.14.9'
}
host = self.fetch('https://rxysyyds.oss-cn-chengdu.aliyuncs.com/getapp.txt', headers=headers).text
return host.strip()
def aes(self, text,b=None):
key = b"ebad3f1a58b13933"
cipher = AES.new(key, AES.MODE_CBC, key)
if b:
ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size))
ct = b64encode(ct_bytes).decode("utf-8")
return ct
else :
pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size)
return pt.decode("utf-8")
def header(self):
t = str(int(time.time()))
header = {"Referer":self.host,
"User-Agent": "okhttp/3.14.9", "app-version-code": "140", "app-ui-mode": "light",
"app-api-verify-time": t, "app-user-device-id": self.md5(t),
"app-api-verify-sign": self.aes(t,True),
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}
return header
def getdata(self, path, data=None):
vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data']
data1 = self.aes(vdata)
return json.loads(data1)
def Mproxy(self, url):
return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8"
def Mlocal(self, param,header=None):
url = self.d64(param["url"])
ydata = self.fetch(url, headers=header, allow_redirects=False)
data = ydata.content.decode('utf-8')
if ydata.headers.get('Location'):
url = ydata.headers['Location']
data = self.fetch(url, headers=header).content.decode('utf-8')
parsed_url = urlparse(url)
durl = parsed_url.scheme + "://" + parsed_url.netloc
lines = data.strip().split('\n')
for index, string in enumerate(lines):
if '#EXT' not in string and 'http' not in string:
last_slash_index = string.rfind('/')
lpath = string[:last_slash_index + 1]
lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def md5(self, text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()

Binary file not shown.

BIN
欧歌/jars/豆瓣1.jar Normal file

Binary file not shown.

View File

@@ -1,26 +0,0 @@
{
"SiteUrl": "",
"Domains": [
"http://xsayang.fun:12512"
],
"SiteWord": "xbky",
"SiteName": "小斑快映",
"Classes": [
{
"type_name": "电影",
"type_id": "1"
},
{
"type_name": "剧集",
"type_id": "2"
},
{
"type_name": "综艺",
"type_id": "3"
},
{
"type_name": "动漫",
"type_id": "4"
}
]
}

File diff suppressed because it is too large Load Diff

Binary file not shown.