更新线路

潇洒线路:v08.22(14)
PG线路:20250822-0736
This commit is contained in:
Liu
2025-08-23 02:45:03 +08:00
parent 20af0a51fc
commit 0b0ea07f84
10 changed files with 4 additions and 254 deletions

View File

@@ -1,7 +0,0 @@
{
"简介": "+pt-10 pb-10\" style=*>&&</p>",
"图片": "data-original=\"&&\"[替换:amp;>>空]",
"线路数组": "#ewave-playlist-&&</li>",
"分类url": "https://www.7.movie/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$24#电视剧$21#电影$20#动漫$22#综艺$23"
}

View File

@@ -321,20 +321,6 @@
"version": ""
}
},
{
"key": "爱看",
"name": "爱看丨APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://154.37.220.65",
"dataKey": "uI1TkPJC8B46AyN3",
"dataIv": "uI1TkPJC8B46AyN3",
"deviceId": "2112fc5eac600314ba95c4d65da9286b3",
"version": "120"
}
},
{
"key": "蓝光",
"name": "蓝光APP",
@@ -931,22 +917,6 @@
"filterable": 1,
"ext": "./XYQHiker/短剧屋.json"
},
{
"key": "七七",
"name": "七七|影视",
"type": 1,
"api": "http://6.qqqtv.top/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"categories": [
"推荐",
"电影",
"电视剧",
"综艺",
"动漫"
]
},
{
"key": "天翼影视",
"name": "天翼|影视",
@@ -995,16 +965,6 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "追星影视",
"name": "追星|影视",
"type": 3,
"api": "./py/追星影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "厂长影视",
"name": "厂长|影视",
@@ -1154,13 +1114,6 @@
"api": "csp_HBPQ",
"ext": "./XBPQ/骚火影视.json"
},
{
"key": "七点影视",
"name": "七点|影视",
"type": 3,
"api": "csp_HBPQ",
"ext": "./XBPQ/七点影视.json"
},
{
"key": "三九影视",
"name": "三九|影视",
@@ -1324,20 +1277,6 @@
"version": ""
}
},
{
"key": "黑猫动漫",
"name": "黑猫|动漫",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://dm.xxdm123.top:9991",
"dataKey": "0fe3b5781782c621",
"dataIv": "0fe3b5781782c621",
"deviceId": "",
"version": "203"
}
},
{
"key": "樱花动漫",
"name": "樱花|动漫",

View File

@@ -1,182 +0,0 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import string
import sys
from base64 import b64decode, b64encode
from urllib.parse import quote, unquote
sys.path.append('..')
import concurrent.futures
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 destroy(self):
pass
host='https://xy.51gy.top'
headers = {
'User-Agent': 'okhttp/4.9.1',
'mark-time': 'null',
'fn-api-version': '3.1.9',
'versionCode': '19',
'product': 'gysg',
'sg': '22664e555e0015684f988833803b3055',
}
def homeContent(self, filter):
data=self.fetch(f"{self.host}/api.php/vod/type", headers=self.headers).json()
result,filters,videos = {},{},[]
classes = [{'type_id': i['type_name'], 'type_name': i['type_name']} for i in data['list'][1:]]
body={'token':'', 'type_id':data['list'][0]['type_id']}
ldata=self.post(f"{self.host}/api.php/vod/category", data=body, headers=self.headers).json()
for i in ldata['data']['banner']:
videos.append({
'vod_id':i.get('vod_id'),
'vod_name':i.get('vod_name'),
'vod_pic':i.get('vod_pic_thumb')
})
with concurrent.futures.ThreadPoolExecutor(max_workers=len(classes)) as executor:
future_to_aid = {executor.submit(self.fts, aid): aid for aid in classes}
for future in concurrent.futures.as_completed(future_to_aid):
aid = future_to_aid[future]
try:
aid_id, fts = future.result()
filters[aid_id] = fts
except Exception as e:
print(f"Error processing aid {aid}: {e}")
result['class'] = classes
result['filters'] = filters
result['list'] = videos
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
params={'state':extend.get('state',tid) or tid,'class':extend.get('classes','全部'),'area':extend.get('area','全部'),'year':extend.get('year','全部'),'lang':extend.get('lang','全部'),'version':extend.get('version','全部'),'pg':pg}
data=self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json()
result = {}
videos = []
for i in data['data']['list']:
if str(i.get('vod_id', 0)) != '0':
videos.append({
'vod_id': i.get('vod_id'),
'vod_name': i.get('vod_name'),
'vod_pic': i.get('vod_pic'),
'vod_year': f"{i.get('vod_score')}",
'vod_remarks': i.get('vod_remarks')
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
body={'ids':ids[0],'uni_code':self.getunc(),'ac':'detail','token':''}
data=self.post(f"{self.host}/api.php/vod/detail2", data=body, headers=self.headers).json()
v=data['data']
vod = {
'type_name': v.get('type_name'),
'vod_year': v.get('vod_year'),
'vod_area': v.get('vod_area'),
'vod_lang': v.get('vod_lang'),
'vod_remarks': v.get('vod_remarks'),
'vod_actor': v.get('vod_actor'),
'vod_director': v.get('vod_director'),
'vod_content': v.get('vod_content')
}
n,p=[],[]
for i in v['vod_play_list']:
pp=i['player_info']
n.append(pp['show'])
np=[]
for j in i['urls']:
cd={'parse':pp.get('parse'),'url':j['url'],'headers':pp.get('headers')}
np.append(f"{j['name']}${self.e64(json.dumps(cd))}")
p.append('#'.join(np))
vod.update({'vod_play_from':'$$$'.join(n),'vod_play_url':'$$$'.join(p)})
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data=self.fetch(f"{self.host}/api.php/vod/search", params={'keywords':key,'type':'1','pg':pg}, headers=self.headers).json()
return {'list':data['list'],'page':pg}
def playerContent(self, flag, id, vipFlags):
ids=json.loads(self.d64(id))
headers = {}
urls=ids['url']
if ids.get('headers'):
hs=ids['headers'].split('=>',1)
headers[hs[0].strip()]=hs[-1].strip()
if isinstance(ids.get('parse'), list) and len(ids['parse']) > 0:
urls=[]
for i,x in enumerate(ids['parse']):
su=f"{self.getProxyUrl()}&url={quote(x+ids['url'])}"
urls.extend([f'解析{i+1}',su])
return {'parse': 0, 'url': urls, 'header': headers}
def localProxy(self, param):
try:
body = {'url':unquote(param['url'])}
data=self.post(f"{self.host}/api.php/vod/m_jie_xi", data=body, headers=self.headers).json()
url=data.get('url') or data['data'].get('url')
return [302,'video/MP2T',None,{'Location':url}]
except:
return []
def liveContent(self, url):
pass
def fts(self, tdata):
params={'state':tdata['type_id'],'pg':'1'}
data = self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json()
ftks = ["classes", "area", "lang", "year", "version", "state"]
filter = [
{
'name': k,
'key': k,
'value': [{'n': i, 'v': i} for i in v.split(',')]
}
for k, v in data['data']['classes']["type_extend"].items()
if k in ftks and v
]
return tdata['type_id'],filter
def getunc(self):
chars = string.ascii_lowercase + string.digits
data = ''.join(random.choice(chars) for _ in range(16))
return self.e64(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:
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:
return ""

Binary file not shown.