194 lines
6.8 KiB
Python
194 lines
6.8 KiB
Python
# coding=utf-8
|
|
# !/usr/bin/python
|
|
# 嗷呜
|
|
import sys
|
|
from base64 import b64decode
|
|
sys.path.append('..')
|
|
from base.spider import Spider
|
|
import re
|
|
from bs4 import BeautifulSoup
|
|
from Crypto.Cipher import AES
|
|
from Crypto.Util.Padding import unpad
|
|
|
|
|
|
class Spider(Spider):
|
|
def getName(self):
|
|
return "可可"
|
|
|
|
def init(self, extend=""):
|
|
pass
|
|
|
|
def isVideoFormat(self, url):
|
|
pass
|
|
|
|
def manualVideoCheck(self):
|
|
pass
|
|
|
|
def destroy(self):
|
|
pass
|
|
|
|
def cleanText(self, src):
|
|
clean = re.sub('[\U0001F600-\U0001F64F\U0001F300-\U0001F5FF\U0001F680-\U0001F6FF\U0001F1E0-\U0001F1FF]', '',
|
|
src)
|
|
return clean
|
|
|
|
def jsp(self, content):
|
|
return BeautifulSoup(content, "html.parser")
|
|
|
|
host = "https://www.kkys02.com"
|
|
header = {
|
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
"Chrome/94.0.4606.54 Safari/537.36"
|
|
}
|
|
phost="https://vres.jxlfl.cn"
|
|
def homeContent(self, filter):
|
|
result = {}
|
|
data = self.fetch(self.host, headers=self.header)
|
|
htmld = self.jsp(self.cleanText(data.text))
|
|
list = htmld.select('.main ul[class="fs-margin menu"]')[1]
|
|
self.hlist = htmld.find('div', class_='module-box module-v-box module-one-row-box')
|
|
classes = []
|
|
for li in list.find_all('li', class_='menu-item'):
|
|
classes.append({
|
|
'type_name': li.find('div', class_='menu-item-label').get_text(),
|
|
'type_id': re.findall(r'\d+', li.a.get('href'))[0]
|
|
})
|
|
result['class'] = classes
|
|
return result
|
|
|
|
def homeVideoContent(self):
|
|
videos = []
|
|
for li in self.hlist.select('.module-box-inner .module-item'):
|
|
id = li.a.get('href')
|
|
name = li.find('div', class_='v-item-footer').find_all('div')[1].get_text(strip=True)
|
|
pic = li.find_all('img')[-1].get('data-original')
|
|
remark = li.find('div', class_='v-item-bottom').find_all('span')[1].get_text(strip=True)
|
|
year = li.find('div', class_='v-item-top-left').get_text(strip=True)
|
|
videos.append({
|
|
"vod_id": id,
|
|
"vod_name": name,
|
|
"vod_pic": self.phost + pic,
|
|
"vod_remarks": remark,
|
|
"vod_year": year
|
|
})
|
|
result = {
|
|
'list': videos
|
|
}
|
|
return result
|
|
|
|
def categoryContent(self, tid, pg, filter, extend):
|
|
result = {}
|
|
url = f'{self.host}/show/{tid}-----3-{pg}.html'
|
|
html = self.fetch(url, headers=self.header)
|
|
data = self.jsp(self.cleanText(html.text))
|
|
list = data.find('div', class_='module-box-inner')
|
|
videos = []
|
|
for li in list.select('.module-box-inner .module-item'):
|
|
id = li.a.get('href')
|
|
name = li.find('div', class_='v-item-footer').find_all('div')[1].get_text(strip=True)
|
|
pic = li.find_all('img')[-1].get('data-original')
|
|
remark = li.find('div', class_='v-item-bottom').find_all('span')[1].get_text(strip=True)
|
|
year = li.find('div', class_='v-item-top-left').get_text(strip=True)
|
|
videos.append({
|
|
"vod_id": id,
|
|
"vod_name": name,
|
|
"vod_pic": self.phost + pic,
|
|
"vod_remarks": remark,
|
|
"vod_year": year
|
|
})
|
|
result['list'] = videos
|
|
result['page'] = pg
|
|
result['pagecount'] = 9999
|
|
result['limit'] = 90
|
|
result['total'] = 999999
|
|
return result
|
|
|
|
def detailContent(self, ids):
|
|
tid = ids[0]
|
|
url = self.host + tid
|
|
html = self.fetch(url, headers=self.header)
|
|
data = (self.jsp(self.cleanText(html.text)))
|
|
data1 = data.find('div', class_='detail-box fs-margin-section')
|
|
data2 = data.find('div', id='detail-source-swiper')
|
|
vod_play_from = []
|
|
index = None
|
|
for idx, li in enumerate(data2.find_all('span', class_='source-item-label', id=True), start=0):
|
|
li_text = li.get_text(strip=True)
|
|
if '4K' in li_text:
|
|
index = idx
|
|
continue
|
|
vod_play_from.append(li_text)
|
|
data3 = data.find_all('div', class_='episode-list')
|
|
if index:
|
|
del data3[index]
|
|
vod_play_url = []
|
|
for li in data3:
|
|
dd = []
|
|
for lii in li.find_all('a'):
|
|
dd.append(lii.get_text(strip=True) + "$" + lii.get('href'))
|
|
vod_play_url.append('#'.join(dd))
|
|
|
|
vod = {
|
|
"vod_name": data1.find('div', class_='detail-title').find_all('strong')[1].get_text(strip=True),
|
|
"vod_content": data1.find('div', class_='detail-desc').get_text(strip=True),
|
|
"vod_play_from": '$$$'.join(vod_play_from),
|
|
"vod_play_url": '$$$'.join(vod_play_url)
|
|
}
|
|
result = {
|
|
'list': [
|
|
vod
|
|
]
|
|
}
|
|
return result
|
|
|
|
# 未写搜索下面的可忽略
|
|
def searchContent(self, key, quick, pg="1"):
|
|
result = {}
|
|
url = f'{self.host}/search?k={key}&page={pg}'
|
|
html = self.fetch(url, headers=self.header)
|
|
data = self.jsp(self.cleanText(html.text))
|
|
list = data.find('div', class_='search-result-list fs-margin-section')
|
|
videos = []
|
|
for li in list.find_all('a', class_='search-result-item'):
|
|
id = li.get('href')
|
|
name = li.find('div', class_='search-result-item-main').find_all('div')[1].get_text(strip=True)
|
|
pic = li.find_all('img')[-1].get('data-original')
|
|
ddd = li.find('div', class_='tags').find_all('span')
|
|
remark = ddd[-1].get_text(strip=True)
|
|
year = ddd[0].get_text(strip=True)
|
|
videos.append({
|
|
"vod_id": id,
|
|
"vod_name": name,
|
|
"vod_pic": self.phost + pic,
|
|
"vod_remarks": remark,
|
|
"vod_year": year
|
|
})
|
|
|
|
result = {
|
|
'list': videos,
|
|
'pg': pg
|
|
}
|
|
return result
|
|
|
|
def playerContent(self, flag, id, vipFlags):
|
|
url = self.host + id
|
|
html = self.fetch(url, headers=self.header)
|
|
data = self.cleanText(html.text).strip()
|
|
data1 = re.search(r"TMDPPPP = '(.*?)';", data)[1]
|
|
|
|
def decrypt(encrypted_word):
|
|
key = "FNF9aVQF!G*0ux@2hAigUeB3".encode('utf-8')
|
|
encrypted_word_bytes = b64decode(encrypted_word)
|
|
cipher = AES.new(key, AES.MODE_ECB)
|
|
decrypted = unpad(cipher.decrypt(encrypted_word_bytes), AES.block_size)
|
|
return decrypted.decode('utf-8')
|
|
|
|
result = {}
|
|
result["parse"] = 0
|
|
result["url"] = decrypt(data1)
|
|
result["header"] = self.header
|
|
return result
|
|
|
|
def localProxy(self, param):
|
|
pass
|