TVBox-zyjk/py/py_ikan.py
莫名的悲伤 d705d4d161 1
2023-09-17 19:21:44 +08:00

217 lines
6.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import base64
import math
import json
import requests
import urllib
class Spider(Spider):
def getName(self):
return "爱看影视"
def init(self,extend=""):
pass
def isVideoFormat(self,url):
pass
def manualVideoCheck(self):
pass
def homeContent(self,filter):
result = {}
cateManual = {
"电影": "1",
"剧集": "2",
"综艺": "3",
"动漫": "4",
"美剧": "16",
"日韩剧": "15",
}
classes = []
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
if (filter):
result['filters'] = self.config['filter']
return result
def homeVideoContent(self):
result = {}
return result
def categoryContent(self,tid,pg,filter,extend):
result = {}
url = 'https://ikan6.vip/vodtype/{0}-{1}/'.format(tid,pg)
rsp = self.fetch(url)
html = self.html(rsp.text)
aList = html.xpath("//ul[contains(@class, 'myui-vodlist')]/li")
videos = []
numvL = len(aList)
pgc = math.ceil(numvL/15)
for a in aList:
aid = a.xpath("./div[contains(@class, 'myui-vodlist__box')]/a/@href")[0]
aid = self.regStr(reg=r'/voddetail/(.*?)/', src=aid)
img = a.xpath(".//div[contains(@class, 'myui-vodlist__box')]/a/@data-original")[0]
name = a.xpath(".//div[contains(@class, 'myui-vodlist__box')]/a/@title")[0]
remark = a.xpath(".//span[contains(@class, 'pic-text text-right')]/text()")
if remark == []:
remark = a.xpath(".//span[contains(@class, 'pic-tag pic-tag-top')]/span/text()")
remark = remark[0]
videos.append({
"vod_id": aid,
"vod_name": name,
"vod_pic": img,
"vod_remarks": remark
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = pgc
result['limit'] = numvL
result['total'] = numvL
return result
def detailContent(self,array):
aid = array[0]
url = 'https://ikan6.vip/voddetail/{0}/'.format(aid)
rsp = self.fetch(url)
html = self.html(rsp.text)
node = html.xpath("//div[@class='myui-content__detail']")[0]
title = node.xpath("./h1/text()")[0]
pic = html.xpath("//a[@class='myui-vodlist__thumb picture']/img/@src")[0]
cont = html.xpath("//div[@class='col-pd text-collapse content']/span[@class='data']/text()")[0].replace('\u3000','')
infoList = node.xpath("./p[@class='data']")
for info in infoList:
content = info.xpath('string(.)').replace('\t','').replace('\r','').replace('\n','').strip()
if content.startswith('导演:'):
dir = content.replace('导演:','').strip()
if content.startswith('主演:'):
act = content.replace('主演:','').replace('\xa0','/').strip()
if content.startswith('分类:'):
infos = content.split('')
for i in range(0, len(infos)):
if infos[i] == '分类':
typeName = infos[i + 1][:-2]
if infos[i][-2:] == '地区':
area = infos[i + 1][:-2]
if infos[i][-2:] == '年份':
year = infos[i + 1]
vod = {
"vod_id": aid,
"vod_name": title,
"vod_pic": pic,
"type_name": typeName,
"vod_year": year,
"vod_area": area,
"vod_remarks": '',
"vod_actor": act,
"vod_director": dir,
"vod_content": cont
}
urlList = html.xpath("//div[@class='tab-content myui-panel_bd']/div/ul/li")
playUrl = ''
for url in urlList:
purl = url.xpath("./a/@href")[0]
purl = self.regStr(reg=r'/vodplay/(.*?)/', src=purl)
name = url.xpath("./a/text()")[0]
playUrl = playUrl + '{0}${1}#'.format(name, purl)
vod['vod_play_from'] = '爱看影视'
vod['vod_play_url'] = playUrl
result = {
'list': [
vod
]
}
return result
def verifyCode(self):
retry = 10
header = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"}
while retry:
try:
session = requests.session()
img = session.get('https://ikan6.vip/index.php/verify/index.html?', headers=header).content
code = session.post('https://api.nn.ci/ocr/b64/text', data=base64.b64encode(img).decode()).text
res = session.post(url=f"https://ikan6.vip/index.php/ajax/verify_check?type=search&verify={code}",
headers=header).json()
if res["msg"] == "ok":
return session
except Exception as e:
print(e)
finally:
retry = retry - 1
def searchContent(self,key,quick):
result = {}
url = 'https://ikan6.vip/vodsearch/-------------/?wd={0}&submit='.format(key)
session = self.verifyCode()
rsp = session.get(url)
root = self.html(rsp.text)
vodList = root.xpath("//ul[@class='myui-vodlist__media clearfix']/li")
videos = []
for vod in vodList:
name = vod.xpath("./div/h4/a/text()")[0]
pic = vod.xpath("./div[@class='thumb']/a/@data-original")[0]
mark = vod.xpath("./div[@class='thumb']/a/span[@class='pic-text text-right']/text()")[0]
sid = vod.xpath("./div[@class='thumb']/a/@href")[0]
sid = self.regStr(sid,"/voddetail/(\\S+)/")
videos.append({
"vod_id":sid,
"vod_name":name,
"vod_pic":pic,
"vod_remarks":mark
})
result = {
'list': videos
}
return result
def playerContent(self,flag,id,vipFlags):
result = {}
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
"Referer": "https://ikan6.vip/"
}
url = 'https://ikan6.vip/vodplay/{0}/'.format(id)
rsp = self.fetch(url)
cookie = rsp.cookies
info = json.loads(self.regStr(reg=r'var player_data=(.*?)</script>', src=rsp.text))
string = info['url'][8:len(info['url'])]
substr = base64.b64decode(string).decode('UTF-8')
str = substr[8:len(substr) - 8]
if 'Ali' in info['from']:
url = 'https://cms.ikan6.vip/ali/nidasicaibudaowozaina/nicaibudaowozaina.php?url={0}'.format(str)
else:
url = 'https://cms.ikan6.vip/nidasicaibudaowozaina/nicaibudaowozaina.php?url={0}'.format(str)
rsp = self.fetch(url, headers=header, cookies=cookie)
randomurl = self.regStr(reg=r"getrandom\(\'(.*?)\'", src=rsp.text)
pstring = randomurl[8:len(randomurl)]
psubstr = base64.b64decode(pstring).decode('UTF-8')
purl = urllib.parse.unquote(psubstr[8:len(psubstr) - 8])
result["parse"] = 0
result["playUrl"] = ''
result["url"] = purl
result["header"] = ''
return result
config = {
"player": {},
"filter": {}
}
header = {}
def localProxy(self,param):
action = {
'url':'',
'header':'',
'param':'',
'type':'string',
'after':''
}
return [200, "video/MP2T", action, ""]