更新py
This commit is contained in:
parent
51bb2e6d73
commit
96e85aefd8
@ -1 +1 @@
|
|||||||
3.9.49beta21
|
3.9.49beta22
|
||||||
@ -6,9 +6,6 @@
|
|||||||
# Date : 2024/1/11
|
# Date : 2024/1/11
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import jpype
|
|
||||||
from jpype.types import *
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path.append('..')
|
sys.path.append('..')
|
||||||
@ -18,21 +15,38 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
from t4.base.spider import BaseSpider
|
from t4.base.spider import BaseSpider
|
||||||
|
|
||||||
|
# 全局变量
|
||||||
|
gParam = {
|
||||||
|
# JVM已经启用过某个jar文件
|
||||||
|
"JVM": {'xx.jar': False},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class Spider(BaseSpider): # 元类 默认的元类 type
|
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:
|
try:
|
||||||
jpype.startJVM(classpath=[self.jar_path], convertStrings=False)
|
jpype.startJVM(classpath=[self.jar_path], convertStrings=False)
|
||||||
except:
|
gParam['JVM'][self.jar_path] = True
|
||||||
pass
|
except Exception as e:
|
||||||
|
self.log(f'jpype.startJVM发生了错误:{e}')
|
||||||
|
|
||||||
def init_jar(self, jar_path="./bdys.jar"):
|
def init_jar(self, jar_path="./bdys.jar"):
|
||||||
self.log(f'base_java_loader 初始化jar文件:{jar_path}')
|
self.log(f'base_java_loader 初始化jar文件:{jar_path}')
|
||||||
if not os.path.exists(jar_path):
|
if not os.path.exists(jar_path):
|
||||||
raise FileNotFoundError
|
raise FileNotFoundError
|
||||||
self.jar_path = jar_path
|
self.jar_path = jar_path
|
||||||
self._prepare_env()
|
if self.ENV.lower() == 't4':
|
||||||
self.jClass = jpype.JClass
|
import jpype
|
||||||
|
self._prepare_env(jpype)
|
||||||
|
self.jClass = jpype.JClass
|
||||||
|
elif self.ENV.lower() == 't3':
|
||||||
|
self.jClass = None
|
||||||
|
|
||||||
def init(self, extend=""):
|
def init(self, extend=""):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@ -317,8 +317,32 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
"Referer": "https://www.baidu.com/"
|
"Referer": "https://www.baidu.com/"
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProxy(self, param):
|
def localProxy(self, params):
|
||||||
return [200, "video/MP2T", action, ""]
|
# 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):
|
def eval_computer(self, text):
|
||||||
|
|||||||
@ -675,8 +675,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
"Referer": "https://tv.cctv.com/"
|
"Referer": "https://tv.cctv.com/"
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProxy(self, param):
|
def localProxy(self, params):
|
||||||
return [200, "video/MP2T", action, ""]
|
return [200, "video/MP2T", ""]
|
||||||
|
|
||||||
# -----------------------------------------------自定义函数-----------------------------------------------
|
# -----------------------------------------------自定义函数-----------------------------------------------
|
||||||
# 访问网页
|
# 访问网页
|
||||||
|
|||||||
@ -422,8 +422,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
"Referer": "https://www.bttwo.net/"
|
"Referer": "https://www.bttwo.net/"
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProxy(self, param):
|
def localProxy(self, params):
|
||||||
return [200, "video/MP2T", action, ""]
|
return [200, "video/MP2T", ""]
|
||||||
|
|
||||||
# -----------------------------------------------自定义函数-----------------------------------------------
|
# -----------------------------------------------自定义函数-----------------------------------------------
|
||||||
def eval_computer(self, text):
|
def eval_computer(self, text):
|
||||||
@ -497,6 +497,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from t4.core.loader import t4_spider_init
|
from t4.core.loader import t4_spider_init
|
||||||
|
|
||||||
spider = Spider()
|
spider = Spider()
|
||||||
t4_spider_init(spider)
|
t4_spider_init(spider)
|
||||||
spider.init_api_ext_file() # 生成筛选对应的json文件
|
spider.init_api_ext_file() # 生成筛选对应的json文件
|
||||||
|
|||||||
@ -190,7 +190,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
ret = r.json()
|
ret = r.json()
|
||||||
data = self.decode(ret['data'])
|
data = self.decode(ret['data'])
|
||||||
# print(data)
|
# print(data)
|
||||||
page_count = 24 # 默认赋值一页列表24条数据
|
page_count = 12 # 默认赋值一页列表12条数据|这个值一定要写正确看他默认一页多少条
|
||||||
|
|
||||||
d = [{
|
d = [{
|
||||||
'vod_name': vod['movieName'],
|
'vod_name': vod['movieName'],
|
||||||
@ -219,7 +219,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
r = self.fetch(url, headers=self.headers)
|
r = self.fetch(url, headers=self.headers)
|
||||||
ret = r.json()
|
ret = r.json()
|
||||||
data = self.decode(ret['data'])
|
data = self.decode(ret['data'])
|
||||||
print(data)
|
# print(self.json2str(data))
|
||||||
|
|
||||||
vod = data['movie']
|
vod = data['movie']
|
||||||
playlist = data['playlist']
|
playlist = data['playlist']
|
||||||
@ -230,16 +230,10 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
titles.append(title)
|
titles.append(title)
|
||||||
if not plays.get(title):
|
if not plays.get(title):
|
||||||
plays[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')
|
purl = self.api + '/playurl/' + str(p['id']) + '?type=' + str(p.get('tosId') or '0')
|
||||||
print(purl)
|
plays[title].append({'name': '至尊线路', 'url': f'vip://{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})
|
|
||||||
|
|
||||||
if p.get('url'):
|
if p.get('url'):
|
||||||
for p0 in p['url'].split(','):
|
for p0 in p['url'].split(','):
|
||||||
@ -300,7 +294,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
r = self.fetch(url, headers=self.headers)
|
r = self.fetch(url, headers=self.headers)
|
||||||
ret = r.json()
|
ret = r.json()
|
||||||
data = self.decode(ret['data'])
|
data = self.decode(ret['data'])
|
||||||
print(data)
|
# print(data)
|
||||||
d = []
|
d = []
|
||||||
for li in data['list']:
|
for li in data['list']:
|
||||||
d.append({
|
d.append({
|
||||||
@ -313,7 +307,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
result = {
|
result = {
|
||||||
'list': d
|
'list': d
|
||||||
}
|
}
|
||||||
print(result)
|
# print(result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
def playerContent(self, flag, id, vipFlags):
|
||||||
@ -324,20 +318,35 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
@param vipFlags: vip标识
|
@param vipFlags: vip标识
|
||||||
@return:
|
@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 = {
|
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'
|
'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
|
||||||
parse = 0
|
if 'm3u8' in url:
|
||||||
else:
|
proxyUrl = self.getProxyUrl()
|
||||||
parse = 1
|
if proxyUrl:
|
||||||
|
url = proxyUrl + '&url=' + url + '&name=1.m3u8'
|
||||||
result = {
|
result = {
|
||||||
'parse': parse, # 1=嗅探,0=播放
|
'parse': parse, # 1=嗅探,0=播放
|
||||||
'playUrl': '', # 解析链接
|
'playUrl': '', # 解析链接
|
||||||
'url': url, # 直链或待嗅探地址
|
'url': url, # 直链或待嗅探地址
|
||||||
'header': headers, # 播放UA
|
'header': headers, # 播放UA
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# print(result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
@ -349,8 +358,27 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
"token": ""
|
"token": ""
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProxy(self, param):
|
def localProxy(self, params):
|
||||||
return [200, "video/MP2T", action, ""]
|
# 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):
|
def decode(self, text):
|
||||||
@ -358,12 +386,23 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
res = self.class1.dec(bt)
|
res = self.class1.dec(bt)
|
||||||
return self.str2json(str(res))
|
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__':
|
if __name__ == '__main__':
|
||||||
from t4.core.loader import t4_spider_init
|
from t4.core.loader import t4_spider_init
|
||||||
|
|
||||||
spider = Spider()
|
spider = Spider()
|
||||||
t4_spider_init(spider)
|
t4_spider_init(spider)
|
||||||
|
print(spider.ENV)
|
||||||
# spider.init_api_ext_file() # 生成筛选对应的json文件
|
# spider.init_api_ext_file() # 生成筛选对应的json文件
|
||||||
# spider.log({'key': 'value'})
|
# spider.log({'key': 'value'})
|
||||||
# spider.log('====文本内容====')
|
# spider.log('====文本内容====')
|
||||||
@ -371,4 +410,8 @@ if __name__ == '__main__':
|
|||||||
# print(spider.homeVideoContent())
|
# print(spider.homeVideoContent())
|
||||||
# print(spider.categoryContent('0', 1, False, None))
|
# print(spider.categoryContent('0', 1, False, None))
|
||||||
# print(spider.detailContent([24420]))
|
# 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))
|
||||||
|
|||||||
@ -237,8 +237,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
}
|
}
|
||||||
header = {}
|
header = {}
|
||||||
|
|
||||||
def localProxy(self, param):
|
def localProxy(self, params):
|
||||||
return [200, "video/MP2T", action, ""]
|
return [200, "video/MP2T", ""]
|
||||||
|
|
||||||
# -----------------------------------------------自定义函数-----------------------------------------------
|
# -----------------------------------------------自定义函数-----------------------------------------------
|
||||||
# 正则取文本
|
# 正则取文本
|
||||||
@ -381,8 +381,10 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
print("'{0}':'{1}',".format(value.text, value.attrib['id']))
|
print("'{0}':'{1}',".format(value.text, value.attrib['id']))
|
||||||
return temporaryClass
|
return temporaryClass
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from t4.core.loader import t4_spider_init
|
from t4.core.loader import t4_spider_init
|
||||||
|
|
||||||
spider = Spider()
|
spider = Spider()
|
||||||
t4_spider_init(spider)
|
t4_spider_init(spider)
|
||||||
print(spider.homeContent(True))
|
print(spider.homeContent(True))
|
||||||
|
|||||||
@ -219,7 +219,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
|
|||||||
@param extend: 当前筛选数据
|
@param extend: 当前筛选数据
|
||||||
@return:
|
@return:
|
||||||
"""
|
"""
|
||||||
page_count = 21 # 默认赋值一页列表21条数据
|
page_count = 21 # 默认赋值一页列表21条数据|这个值一定要写正确看他默认一页多少条
|
||||||
fls = extend.keys() # 哪些刷新数据
|
fls = extend.keys() # 哪些刷新数据
|
||||||
# ?type_id=1&area=&lang=&year=&order=time&type_name=&page=1&pageSize=21
|
# ?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 ''}
|
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/"
|
"Referer": "https://www.baidu.com/"
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProxy(self, param):
|
def localProxy(self, params):
|
||||||
return [200, "video/MP2T", action, ""]
|
return [200, "video/MP2T", ""]
|
||||||
|
|
||||||
# -----------------------------------------------自定义函数-----------------------------------------------
|
# -----------------------------------------------自定义函数-----------------------------------------------
|
||||||
def decode(self, text):
|
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/home/cateData?id=1
|
||||||
# 推荐页:http://60.204.185.245:7090/appto/v1/config/get?p=android
|
# 推荐页:http://60.204.185.245:7090/appto/v1/config/get?p=android
|
||||||
from t4.core.loader import t4_spider_init
|
from t4.core.loader import t4_spider_init
|
||||||
|
|
||||||
spider = Spider()
|
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文件
|
# spider.init_api_ext_file() # 生成筛选对应的json文件
|
||||||
|
|
||||||
# print(spider.homeContent(True))
|
# print(spider.homeContent(True))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user