This commit is contained in:
晚风拂柳颜 2024-01-11 23:42:19 +08:00
parent 51bb2e6d73
commit 96e85aefd8
8 changed files with 127 additions and 42 deletions

View File

@ -1 +1 @@
3.9.49beta21
3.9.49beta22

View File

@ -6,9 +6,6 @@
# Date : 2024/1/11
import os
import jpype
from jpype.types import *
import sys
sys.path.append('..')
@ -18,21 +15,38 @@ try:
except ImportError:
from t4.base.spider import BaseSpider
# 全局变量
gParam = {
# JVM已经启用过某个jar文件
"JVM": {'xx.jar': False},
}
class Spider(BaseSpider): # 元类 默认的元类 type
def _prepare_env(self):
jar_path: str = ''
jClass = None
def _prepare_env(self, jpype):
global gParam
if gParam['JVM'].get(self.jar_path):
return
try:
jpype.startJVM(classpath=[self.jar_path], convertStrings=False)
except:
pass
gParam['JVM'][self.jar_path] = True
except Exception as e:
self.log(f'jpype.startJVM发生了错误:{e}')
def init_jar(self, jar_path="./bdys.jar"):
self.log(f'base_java_loader 初始化jar文件:{jar_path}')
if not os.path.exists(jar_path):
raise FileNotFoundError
self.jar_path = jar_path
self._prepare_env()
self.jClass = jpype.JClass
if self.ENV.lower() == 't4':
import jpype
self._prepare_env(jpype)
self.jClass = jpype.JClass
elif self.ENV.lower() == 't3':
self.jClass = None
def init(self, extend=""):
pass

View File

@ -317,8 +317,32 @@ class Spider(BaseSpider): # 元类 默认的元类 type
"Referer": "https://www.baidu.com/"
}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
def localProxy(self, params):
# http://192.168.31.49:5707/api/v1/vod/哔滴影视?proxy=1&do=py&type=1.m3u8
print(params)
content = """
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:170471784
#EXT-X-TARGETDURATION:10
#EXT-X-PROGRAM-DATE-TIME:2024-01-11T20:43:53+08:00
#EXTINF:10.000, no desc
http://gctxyc.liveplay.myqcloud.com/gc/gllj01_1_md-170471784.ts
#EXT-X-PROGRAM-DATE-TIME:2024-01-11T20:44:03+08:00
#EXTINF:10.000, no desc
http://gctxyc.liveplay.myqcloud.com/gc/gllj01_1_md-170471785.ts
#EXT-X-PROGRAM-DATE-TIME:2024-01-11T20:44:13+08:00
#EXTINF:10.000, no desc
http://gctxyc.liveplay.myqcloud.com/gc/gllj01_1_md-170471786.ts
#EXT-X-PROGRAM-DATE-TIME:2024-01-11T20:44:23+08:00
#EXTINF:10.000, no desc
http://gctxyc.liveplay.myqcloud.com/gc/gllj01_1_md-170471787.ts
""".strip()
return [200, 'text/plain', content]
# return [404, 'text/plain', 'Not Found']
# return [200, "video/MP2T", content]
# return [200, "video/MP2T", ""]
# -----------------------------------------------自定义函数-----------------------------------------------
def eval_computer(self, text):

View File

@ -675,8 +675,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
"Referer": "https://tv.cctv.com/"
}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
def localProxy(self, params):
return [200, "video/MP2T", ""]
# -----------------------------------------------自定义函数-----------------------------------------------
# 访问网页

View File

@ -422,8 +422,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
"Referer": "https://www.bttwo.net/"
}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
def localProxy(self, params):
return [200, "video/MP2T", ""]
# -----------------------------------------------自定义函数-----------------------------------------------
def eval_computer(self, text):
@ -497,6 +497,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
if __name__ == '__main__':
from t4.core.loader import t4_spider_init
spider = Spider()
t4_spider_init(spider)
spider.init_api_ext_file() # 生成筛选对应的json文件

View File

