Files
TVBoxSE/TVBox_PY/spider_77.py
T
2022-12-02 13:36:22 +08:00

173 lines
5.4 KiB
Python

from spider import Spider, SpiderCategory, SpiderVideo, SpiderEpisode
from proxy import get_proxy_main_url
from urllib.parse import urlparse
from danmaku import get_danmaku_url
import requests
import hashlib
import time
base_params = {
'pcode': '010110005',
'version': '2.0.5',
'devid': hashlib.md5(str(time.time()).encode()).hexdigest(),
'sys': 'android',
'sysver': 11,
'brand': 'google',
'model': 'Pixel_3_XL',
'package': 'com.sevenVideo.app.android'
}
base_headers = {
'User-Agent': 'okhttp/3.12.0',
}
class Spider77(Spider):
def name(self):
return '七七'
def is_searchable(self):
return True
def list_categories(self):
r = requests.get('http://api.kunyu77.com/api.php/provide/filter',
headers=base_headers.copy())
data = r.json()
categories = []
for category_id in data['data']:
category_name = data['data'][category_id][0]['cat']
categories.append(SpiderCategory(category_id, category_name))
return categories
def list_videos(self, category_id, page):
r = requests.get('http://api.kunyu77.com/api.php/provide/searchFilter',
params={
'type_id': category_id,
'pagenum': page,
'pagesize': 50
},
headers=base_headers.copy())
data = r.json()
videos = []
for video in data['data']['result']:
videos.append(
SpiderVideo(id=video['id'],
name=video['title'],
cover=video['videoCover']))
has_next_page = page < data['data']['pagesize']
return videos, has_next_page
def list_episodes(self, video_id):
ts = int(time.time())
params = base_params.copy()
params['ids'] = video_id
params['sj'] = ts
headers = base_headers.copy()
headers['t'] = str(ts)
url = 'http://api.kunyu77.com/api.php/provide/videoDetail'
headers['TK'] = self._get_tk(url, params, ts)
r = requests.get(url, params=params, headers=headers)
detail = r.json()['data']
url = 'http://api.kunyu77.com/api.php/provide/videoPlaylist'
headers['TK'] = self._get_tk(url, params, ts)
r = requests.get(url, params=params, headers=headers)
episodes = r.json()['data']['episodes']
mepisodes = []
for episode in episodes:
sources = []
danmakus = []
for playurl in episode['playurls']:
if playurl['playfrom'] in ['ppayun']:
sources.append({
'name': playurl['playfrom'],
'params': {
'url': playurl['playurl'],
}
})
if playurl['playfrom'] in [
'qq', 'mgtv', 'qiyi', 'youku', 'bilibili'
]:
danmakus.append({
'name': playurl['playfrom'],
'url': get_danmaku_url(playurl['playurl']),
})
mepisodes.append(
SpiderEpisode(
name=episode['title'],
sources=sources,
cover=detail['videoCover'],
description=detail['brief'],
cast=detail['actor'].split(' '),
director=detail['director'],
area=detail['area'],
year=int(detail['year']),
danmakus=danmakus,
))
return mepisodes
def resolve_play_url(self, episode_params):
headers = base_headers.copy()
r = requests.get('http://api.kunyu77.com/api.php/provide/parserUrl',
params={'url': episode_params['url']},
headers=base_headers.copy())
data = r.json()['data']
if 'playHeader' in data:
for key in data['playHeader']:
headers[key] = data['playHeader'][key]
r = requests.get(data['url'])
return get_proxy_main_url(r.json()['url'], headers)
def search_videos(self, keyword):
url = 'http://api.kunyu77.com/api.php/provide/searchVideo'
ts = int(time.time())
params = base_params.copy()
params['sj'] = ts
params['searchName'] = keyword
params['pg'] = 1
headers = base_headers.copy()
headers['t'] = str(ts)
headers['TK'] = self._get_tk(url, params, ts)
r = requests.get(url, params=params, headers=headers)
data = r.json()
videos = []
for video in data['data']:
videos.append(
SpiderVideo(
id=video['id'],
name=video['videoName'],
cover=video['videoCover'],
description=video['brief'],
cast=video['starName'].split(','),
year=int(video['year']),
))
return videos
def _get_tk(self, url, params, ts):
keys = []
for key in params:
keys.append(key)
keys.sort()
src = urlparse(url).path
for key in keys:
src += str(params[key])
src += str(ts)
src += 'XSpeUFjJ'
return hashlib.md5(src.encode()).hexdigest()