mirror of
https://github.com/yuanwangokk-1/TV-BOX.git
synced 2025-10-24 23:11:21 +00:00
128 lines
No EOL
4.3 KiB
Python
128 lines
No EOL
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# by @嗷呜
|
|
import json
|
|
import sys
|
|
import requests
|
|
from pyquery import PyQuery as pq
|
|
sys.path.append('..')
|
|
from base.spider import Spider
|
|
|
|
|
|
class Spider(Spider):
|
|
|
|
def init(self, extend='{}'):
|
|
config=json.loads(extend)
|
|
self.proxies=config.get('proxies',{})
|
|
self.plp=config.get('plp','')
|
|
self.session=requests.session()
|
|
self.session.proxies=self.proxies
|
|
pass
|
|
|
|
def getName(self):
|
|
pass
|
|
|
|
def isVideoFormat(self, url):
|
|
pass
|
|
|
|
def manualVideoCheck(self):
|
|
pass
|
|
|
|
def destroy(self):
|
|
pass
|
|
|
|
host='https://rou.video'
|
|
|
|
headers = {
|
|
'referer': f'{host}/',
|
|
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
|
|
}
|
|
|
|
def homeContent(self, filter):
|
|
cdata=self.getpq(self.session.get(f'{self.host}/cat', headers=self.headers))
|
|
result = {}
|
|
classes = []
|
|
filters = {}
|
|
for k in cdata('.space-y-8 section').items():
|
|
id=k('h2 a').attr('href')
|
|
classes.append({
|
|
'type_name': k('h2').text(),
|
|
'type_id': id
|
|
})
|
|
filters[id]=[{'key':'order','name':'order','value':[{'n':'观看','v':'viewCount'},{'n':'点赞','v':'likeCount'}]}].copy()
|
|
if k('.grid.grid-cols-2 a'):
|
|
filters[id].append({
|
|
'key': 'type',
|
|
'name': 'type',
|
|
'value': [{
|
|
'n': i.text(),
|
|
'v': i.attr('href')
|
|
}for i in k('.grid.grid-cols-2 a').items()]
|
|
})
|
|
result['class'] = classes
|
|
result['filters'] = filters
|
|
return result
|
|
|
|
def homeVideoContent(self):
|
|
res = self.getpq(self.session.get(f'{self.host}/home', headers=self.headers))
|
|
videos=self.getlist(res('.grid.grid-cols-2.lg\\:grid-cols-4 div.aspect-video.relative'))
|
|
return {'list':videos}
|
|
|
|
def categoryContent(self, tid, pg, filter, extend):
|
|
tid=extend.get('type') or tid
|
|
params= {
|
|
'order': extend.get('order',''),
|
|
'page': pg,
|
|
}
|
|
data=self.getpq(self.session.get(f'{self.host}{tid}',params=params, headers=self.headers))
|
|
result = {}
|
|
result['list'] = self.getlist(data('.grid.grid-cols-2 div.aspect-video.relative'))
|
|
result['page'] = pg
|
|
result['pagecount'] = 9999
|
|
result['limit'] = 90
|
|
result['total'] = 999999
|
|
return result
|
|
|
|
def detailContent(self, ids):
|
|
data=self.getpq(self.session.get(f'{self.host}{ids[0]}', headers=self.headers))
|
|
url=self.session.get(f"{self.host}/api{ids[0]}",headers=self.headers).json()['video']['videoUrl']
|
|
n=data('.md\\:col-span-2 .px-2 .hidden').eq(0).text() or 'xxxx'
|
|
vod = {
|
|
'vod_content': ' '.join(['[a=cr:' + json.dumps({'id': j.attr('href'), 'name': j.text()}) + '/]' + j.text() + '[/a]' for j in data('.flex.justify-between div a').items()]),
|
|
'vod_play_from': '老僧酿酒',
|
|
'vod_play_url': f"{n}${url}"
|
|
}
|
|
return {'list':[vod]}
|
|
|
|
def searchContent(self, key, quick, pg="1"):
|
|
params = {'q': key,'page': pg}
|
|
data=self.getpq(self.session.get(f'{self.host}/search',params=params, headers=self.headers))
|
|
return {'list':self.getlist(data('.grid.grid-cols-2 div.aspect-video.relative')),'page':pg}
|
|
|
|
def playerContent(self, flag, id, vipFlags):
|
|
return {'parse': 0, 'url': f"{self.plp}{id}", 'header': self.headers}
|
|
|
|
def localProxy(self, param):
|
|
pass
|
|
|
|
def liveContent(self, url):
|
|
pass
|
|
|
|
def getlist(self,data):
|
|
videos = []
|
|
for i in data.items():
|
|
videos.append({
|
|
'vod_id': i('a').attr('href'),
|
|
'vod_name': i('img.relative.w-full').attr('alt'),
|
|
'vod_pic': i('img.relative.w-full').attr('src'),
|
|
'vod_year': i('.absolute.top-1').text(),
|
|
'vod_remarks': i('.absolute.bottom-1').text(),
|
|
'style': {"type": "rect", "ratio": 1.33}
|
|
})
|
|
return videos
|
|
|
|
def getpq(self, data):
|
|
try:
|
|
return pq(data.text)
|
|
except Exception as e:
|
|
print(f"{str(e)}")
|
|
return pq(data.text.encode('utf-8')) |