@ -190,7 +190,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
ret = r.json()
data = self.decode(ret['data'])
# print(data)
page_count = 24 # 默认赋值一页列表24条数据
page_count = 12 # 默认赋值一页列表12条数据|这个值一定要写正确看他默认一页多少条
d = [{
'vod_name': vod['movieName'],
@ -219,7 +219,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
r = self.fetch(url, headers=self.headers)
ret = r.json()
data = self.decode(ret['data'])
print(data)
# print(self.json2str(data))
vod = data['movie']
playlist = data['playlist']
@ -230,16 +230,10 @@ class Spider(BaseSpider): # 元类 默认的元类 type
titles.append(title)
if not plays.get(title):
plays[title] = []
# print(p)
if p.get('tosId') and len(playlist) < 2:
if p.get('tosId'):
purl = self.api + '/playurl/' + str(p['id']) + '?type=' + str(p.get('tosId') or '0')
print(purl)
r = self.fetch(purl, headers=self.headers)
ret = r.json()
data = self.decode(ret['data'])
print(data)
url = data['url']
plays[title].append({'name': '至尊线路', 'url': url})
plays[title].append({'name': '至尊线路', 'url': f'vip://{purl}'})
if p.get('url'):
for p0 in p['url'].split(','):
@ -300,7 +294,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
r = self.fetch(url, headers=self.headers)
ret = r.json()
data = self.decode(ret['data'])
print(data)
# print(data)
d = []
for li in data['list']:
d.append({
@ -313,7 +307,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
result = {
'list': d
}
print(result)
# print(result)
return result
def playerContent(self, flag, id, vipFlags):
@ -324,20 +318,35 @@ class Spider(BaseSpider): # 元类 默认的元类 type
@param vipFlags: vip标识
@return:
"""
url = id
url = str(id)
# 至尊线路
if url.startswith('vip://'):
purl = url.split('vip://')[1]
# print(purl)
r = self.fetch(purl, headers=self.headers)
ret = r.json()
data = self.decode(ret['data'])
# print(data)
url = data.get('url') or ''
if not url:
self.log(data)
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
}
if 'm3u8' not in url:
parse = 0
else:
parse = 1
parse = 0
if 'm3u8' in url:
proxyUrl = self.getProxyUrl()
if proxyUrl:
url = proxyUrl + '&url=' + url + '&name=1.m3u8'
result = {
'parse': parse, # 1=嗅探,0=播放
'playUrl': '', # 解析链接
'url': url, # 直链或待嗅探地址
'header': headers, # 播放UA
}
# print(result)
return result
config = {
@ -349,8 +358,27 @@ class Spider(BaseSpider): # 元类 默认的元类 type
"token": ""
}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
def localProxy(self, params):
# print(params)
url = params.get('url')
name = params.get('name') or 'm3u8'
burl = 'https://www.bdys03.com'
new_url = url.replace("www.bde4.cc", "www.bdys03.com")
self.log(f'原始url:{url},替换域名后url:{new_url}')
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36",
"Referer": burl,
"Origin": burl,
}
r = self.fetch(new_url, headers=headers)
pdata = self.process_data(r.content).decode('utf-8')
# pdata = re.sub(r'(.*?ts)', r'https://www.bdys03.com/\1', pdata)
pdata = self.replaceAll(pdata, r'(.*?ts)', r'https://www.bdys03.com/\1')
content = pdata.strip()
media_type = 'text/plain' if 'txt' in name else 'video/MP2T'
return [200, media_type, content]
# -----------------------------------------------自定义函数-----------------------------------------------
def decode(self, text):
@ -358,12 +386,23 @@ class Spider(BaseSpider): # 元类 默认的元类 type
res = self.class1.dec(bt)
return self.str2json(str(res))
def process_data(self, req_bytes):
"""
个性化方法:跳过req返回的content 3354之前的字节并进行gzip解压
@param req_bytes:
@return:
"""
stream = self.skip_bytes(req_bytes, 3354)
decrypted_data = self.gzipCompress(stream)
return decrypted_data
if __name__ == '__main__':
from t4.core.loader import t4_spider_init
spider = Spider()
t4_spider_init(spider)
print(spider.ENV)
# spider.init_api_ext_file() # 生成筛选对应的json文件
# spider.log({'key': 'value'})
# spider.log('====文本内容====')
@ -371,4 +410,8 @@ if __name__ == '__main__':
# print(spider.homeVideoContent())
# print(spider.categoryContent('0', 1, False, None))
# print(spider.detailContent([24420]))
spider.searchContent('斗罗大陆')
# spider.searchContent('斗罗大陆')
# print(spider.playerContent('至尊线路', 'vip://https://www.bdys03.com/api/v1/playurl/174296?type=1', None))
print(spider.playerContent('需要解析',
'https://www.bde4.cc/10E79044B82A84F70BE1308FFA5232E4DC3D0CA9EC2BF6B1D4EF56B2CE5B67CF238965CCAE17F859665B7E166720986D.m3u8',
None))

View File

@ -237,8 +237,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
}
header = {}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
def localProxy(self, params):
return [200, "video/MP2T", ""]
# -----------------------------------------------自定义函数-----------------------------------------------
# 正则取文本
@ -381,8 +381,10 @@ class Spider(BaseSpider): # 元类 默认的元类 type
print("'{0}':'{1}',".format(value.text, value.attrib['id']))
return temporaryClass
if __name__ == '__main__':
from t4.core.loader import t4_spider_init
spider = Spider()
t4_spider_init(spider)
print(spider.homeContent(True))

View File

@ -219,7 +219,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
@param extend: 当前筛选数据
@return:
"""
page_count = 21 # 默认赋值一页列表21条数据
page_count = 21 # 默认赋值一页列表21条数据|这个值一定要写正确看他默认一页多少条
fls = extend.keys() # 哪些刷新数据
# ?type_id=1&area=&lang=&year=&order=time&type_name=&page=1&pageSize=21
params = {'page': pg, 'pageSize': page_count, 'tid': tid, 'type_name': gParam['TypeDict'].get(str(tid)) or ''}
@ -345,8 +345,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
"Referer": "https://www.baidu.com/"
}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
def localProxy(self, params):
return [200, "video/MP2T", ""]
# -----------------------------------------------自定义函数-----------------------------------------------
def decode(self, text):
@ -361,8 +361,9 @@ if __name__ == '__main__':
# 分类页:http://60.204.185.245:7090/appto/v1/home/cateData?id=1
# 推荐页:http://60.204.185.245:7090/appto/v1/config/get?p=android
from t4.core.loader import t4_spider_init
spider = Spider()
t4_spider_init(spider,'https://jihulab.com/qiaoji/open/-/raw/main/yinghua')
t4_spider_init(spider, 'https://jihulab.com/qiaoji/open/-/raw/main/yinghua')
# spider.init_api_ext_file() # 生成筛选对应的json文件
# print(spider.homeContent(True))