133 lines
4.6 KiB
Python
133 lines
4.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# by @嗷呜
|
|
import random
|
|
import string
|
|
import sys
|
|
sys.path.append('..')
|
|
from base.spider import Spider
|
|
|
|
|
|
class Spider(Spider):
|
|
|
|
def init(self, extend=""):
|
|
self.host,self.headers = self.getat()
|
|
pass
|
|
|
|
def getName(self):
|
|
pass
|
|
|
|
def isVideoFormat(self, url):
|
|
pass
|
|
|
|
def manualVideoCheck(self):
|
|
pass
|
|
|
|
def destroy(self):
|
|
pass
|
|
|
|
def homeContent(self, filter):
|
|
data=self.fetch(f'{self.host}/vod/listing-0-0-0-0-0-0-0-0-0-0',headers=self.headers).json()
|
|
result = {}
|
|
classes = [{
|
|
'type_name': '全部',
|
|
'type_id': '0'
|
|
}]
|
|
filters = {}
|
|
ft=[]
|
|
filter_keys = ['orders', 'areas', 'years', 'definitions', 'durations', 'mosaics', 'langvoices']
|
|
for key in filter_keys:
|
|
if key in data['data']:
|
|
filter_item = {
|
|
'key': key,
|
|
'name': key,
|
|
'value': []
|
|
}
|
|
for item in data['data'][key]:
|
|
first_two = dict(list(item.items())[:2])
|
|
filter_item['value'].append({
|
|
'v': list(first_two.values())[0],
|
|
'n': list(first_two.values())[1]
|
|
})
|
|
ft.append(filter_item)
|
|
filters['0']=ft
|
|
for k in data['data']['categories']:
|
|
classes.append({
|
|
'type_name': k['catename'],
|
|
'type_id': k['cateid']
|
|
})
|
|
filters[k['cateid']]=ft
|
|
|
|
result['class'] = classes
|
|
result['filters'] =filters
|
|
result['list'] = self.getlist(data['data']['vodrows'])
|
|
return result
|
|
|
|
def homeVideoContent(self):
|
|
pass
|
|
|
|
def categoryContent(self, tid, pg, filter, extend):
|
|
data=self.fetch(f'{self.host}/vod/listing-{tid}-{extend.get("areas","0")}-{extend.get("years","0")}-1-{extend.get("definitions","0")}-{extend.get("durations","0")}-{extend.get("mosaics","0")}-{extend.get("langvoices","0")}-{extend.get("orders","0")}-{pg}',headers=self.headers).json()
|
|
result = {}
|
|
result['list'] = self.getlist(data['data']['vodrows'])
|
|
result['page'] = pg
|
|
result['pagecount'] = 9999
|
|
result['limit'] = 90
|
|
result['total'] = 999999
|
|
return result
|
|
|
|
def detailContent(self, ids):
|
|
data=self.fetch(f'{self.host}/vod/reqplay/{ids[0]}',headers=self.headers).json()
|
|
vod = {
|
|
'vod_play_from': data['errmsg'],
|
|
'vod_play_url': '#'.join([f"{i['hdtype']}${i['httpurl']}" for i in data['data']['httpurls']]),
|
|
}
|
|
return {'list':[vod]}
|
|
|
|
def searchContent(self, key, quick, pg="1"):
|
|
data=self.fetch(f'{self.host}/search?page={pg}&wd={key}',headers=self.headers).json()
|
|
return {'list':self.getlist(data['data']['vodrows']),'page':pg}
|
|
|
|
def playerContent(self, flag, id, vipFlags):
|
|
return {'parse': 0, 'url': id, 'header': {'User-Agent':'ExoPlayer'}}
|
|
|
|
def localProxy(self, param):
|
|
pass
|
|
|
|
def getlist(self,data):
|
|
vlist=[]
|
|
for i in data:
|
|
if i['isvip'] !='1':
|
|
vlist.append({
|
|
'vod_id': i['vodid'],
|
|
'vod_name': i['title'],
|
|
'vod_pic': i['coverpic'],
|
|
'vod_year': i.get('duration'),
|
|
'vod_remarks': i.get('catename'),
|
|
'style': {"type": "rect", "ratio": 1.33}
|
|
})
|
|
return vlist
|
|
|
|
def getat(self):
|
|
headers = {
|
|
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36',
|
|
'Accept': 'application/json, text/plain, */*',
|
|
'x-auth-uuid': self.random_str(32),
|
|
'x-system': 'Android',
|
|
'x-version': '5.0.5',
|
|
'x-channel': 'xj2',
|
|
'x-requested-with': 'com.uyvzkv.pnjzdv',
|
|
'sec-fetch-site': 'cross-site',
|
|
'sec-fetch-mode': 'cors',
|
|
'sec-fetch-dest': 'empty',
|
|
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
|
}
|
|
host=f'https://{self.random_str(6)}.bjhpz.com'
|
|
data=self.fetch(f'{host}/init',headers=headers).json()
|
|
headers.update({'x-cookie-auth': data['data']['globalData'].get('xxx_api_auth')})
|
|
return host,headers
|
|
|
|
def random_str(self,length=16):
|
|
chars = string.ascii_lowercase + string.digits
|
|
return ''.join(random.choice(chars) for _ in range(length))
|
|
|