mirror of
https://github.com/ls125781003/tvboxtg.git
synced 2025-12-16 09:12:24 +00:00
更新线路
整体线路:v08.27 潇洒线路:v08.27(20)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# tvboxtg
|
# tvboxtg
|
||||||
#
|
#
|
||||||
整体更新25.08.24
|
整体更新25.08.27
|
||||||
#
|
#
|
||||||
The resources are sourced from the internet and are only used for learning purposes. Please delete them yourself 24 hours after using them for learning.
|
The resources are sourced from the internet and are only used for learning purposes. Please delete them yourself 24 hours after using them for learning.
|
||||||
81
小米/api.json
81
小米/api.json
@@ -134,33 +134,26 @@
|
|||||||
"type": "rect",
|
"type": "rect",
|
||||||
"ratio": 1.333
|
"ratio": 1.333
|
||||||
},
|
},
|
||||||
"ext": ""
|
"ext": "https://ka1dfj.slsw6.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "AppQi1",
|
||||||
|
"name": "🎴爱盈┃小米",
|
||||||
|
"type": 3,
|
||||||
|
"api": "csp_AppQi",
|
||||||
|
"changeable": "0",
|
||||||
|
"quickSearch": 0,
|
||||||
|
"filterable": 1,
|
||||||
|
"ext": "BciM/oLDYQqSU++RAsI5xz2Dmz98Blyw0pp0T+0QPiq/bSU1IhcLmPsn25NijfG6B3fLoAmVGEL0/tWb+o0nZYn1u5i3pWNxWaYYmNV1x0c="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "鲸鱼",
|
"key": "鲸鱼",
|
||||||
"name": "🐋鲸鱼┃测试",
|
"name": "🐋鲸鱼┃小米",
|
||||||
"quickSearch": 0,
|
"quickSearch": 0,
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "./api/getapp3.4.2.py",
|
"api": "csp_AppQi",
|
||||||
"ext": {
|
"ext": "rP+4azM8YFgp3eAhyeALtUUEFpbkqmzGj2V5VZryxRbpkSjlsHbarRCZPOInvId4s3WK9rZ2YJsDy8NvMqQKQXowVmh33j+qD55VxmvMzzffqLi7UXvCKdy6PzbDhzFq"
|
||||||
"host": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json",
|
|
||||||
"datakey": "AAdgrdghjfgswerA",
|
|
||||||
"api": 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "爱影视",
|
|
||||||
"name": "🎴爱盈┃测试",
|
|
||||||
"quickSearch": 0,
|
|
||||||
"searchable": 1,
|
|
||||||
"type": 3,
|
|
||||||
"api": "./api/getapp3.4.2.py",
|
|
||||||
"ext": {
|
|
||||||
"host": "https://aysappto.oss-cn-chengdu.aliyuncs.com/qj1.txt",
|
|
||||||
"datakey": "dksvndkaAjekakcE",
|
|
||||||
"api": 2
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "娱乐",
|
"key": "娱乐",
|
||||||
@@ -235,8 +228,8 @@
|
|||||||
"type": 3,
|
"type": 3,
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"quickSearch": 0,
|
"quickSearch": 0,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppQi",
|
||||||
"ext": "rP+4azM8YFgp3eAhyeALtUUEFpbkqmzGj2V5VZryxRbpkSjlsHbarRCZPOInvId4s3WK9rZ2YJsDy8NvMqQKQXowVmh33j+qD55VxmvMzzfiJ2fHkCRZg4+8NFWs+b1X"
|
"ext": "9ee0oa0Y30GapSvZ2C2RVE2HwH08KKvP0VhAZCVWpnluXpZNLRZrNCMeKyCWw1JOj3jlA6tSdRPHvvTyBCuIMzwlKeODvXst4zEi0DFYqmEXOu+cG8rF7/kIckBMVYvn"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "麻花",
|
"key": "麻花",
|
||||||
@@ -244,8 +237,8 @@
|
|||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 0,
|
"quickSearch": 0,
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppQi",
|
||||||
"ext": "8DBhgTHlwsdde1V+XNnHWDUo96bisLPlXXWowe/BjAkFTByXVW8rl6nRNIr6DTC0"
|
"ext": "lo54N2bJ4DtrhxC9P676hHekMnvMvX1mNNhVKf3kE5Wgy3H/b30VkkDKAYauTqZsDdvpB5GqFDm8YyeyiKclJTSLQ/tOARL2p/dbX8OIae9/PHnAUKONnpKuoD52E5AT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "QD4K",
|
"key": "QD4K",
|
||||||
@@ -261,33 +254,6 @@
|
|||||||
"apisignkey": "lvdoutv-1.0.0"
|
"apisignkey": "lvdoutv-1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "比迪",
|
|
||||||
"name": "🐕比迪┃影视",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 0,
|
|
||||||
"playerType": 1,
|
|
||||||
"searchable": 1,
|
|
||||||
"api": "csp_AppQi",
|
|
||||||
"ext": "HM+RJliOAzVbMKoUegXt5SVTp6lV507+wK0S5QCxiEEA9zs/swmgAb3z+F5RUY21tC1US86Wo/2RunTWZsPUxuLk0B4X5G0RneEJEfEV4CWzDmIx8mdFYBlSJiwJcoNYioDEVsg76bXpsGDfXTT4Mb092SQ1oS22g2A1GUtEcn8="
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "咖啡",
|
|
||||||
"name": "☕咖啡┃影视",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 0,
|
|
||||||
"searchable": 1,
|
|
||||||
"api": "csp_AppQi",
|
|
||||||
"ext": "iCAfNu0lnzDbPNyRZNPADkQjEsRXYXbhzP+dNzKN1SEfbPPIOKvEKGUJbNHH/Enk8UofJl+f8LL+N/h69EZDaFMMPeCDLq9N1TV0aTDfIY89NkrX+nhIaX9d//xiiVns"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "鲸鱼影视",
|
|
||||||
"name": "🐟鲸鱼┃APP",
|
|
||||||
"type": 3,
|
|
||||||
"api": "csp_AppGet",
|
|
||||||
"quickSearch": 0,
|
|
||||||
"ext": "4+puQ2fxsNJWd5UauYRtFWna9fnlt5dkKL3x9lhE4fvCfvUo8e8W9xdW1SgtEluDq2x7Lwe3quIjIBtAOG2UJw=="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "大豆",
|
"key": "大豆",
|
||||||
"name": "✅大豆┃影视",
|
"name": "✅大豆┃影视",
|
||||||
@@ -316,17 +282,6 @@
|
|||||||
"api": "csp_AppMuou",
|
"api": "csp_AppMuou",
|
||||||
"ext": "ewogICJTaXRlVXJsIjogImh0dHBzOi8vbXVvdS53bGJicS54eXoiLAogICJFeHQiOiAiaXA5K1dadnQ5ODNzUzAwOGtyTktobno4Q2Fzb2d3QjlLYkp2U0FmNGJRZEg5aUlGVHE4Y0tGM3Y4RFBicnphUiIsCiAgIkluZm8iOiAiaHR0cHM6Ly9tdW91aHQuZ2d0dmIuY2MiCn0="
|
"ext": "ewogICJTaXRlVXJsIjogImh0dHBzOi8vbXVvdS53bGJicS54eXoiLAogICJFeHQiOiAiaXA5K1dadnQ5ODNzUzAwOGtyTktobno4Q2Fzb2d3QjlLYkp2U0FmNGJRZEg5aUlGVHE4Y0tGM3Y4RFBicnphUiIsCiAgIkluZm8iOiAiaHR0cHM6Ly9tdW91aHQuZ2d0dmIuY2MiCn0="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "公公",
|
|
||||||
"name": "🎬️公共┃影视",
|
|
||||||
"type": 3,
|
|
||||||
"searchable": 1,
|
|
||||||
"quickSearch": 0,
|
|
||||||
"api": "csp_Muou",
|
|
||||||
"jar": "./jars/巧技.jar",
|
|
||||||
"playerType": 2,
|
|
||||||
"ext": "7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "牛牛",
|
"key": "牛牛",
|
||||||
"name": "🍁牛牛┃影视",
|
"name": "🍁牛牛┃影视",
|
||||||
|
|||||||
@@ -1,316 +0,0 @@
|
|||||||
# coding = utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
# 新时代青年 2025.06.25 getApp第三版
|
|
||||||
import re,sys,uuid,json,base64,urllib3
|
|
||||||
from Crypto.Cipher import AES
|
|
||||||
from base.spider import Spider
|
|
||||||
from Crypto.Util.Padding import pad,unpad
|
|
||||||
sys.path.append('..')
|
|
||||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
xurl,key,iv,init_data,search_verify = '','','','',''
|
|
||||||
header = {'User-Agent': 'okhttp/3.14.9'}
|
|
||||||
|
|
||||||
def getName(self):
|
|
||||||
return "首页"
|
|
||||||
|
|
||||||
def init(self, extend=''):
|
|
||||||
ext = json.loads(extend.strip())
|
|
||||||
host = ext['host']
|
|
||||||
if not re.match(r'^https?:\/\/[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?(\/)?$', host):
|
|
||||||
host = self.fetch(host, headers=self.header, timeout=10, verify=False).text.rstrip('/')
|
|
||||||
ua = ext.get('ua')
|
|
||||||
if ua:
|
|
||||||
self.header['User-Agent'] = ua
|
|
||||||
api = ext.get('api', '/api.php/getappapi')
|
|
||||||
if str(api) == '2':
|
|
||||||
api = '/api.php/qijiappapi'
|
|
||||||
self.xurl = host + api
|
|
||||||
self.key = ext['datakey']
|
|
||||||
self.iv = ext.get('dataiv', self.key)
|
|
||||||
res = self.fetch(self.xurl + '.index/initV119', headers=self.header, verify=False).json()
|
|
||||||
encrypted_data = res['data']
|
|
||||||
response = self.decrypt(encrypted_data)
|
|
||||||
init_data = json.loads(response)
|
|
||||||
self.init_data = init_data
|
|
||||||
self.search_verify = init_data['config'].get('system_search_verify_status', False)
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
kjson = self.init_data
|
|
||||||
result = {"class": [], "filters": {}}
|
|
||||||
for i in kjson['type_list']:
|
|
||||||
if not(i['type_name'] in {'全部', 'QQ', 'juo.one'} or '企鹅群' in i['type_name']):
|
|
||||||
result['class'].append({
|
|
||||||
"type_id": i['type_id'],
|
|
||||||
"type_name": i['type_name']
|
|
||||||
})
|
|
||||||
name_mapping = {'class': '类型', 'area': '地区', 'lang': '语言', 'year': '年份', 'sort': '排序'}
|
|
||||||
filter_items = []
|
|
||||||
for filter_type in i.get('filter_type_list', []):
|
|
||||||
filter_name = filter_type.get('name')
|
|
||||||
values = filter_type.get('list', [])
|
|
||||||
if not values:
|
|
||||||
continue
|
|
||||||
value_list = [{"n": value, "v": value} for value in values]
|
|
||||||
display_name = name_mapping.get(filter_name, filter_name)
|
|
||||||
key = 'by' if filter_name == 'sort' else filter_name
|
|
||||||
filter_items.append({
|
|
||||||
"key": key,
|
|
||||||
"name": display_name,
|
|
||||||
"value": value_list
|
|
||||||
})
|
|
||||||
type_id = i.get('type_id')
|
|
||||||
if filter_items:
|
|
||||||
result["filters"][str(type_id)] = filter_items
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
videos = []
|
|
||||||
kjson = self.init_data
|
|
||||||
for i in kjson['type_list']:
|
|
||||||
for item in i['recommend_list']:
|
|
||||||
vod_id = item['vod_id']
|
|
||||||
name = item['vod_name']
|
|
||||||
pic = item['vod_pic']
|
|
||||||
remarks = item['vod_remarks']
|
|
||||||
video = {
|
|
||||||
"vod_id": vod_id,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": remarks
|
|
||||||
}
|
|
||||||
videos.append(video)
|
|
||||||
return {'list': videos}
|
|
||||||
|
|
||||||
def categoryContent(self, cid, pg, filter, ext):
|
|
||||||
videos = []
|
|
||||||
payload = {
|
|
||||||
'area': ext.get('area','全部'),
|
|
||||||
'year': ext.get('year','全部'),
|
|
||||||
'type_id': cid,
|
|
||||||
'page': str(pg),
|
|
||||||
'sort': ext.get('sort','最新'),
|
|
||||||
'lang': ext.get('lang','全部'),
|
|
||||||
'class': ext.get('class','全部')
|
|
||||||
}
|
|
||||||
url = f'{self.xurl}.index/typeFilterVodList'
|
|
||||||
res = self.post(url=url, headers=self.header, data=payload, verify=False).json()
|
|
||||||
encrypted_data = res['data']
|
|
||||||
kjson = self.decrypt(encrypted_data)
|
|
||||||
kjson1 = json.loads(kjson)
|
|
||||||
for i in kjson1['recommend_list']:
|
|
||||||
id = i['vod_id']
|
|
||||||
name = i['vod_name']
|
|
||||||
pic = i['vod_pic']
|
|
||||||
remarks = i['vod_remarks']
|
|
||||||
video = {
|
|
||||||
"vod_id": id,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": remarks
|
|
||||||
}
|
|
||||||
videos.append(video)
|
|
||||||
return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
|
|
||||||
|
|
||||||
def detailContent(self, ids):
|
|
||||||
did = ids[0]
|
|
||||||
payload = {
|
|
||||||
'vod_id': did,
|
|
||||||
}
|
|
||||||
api_endpoints = ['vodDetail', 'vodDetail2']
|
|
||||||
|
|
||||||
for endpoint in api_endpoints:
|
|
||||||
url = f'{self.xurl}.index/{endpoint}'
|
|
||||||
response = self.post(url=url, headers=self.header, data=payload, verify=False)
|
|
||||||
|
|
||||||
if response.status_code == 200:
|
|
||||||
response_data = response.json()
|
|
||||||
encrypted_data = response_data['data']
|
|
||||||
kjson1 = self.decrypt(encrypted_data)
|
|
||||||
kjson = json.loads(kjson1)
|
|
||||||
break
|
|
||||||
videos = []
|
|
||||||
play_form = ''
|
|
||||||
play_url = ''
|
|
||||||
lineid = 1
|
|
||||||
name_count = {}
|
|
||||||
for line in kjson['vod_play_list']:
|
|
||||||
keywords = {'防走丢', '群', '防失群', '官网'}
|
|
||||||
player_show = line['player_info']['show']
|
|
||||||
if any(keyword in player_show for keyword in keywords):
|
|
||||||
player_show = f'{lineid}线'
|
|
||||||
line['player_info']['show'] = player_show
|
|
||||||
count = name_count.get(player_show, 0) + 1
|
|
||||||
name_count[player_show] = count
|
|
||||||
if count > 1:
|
|
||||||
line['player_info']['show'] = f"{player_show}{count}"
|
|
||||||
play_form += line['player_info']['show'] + '$$$'
|
|
||||||
parse = line['player_info']['parse']
|
|
||||||
parse_type = line['player_info']['parse_type']
|
|
||||||
player_parse_type = line['player_info']['player_parse_type']
|
|
||||||
kurls = ""
|
|
||||||
for vod in line['urls']:
|
|
||||||
token = 'token+' + vod['token']
|
|
||||||
kurls += f"{str(vod['name'])}${parse},{vod['url']},{token},{player_parse_type},{parse_type}#"
|
|
||||||
kurls = kurls.rstrip('#')
|
|
||||||
play_url += kurls + '$$$'
|
|
||||||
lineid += 1
|
|
||||||
play_form = play_form.rstrip('$$$')
|
|
||||||
play_url = play_url.rstrip('$$$')
|
|
||||||
videos.append({
|
|
||||||
"vod_id": did,
|
|
||||||
"vod_name": kjson['vod']['vod_name'],
|
|
||||||
"vod_actor": kjson['vod']['vod_actor'].replace('演员', ''),
|
|
||||||
"vod_director": kjson['vod'].get('vod_director', '').replace('导演', ''),
|
|
||||||
"vod_content": kjson['vod']['vod_content'],
|
|
||||||
"vod_remarks": kjson['vod']['vod_remarks'],
|
|
||||||
"vod_year": kjson['vod']['vod_year'] + '年',
|
|
||||||
"vod_area": kjson['vod']['vod_area'],
|
|
||||||
"vod_play_from": play_form,
|
|
||||||
"vod_play_url": play_url
|
|
||||||
})
|
|
||||||
return {'list': videos}
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
url = ''
|
|
||||||
aid = id.split(',')
|
|
||||||
uid = aid[0]
|
|
||||||
kurl = aid[1]
|
|
||||||
token = aid[2].replace('token+', '')
|
|
||||||
player_parse_type = aid[3]
|
|
||||||
parse_type = aid[4]
|
|
||||||
if parse_type == '0':
|
|
||||||
res = {"parse": 0, "url": kurl, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
|
|
||||||
elif parse_type == '2':
|
|
||||||
res = {"parse": 1, "url": uid+kurl, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
|
|
||||||
elif player_parse_type == '2':
|
|
||||||
response = self.fetch(url=f'{uid}{kurl}',headers=self.header, verify=False)
|
|
||||||
if response.status_code == 200:
|
|
||||||
kjson1 = response.json()
|
|
||||||
res = {"parse": 0, "url": kjson1['url'], "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
|
|
||||||
else:
|
|
||||||
id1 = self.encrypt(kurl)
|
|
||||||
payload = {
|
|
||||||
'parse_api': uid,
|
|
||||||
'url': id1,
|
|
||||||
'player_parse_type': player_parse_type,
|
|
||||||
'token': token
|
|
||||||
}
|
|
||||||
url1 = f"{self.xurl}.index/vodParse"
|
|
||||||
response = self.post(url=url1, headers=self.header, data=payload, verify=False)
|
|
||||||
if response.status_code == 200:
|
|
||||||
response_data = response.json()
|
|
||||||
encrypted_data = response_data['data']
|
|
||||||
kjson = self.decrypt(encrypted_data)
|
|
||||||
kjson1 = json.loads(kjson)
|
|
||||||
kjson2 = kjson1['json']
|
|
||||||
kjson3 = json.loads(kjson2)
|
|
||||||
url = kjson3['url']
|
|
||||||
res = {"parse": 0, "playUrl": '', "url": url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
|
|
||||||
return res
|
|
||||||
|
|
||||||
def searchContent(self, key, quick, pg="1"):
|
|
||||||
videos = []
|
|
||||||
if 'xiaohys.com' in self.xurl:
|
|
||||||
host = self.xurl.split('api.php')[0]
|
|
||||||
data = self.fetch(f'{host}index.php/ajax/suggest?mid=1&wd={key}').json()
|
|
||||||
for i in data['list']:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": i['id'],
|
|
||||||
"vod_name": i['name'],
|
|
||||||
"vod_pic": i.get('pic')
|
|
||||||
})
|
|
||||||
else:
|
|
||||||
payload = {
|
|
||||||
'keywords': key,
|
|
||||||
'type_id': "0",
|
|
||||||
'page': str(pg)
|
|
||||||
}
|
|
||||||
if self.search_verify:
|
|
||||||
verifi = self.verification()
|
|
||||||
if verifi is None:
|
|
||||||
return {'list':[]}
|
|
||||||
payload['code'] = verifi['code']
|
|
||||||
payload['key'] = verifi['uuid']
|
|
||||||
url = f'{self.xurl}.index/searchList'
|
|
||||||
res = self.post(url=url, data=payload, headers=self.header, verify=False).json()
|
|
||||||
if not res.get('data'):
|
|
||||||
return {'list':[] ,'msg': res.get('msg')}
|
|
||||||
encrypted_data = res['data']
|
|
||||||
kjson = self.decrypt(encrypted_data)
|
|
||||||
kjson1 = json.loads(kjson)
|
|
||||||
for i in kjson1['search_list']:
|
|
||||||
id = i['vod_id']
|
|
||||||
name = i['vod_name']
|
|
||||||
pic = i['vod_pic']
|
|
||||||
remarks = i['vod_year'] + ' ' + i['vod_class']
|
|
||||||
videos.append({
|
|
||||||
"vod_id": id,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": remarks
|
|
||||||
})
|
|
||||||
return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
|
|
||||||
|
|
||||||
def localProxy(self, params):
|
|
||||||
if params['type'] == "m3u8":
|
|
||||||
return self.proxyM3u8(params)
|
|
||||||
elif params['type'] == "media":
|
|
||||||
return self.proxyMedia(params)
|
|
||||||
elif params['type'] == "ts":
|
|
||||||
return self.proxyTs(params)
|
|
||||||
return None
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def decrypt(self, encrypted_data_b64):
|
|
||||||
key_bytes = self.key.encode('utf-8')
|
|
||||||
iv_bytes = self.iv.encode('utf-8')
|
|
||||||
encrypted_data = base64.b64decode(encrypted_data_b64)
|
|
||||||
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
|
|
||||||
decrypted_padded = cipher.decrypt(encrypted_data)
|
|
||||||
decrypted = unpad(decrypted_padded, AES.block_size)
|
|
||||||
return decrypted.decode('utf-8')
|
|
||||||
|
|
||||||
def encrypt(self, sencrypted_data):
|
|
||||||
key_bytes = self.key.encode('utf-8')
|
|
||||||
iv_bytes = self.iv.encode('utf-8')
|
|
||||||
data_bytes = sencrypted_data.encode('utf-8')
|
|
||||||
padded_data = pad(data_bytes, AES.block_size)
|
|
||||||
cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
|
|
||||||
encrypted_bytes = cipher.encrypt(padded_data)
|
|
||||||
encrypted_data_b64 = base64.b64encode(encrypted_bytes).decode('utf-8')
|
|
||||||
return encrypted_data_b64
|
|
||||||
|
|
||||||
def ocr(self, base64img):
|
|
||||||
dat2 = self.post("http://154.222.22.188:9898/ocr/b64/text", data=base64img, headers=self.header, verify=False).text
|
|
||||||
if dat2:
|
|
||||||
return dat2
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def verification(self):
|
|
||||||
random_uuid = str(uuid.uuid4())
|
|
||||||
dat = self.fetch(f'{self.xurl}.verify/create?key={random_uuid}', headers=self.header, verify=False).content
|
|
||||||
base64_img = base64.b64encode(dat).decode('utf-8')
|
|
||||||
if not dat:
|
|
||||||
return None
|
|
||||||
code = self.ocr(base64_img)
|
|
||||||
if not code:
|
|
||||||
return None
|
|
||||||
code = self.replace_code(code)
|
|
||||||
if not (len(code) == 4 and code.isdigit()):
|
|
||||||
return None
|
|
||||||
return {'uuid': random_uuid, 'code': code}
|
|
||||||
|
|
||||||
def replace_code(self, text):
|
|
||||||
replacements = {'y': '9', '口': '0', 'q': '0', 'u': '0', 'o': '0', '>': '1', 'd': '0', 'b': '8', '已': '2','D': '0', '五': '5'}
|
|
||||||
if len(text) == 3:
|
|
||||||
text = text.replace('566', '5066')
|
|
||||||
text = text.replace('066', '1666')
|
|
||||||
return ''.join(replacements.get(c, c) for c in text)
|
|
||||||
BIN
小米/spider.jar
BIN
小米/spider.jar
Binary file not shown.
107
欧歌/api.json
107
欧歌/api.json
@@ -20,7 +20,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "豆瓣1",
|
"key": "豆瓣1",
|
||||||
"name": "📢公告❤更新:8/17❤",
|
"name": "📢公告❤更新:8/26❤",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_Notice",
|
"api": "csp_Notice",
|
||||||
"searchable": 0,
|
"searchable": 0,
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
],
|
],
|
||||||
"url_key": "woog",
|
"url_key": "woog",
|
||||||
"threadinfo": {
|
"threadinfo": {
|
||||||
"chunksize": 217,
|
"chunksize": 246,
|
||||||
"threads": 16
|
"threads": 16
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
],
|
],
|
||||||
"url_key": "UC",
|
"url_key": "UC",
|
||||||
"threadinfo": {
|
"threadinfo": {
|
||||||
"chunksize": 213,
|
"chunksize": 287,
|
||||||
"threads": 60
|
"threads": 60
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
],
|
],
|
||||||
"url_key": "woog2",
|
"url_key": "woog2",
|
||||||
"threadinfo": {
|
"threadinfo": {
|
||||||
"chunksize": 291,
|
"chunksize": 253,
|
||||||
"threads": 16
|
"threads": 16
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +142,8 @@
|
|||||||
"key": "荐片",
|
"key": "荐片",
|
||||||
"name": "💡荐片|影视",
|
"name": "💡荐片|影视",
|
||||||
"api": "csp_Jianpian",
|
"api": "csp_Jianpian",
|
||||||
"type": 3
|
"type": 3,
|
||||||
|
"ext": "https://ij1men.slsw6.com"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "移动",
|
"key": "移动",
|
||||||
@@ -341,20 +342,6 @@
|
|||||||
"version": "119"
|
"version": "119"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "爱看",
|
|
||||||
"name": "👑爱看|弹幕",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppGet",
|
|
||||||
"ext": {
|
|
||||||
"url": "http://154.37.220.65",
|
|
||||||
"dataKey": "uI1TkPJC8B46AyN3",
|
|
||||||
"dataIv": "uI1TkPJC8B46AyN3",
|
|
||||||
"deviceId": "2112fc5eac600314ba95c4d65da9286b3",
|
|
||||||
"version": "120"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "蓝光",
|
"key": "蓝光",
|
||||||
"name": "👑蓝光|弹幕",
|
"name": "👑蓝光|弹幕",
|
||||||
@@ -425,32 +412,6 @@
|
|||||||
"key3": "73f330328cc0fe67"
|
"key3": "73f330328cc0fe67"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "星河",
|
|
||||||
"name": "👑星河|弹幕",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppSy",
|
|
||||||
"ext": {
|
|
||||||
"url": "http://192.140.161.171:2563",
|
|
||||||
"key1": "aassddwwxxllsx1x",
|
|
||||||
"key2": "aassddwwxxllsx1x",
|
|
||||||
"key3": "aassddwwxxllsx1x"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "爱影",
|
|
||||||
"name": "👑爱影|弹幕",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppSy",
|
|
||||||
"ext": {
|
|
||||||
"url": "http://110.42.7.59:11822",
|
|
||||||
"key1": "aassddwwxxllsx1x",
|
|
||||||
"key2": "1e765e9b09b4dbba",
|
|
||||||
"key3": "1e765e9b09b4dbba"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "加菲",
|
"key": "加菲",
|
||||||
"name": "👑加菲|弹幕",
|
"name": "👑加菲|弹幕",
|
||||||
@@ -559,21 +520,6 @@
|
|||||||
"version": "120"
|
"version": "120"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "鲸鱼",
|
|
||||||
"name": "👑鲸鱼|弹幕",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppQi",
|
|
||||||
"ext": {
|
|
||||||
"url": "",
|
|
||||||
"site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json",
|
|
||||||
"dataKey": "AAdgrdghjfgswerA",
|
|
||||||
"dataIv": "AAdgrdghjfgswerA",
|
|
||||||
"deviceId": "",
|
|
||||||
"version": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "1905",
|
"key": "1905",
|
||||||
"name": "🧿1905|影视",
|
"name": "🧿1905|影视",
|
||||||
@@ -1096,20 +1042,6 @@
|
|||||||
"version": ""
|
"version": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "次元动漫",
|
|
||||||
"name": "🤣次元|动漫",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppGet",
|
|
||||||
"ext": {
|
|
||||||
"url": "https://jjjj.nilinili.org",
|
|
||||||
"dataKey": "672263e98f232a05",
|
|
||||||
"dataIv": "672263e98f232a05",
|
|
||||||
"deviceId": "",
|
|
||||||
"version": "170"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "派对动漫",
|
"key": "派对动漫",
|
||||||
"name": "🤣派对|动漫",
|
"name": "🤣派对|动漫",
|
||||||
@@ -1125,17 +1057,32 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "黑猫动漫",
|
"key": "咕咕动漫",
|
||||||
"name": "🤣黑猫|动漫",
|
"name": "🤣咕咕|动漫",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "https://dm.xxdm123.top:9991",
|
"url": "https://www.gugu3.com",
|
||||||
"dataKey": "0fe3b5781782c621",
|
"dataKey": "nKfZ8KX6JTNWRzTD",
|
||||||
"dataIv": "0fe3b5781782c621",
|
"dataIv": "nKfZ8KX6JTNWRzTD",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
"version": "203"
|
"version": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "多多动漫",
|
||||||
|
"name": "🤣多多|动漫",
|
||||||
|
"type": 3,
|
||||||
|
"quickSearch": 1,
|
||||||
|
"api": "csp_AppGet",
|
||||||
|
"ext": {
|
||||||
|
"url": "",
|
||||||
|
"site": "https://app.cf4k.xyz/1.txt",
|
||||||
|
"dataKey": "qqqqqqqqqqqqqqqq",
|
||||||
|
"dataIv": "qqqqqqqqqqqqqqqq",
|
||||||
|
"deviceId": "",
|
||||||
|
"version": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Binary file not shown.
2884
欧歌/lives/tv.txt
2884
欧歌/lives/tv.txt
File diff suppressed because it is too large
Load Diff
45
潇洒/api.json
45
潇洒/api.json
@@ -208,6 +208,36 @@
|
|||||||
"version": ""
|
"version": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "迪吧",
|
||||||
|
"name": "迪吧|APP",
|
||||||
|
"type": 3,
|
||||||
|
"quickSearch": 1,
|
||||||
|
"api": "csp_AppGet",
|
||||||
|
"ext": {
|
||||||
|
"url": "http://154.37.152.97:5211",
|
||||||
|
"site": "",
|
||||||
|
"dataKey": "685bf108bc47b67d",
|
||||||
|
"dataIv": "685bf108bc47b67d",
|
||||||
|
"deviceId": "",
|
||||||
|
"version": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "橙飞",
|
||||||
|
"name": "橙飞|APP",
|
||||||
|
"type": 3,
|
||||||
|
"quickSearch": 1,
|
||||||
|
"api": "csp_AppGet",
|
||||||
|
"ext": {
|
||||||
|
"url": "http://172.247.189.145:8989",
|
||||||
|
"site": "",
|
||||||
|
"dataKey": "6d1061a50b656564",
|
||||||
|
"dataIv": "6d1061a50b656564",
|
||||||
|
"deviceId": "",
|
||||||
|
"version": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "云端",
|
"key": "云端",
|
||||||
"name": "云端|APP",
|
"name": "云端|APP",
|
||||||
@@ -1266,6 +1296,21 @@
|
|||||||
"version": ""
|
"version": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "米饭",
|
||||||
|
"name": "米饭|APP",
|
||||||
|
"type": 3,
|
||||||
|
"quickSearch": 1,
|
||||||
|
"api": "csp_AppGet",
|
||||||
|
"ext": {
|
||||||
|
"url": "https://get.mymifun.com",
|
||||||
|
"site": "",
|
||||||
|
"dataKey": "GETMIFUNGEIMIFUN",
|
||||||
|
"dataIv": "GETMIFUNGEIMIFUN",
|
||||||
|
"deviceId": "",
|
||||||
|
"version": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "樱花动漫",
|
"key": "樱花动漫",
|
||||||
"name": "樱花|动漫",
|
"name": "樱花|动漫",
|
||||||
|
|||||||
BIN
潇洒/spider.jar
BIN
潇洒/spider.jar
Binary file not shown.
Reference in New Issue
Block a user