160 lines
5.4 KiB
Python
160 lines
5.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
# by @嗷呜
|
||
# 温馨提示:官方APP数据是错误的,你们可以给官方反馈,然后就可以写APP
|
||
import re
|
||
import sys
|
||
from Crypto.Hash import MD5
|
||
sys.path.append("..")
|
||
import json
|
||
import time
|
||
from pyquery import PyQuery as pq
|
||
from base.spider import Spider
|
||
|
||
|
||
class Spider(Spider):
|
||
|
||
def init(self, extend=""):
|
||
pass
|
||
|
||
def getName(self):
|
||
pass
|
||
|
||
def isVideoFormat(self, url):
|
||
pass
|
||
|
||
def manualVideoCheck(self):
|
||
pass
|
||
|
||
def action(self, action):
|
||
pass
|
||
|
||
def destroy(self):
|
||
pass
|
||
|
||
host = 'https://www.lreeok.vip'
|
||
|
||
headers = {
|
||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
|
||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||
'sec-ch-ua-platform': '"macOS"',
|
||
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
|
||
'Origin': host,
|
||
'Referer': f"{host}/",
|
||
}
|
||
|
||
def homeContent(self, filter):
|
||
data = self.getpq(self.fetch(self.host, headers=self.headers).text)
|
||
result = {}
|
||
classes = []
|
||
for k in data('.head-more.box a').items():
|
||
i = k.attr('href')
|
||
if i and '/vod' in i:
|
||
classes.append({
|
||
'type_name': k.text(),
|
||
'type_id': re.search(r'\d+', i).group(0)
|
||
})
|
||
result['class'] = classes
|
||
result['list'] = self.getlist(data('.border-box.diy-center .public-list-div'))
|
||
return result
|
||
|
||
def homeVideoContent(self):
|
||
pass
|
||
|
||
def categoryContent(self, tid, pg, filter, extend):
|
||
body = {'type': tid, 'class': '', 'area': '', 'lang': '', 'version': '', 'state': '', 'letter': '', 'page': pg}
|
||
data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json()
|
||
result = {}
|
||
result['list'] = data['list']
|
||
result['page'] = pg
|
||
result['pagecount'] = 9999
|
||
result['limit'] = 90
|
||
result['total'] = 999999
|
||
return result
|
||
|
||
def detailContent(self, ids):
|
||
data = self.getpq(self.fetch(f"{self.host}/voddetail/{ids[0]}.html", headers=self.headers).text)
|
||
v = data('.detail-info.lightSpeedIn .slide-info')
|
||
vod = {
|
||
'vod_year': v.eq(-1).text(),
|
||
'vod_remarks': v.eq(0).text(),
|
||
'vod_actor': v.eq(3).text(),
|
||
'vod_director': v.eq(2).text(),
|
||
'vod_content': data('.switch-box #height_limit').text()
|
||
}
|
||
np = data('.anthology.wow.fadeInUp')
|
||
ndata = np('.anthology-tab .swiper-wrapper .swiper-slide')
|
||
pdata = np('.anthology-list .anthology-list-box ul')
|
||
play, names = [], []
|
||
for i in range(len(ndata)):
|
||
n = ndata.eq(i)('a')
|
||
n('span').remove()
|
||
names.append(n.text())
|
||
vs = []
|
||
for v in pdata.eq(i)('li').items():
|
||
vs.append(f"{v.text()}${v('a').attr('href')}")
|
||
play.append('#'.join(vs))
|
||
vod["vod_play_from"] = "$$$".join(names)
|
||
vod["vod_play_url"] = "$$$".join(play)
|
||
result = {"list": [vod]}
|
||
return result
|
||
|
||
def searchContent(self, key, quick, pg="1"):
|
||
data = self.getpq(self.fetch(f"{self.host}/vodsearch/{key}----------{pg}---.html", headers=self.headers).text)
|
||
return {'list': self.getlist(data('.row-right .search-box .public-list-bj')), 'page': pg}
|
||
|
||
def playerContent(self, flag, id, vipFlags):
|
||
h, p = {"User-Agent": "okhttp/3.14.9"}, 1
|
||
url = f"{self.host}{id}"
|
||
data = self.getpq(self.fetch(url, headers=self.headers).text)
|
||
try:
|
||
jstr = data('.player .player-left script').eq(0).text()
|
||
jsdata = json.loads(jstr.split('aaa=')[-1])
|
||
body = {'url': jsdata['url']}
|
||
if not re.search(r'\.m3u8|\.mp4', body['url']):
|
||
data = self.post(f"{self.host}/okplay/api_config.php", headers=self.headers,
|
||
data=self.getbody(body)).json()
|
||
url = data.get('url') or data.get('data', {}).get('url')
|
||
p = 0
|
||
except Exception as e:
|
||
print('错误信息:', e)
|
||
pass
|
||
result = {}
|
||
result["parse"] = p
|
||
result["url"] = url
|
||
result["header"] = h
|
||
return result
|
||
|
||
def localProxy(self, param):
|
||
pass
|
||
|
||
def getbody(self, params):
|
||
t = int(time.time())
|
||
h = MD5.new()
|
||
h.update(f"DS{t}DCC147D11943AF75".encode('utf-8'))
|
||
key = h.hexdigest()
|
||
params.update({'time': t, 'key': key})
|
||
return params
|
||
|
||
def getlist(self, data):
|
||
videos = []
|
||
for i in data.items():
|
||
id = i('a').attr('href')
|
||
if id:
|
||
id = re.search(r'\d+', id).group(0)
|
||
img = i('img').attr('data-src')
|
||
if img and 'url=' in img: img = f'{self.host}{img}'
|
||
videos.append({
|
||
'vod_id': id,
|
||
'vod_name': i('img').attr('alt'),
|
||
'vod_pic': img,
|
||
'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text()
|
||
})
|
||
return videos
|
||
|
||
def getpq(self, data):
|
||
try:
|
||
return pq(data)
|
||
except Exception as e:
|
||
print(f"{str(e)}")
|
||
return pq(data.encode('utf-8'))
|