This commit is contained in:
莫名的悲伤 2023-11-24 23:40:48 +08:00
parent dc88dae2ce
commit 9d1356a017
2 changed files with 230 additions and 237 deletions

View File

@ -1,244 +1,236 @@
# coding=utf-8 #coding=utf-8
# !/usr/bin/python #!/usr/bin/python
import sys import sys
sys.path.append('..') sys.path.append('..')
from base.spider import Spider from base.spider import Spider
import json
import base64 import base64
from Crypto.Cipher import AES from Crypto.Cipher import AES
class Spider(Spider): # 元类 默认的元类 type class Spider(Spider): # 元类 默认的元类 type
def getName(self): def getName(self):
return "厂长资源" return "厂长资源"
def init(self,extend=""):
print("============{0}============".format(extend))
pass
def homeContent(self,filter):
result = {}
cateManual = {
"豆瓣电影Top250": "dbtop250",
"最新电影": "zuixindianying",
"电视剧": "dsj",
"国产剧": "gcj",
"美剧": "meijutt",
"韩剧": "hanjutv",
"番剧": "fanju",
"动漫": "dm"
}
classes = []
for k in cateManual:
classes.append({
'type_name':k,
'type_id':cateManual[k]
})
result['class'] = classes
return result
def homeVideoContent(self):
rsp = self.fetch("https://www.czys.me/")
root = self.html(rsp.text)
aList = root.xpath("//div[@class='mi_btcon']//ul/li")
videos = []
for a in aList:
name = a.xpath('./a/img/@alt')[0]
pic = a.xpath('./a/img/@data-original')[0]
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0]
sid = a.xpath("./a/@href")[0]
sid = self.regStr(sid,"/movie/(\\S+).html")
videos.append({
"vod_id":sid,
"vod_name":name,
"vod_pic":pic,
"vod_remarks":mark
})
result = {
'list':videos
}
return result
def categoryContent(self,tid,pg,filter,extend):
result = {}
url = 'https://www.czys.me//{0}/page/{1}'.format(tid,pg)
rsp = self.fetch(url)
root = self.html(rsp.text)
aList = root.xpath("//div[contains(@class,'mi_cont')]//ul/li")
videos = []
for a in aList:
name = a.xpath('./a/img/@alt')[0]
pic = a.xpath('./a/img/@data-original')[0]
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0]
sid = a.xpath("./a/@href")[0]
sid = self.regStr(sid,"/movie/(\\S+).html")
videos.append({
"vod_id":sid,
"vod_name":name,
"vod_pic":pic,
"vod_remarks":mark
})
def init(self, extend=""): result['list'] = videos
print("============{0}============".format(extend)) result['page'] = pg
pass result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self,array):
tid = array[0]
url = 'https://www.czys.me//movie/{0}.html'.format(tid)
rsp = self.fetch(url)
root = self.html(rsp.text)
node = root.xpath("//div[@class='dyxingq']")[0]
def homeContent(self, filter): pic = node.xpath(".//div[@class='dyimg fl']/img/@src")[0]
result = {} title = node.xpath('.//h1/text()')[0]
cateManual = { detail = root.xpath(".//div[@class='yp_context']//p/text()")[0]
"豆瓣电影Top250": "dbtop250",
"最新电影": "zuixindianying",
"电视剧": "dsj",
"国产剧": "gcj",
"美剧": "meijutt",
"韩剧": "hanjutv",
"番剧": "fanju",
"动漫": "dm"
}
classes = []
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
return result
def homeVideoContent(self): vod = {
rsp = self.fetch("https://czspp.com") "vod_id":tid,
root = self.html(self.cleanText(rsp.text)) "vod_name":title,
aList = root.xpath("//div[@class='mi_btcon']//ul/li") "vod_pic":pic,
videos = [] "type_name":"",
for a in aList: "vod_year":"",
name = a.xpath('./a/img/@alt')[0] "vod_area":"",
pic = a.xpath('./a/img/@data-original')[0] "vod_remarks":"",
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0] "vod_actor":"",
sid = a.xpath("./a/@href")[0] "vod_director":"",
sid = self.regStr(sid, "/movie/(\\S+).html") "vod_content":detail
videos.append({ }
"vod_id": sid,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": mark
})
result = {
'list': videos
}
return result
def categoryContent(self, tid, pg, filter, extend): infoArray = node.xpath(".//ul[@class='moviedteail_list']/li")
result = {} for info in infoArray:
url = 'https://czspp.com/{0}/page/{1}'.format(tid, pg) content = info.xpath('string(.)')
rsp = self.fetch(url) if content.startswith('类型'):
root = self.html(self.cleanText(rsp.text)) vod['type_name'] = content
aList = root.xpath("//div[contains(@class,'mi_cont')]//ul/li") if content.startswith('年份'):
videos = [] vod['vod_year'] = content
for a in aList: if content.startswith('地区'):
name = a.xpath('./a/img/@alt')[0] vod['vod_area'] = content
pic = a.xpath('./a/img/@data-original')[0] if content.startswith('豆瓣'):
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0] vod['vod_remarks'] = content
sid = a.xpath("./a/@href")[0] if content.startswith('主演'):
sid = self.regStr(sid, "/movie/(\\S+).html") vod['vod_actor'] = content
videos.append({ if content.startswith('导演'):
"vod_id": sid, vod['vod_director'] = content
"vod_name": name, # if content.startswith('剧情'):
"vod_pic": pic, # vod['vod_content'] = content
"vod_remarks": mark
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, array): vod_play_from = '$$$'
tid = array[0] playFrom = ['厂长']
url = 'https://czspp.com/movie/{0}.html'.format(tid) vod_play_from = vod_play_from.join(playFrom)
rsp = self.fetch(url)
root = self.html(self.cleanText(rsp.text))
node = root.xpath("//div[@class='dyxingq']")[0]
pic = node.xpath(".//div[@class='dyimg fl']/img/@src")[0]
title = node.xpath('.//h1/text()')[0]
detail = root.xpath(".//div[@class='yp_context']//p/text()")[0]
vod = {
"vod_id": tid,
"vod_name": title,
"vod_pic": pic,
"type_name": "",
"vod_year": "",
"vod_area": "",
"vod_remarks": "",
"vod_actor": "",
"vod_director": "",
"vod_content": detail
}
infoArray = node.xpath(".//ul[@class='moviedteail_list']/li")
for info in infoArray:
content = info.xpath('string(.)')
if content.startswith('类型'):
tpyen = ''
for inf in info:
tn = inf.text
tpyen = tpyen +'/'+'{0}'.format(tn)
vod['type_name'] = tpyen.strip('/')
if content.startswith('地区'):
tpyeare = ''
for inf in info:
tn = inf.text
tpyeare = tpyeare +'/'+'{0}'.format(tn)
vod['vod_area'] = tpyeare.strip('/')
if content.startswith('豆瓣'):
vod['vod_remarks'] = content
if content.startswith('主演'):
tpyeact = ''
for inf in info:
tn = inf.text
tpyeact = tpyeact +'/'+'{0}'.format(tn)
vod['vod_actor'] = tpyeact.strip('/')
if content.startswith('导演'):
tpyedire = ''
for inf in info:
tn = inf.text
tpyedire = tpyedire +'/'+'{0}'.format(tn)
vod['vod_director'] = tpyedire .strip('/')
vod_play_from = '$$$'
playFrom = ['厂长']
vod_play_from = vod_play_from.join(playFrom)
vod_play_url = '$$$'
playList = []
vodList = root.xpath("//div[@class='paly_list_btn']")
for vl in vodList:
vodItems = []
aList = vl.xpath('./a')
for tA in aList:
href = tA.xpath('./@href')[0]
name = tA.xpath('./text()')[0]
tId = self.regStr(href, '/v_play/(\\S+).html')
vodItems.append(name + "$" + tId)
joinStr = '#'
joinStr = joinStr.join(vodItems)
playList.append(joinStr)
vod_play_url = vod_play_url.join(playList)
vod['vod_play_from'] = vod_play_from vod_play_url = '$$$'
vod['vod_play_url'] = vod_play_url playList = []
result = { vodList = root.xpath("//div[@class='paly_list_btn']")
'list': [ for vl in vodList:
vod vodItems = []
] aList = vl.xpath('./a')
} for tA in aList:
return result href = tA.xpath('./@href')[0]
name = tA.xpath('./text()')[0]
tId = self.regStr(href,'/v_play/(\\S+).html')
vodItems.append(name + "$" + tId)
joinStr = '#'
joinStr = joinStr.join(vodItems)
playList.append(joinStr)
vod_play_url = vod_play_url.join(playList)
def searchContent(self, key, quick): vod['vod_play_from'] = vod_play_from
url = 'https://czspp.com/xssearch?q={0}'.format(key) vod['vod_play_url'] = vod_play_url
rsp = self.fetch(url)
root = self.html(self.cleanText(rsp.text))
vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a")
videos = []
for vod in vodList:
name = vod.xpath('./img/@alt')[0]
pic = vod.xpath('./img/@data-original')[0]
href = vod.xpath('./@href')[0]
tid = self.regStr(href, 'movie/(\\S+).html')
res = vod.xpath('./div[@class="jidi"]/span/text()')
if len(res) == 0:
remark = '全1集'
else:
remark = vod.xpath('./div[@class="jidi"]/span/text()')[0]
videos.append({
"vod_id": tid,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
})
result = {
'list': videos
}
return result
config = {
"player": {},
"filter": {}
}
header = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"
}
def parseCBC(self, enc, key, iv):
keyBytes = key.encode("utf-8")
ivBytes = iv.encode("utf-8")
cipher = AES.new(keyBytes, AES.MODE_CBC, ivBytes)
msg = cipher.decrypt(enc)
paddingLen = msg[len(msg) - 1]
return msg[0:-paddingLen]
def playerContent(self, flag, id, vipFlags): result = {
url = 'https://czspp.com/v_play/{0}.html'.format(id) 'list':[
pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)' vod
rsp = self.fetch(url) ]
html = rsp.text }
content = self.regStr(html, pat) return result
if content == '':
return {}
key = self.regStr(html, pat, 2)
iv = self.regStr(html, pat, 3)
decontent = self.parseCBC(base64.b64decode(content), key, iv).decode()
urlPat = 'video: \\{url: \\\"([^\\\"]+)\\\"'
vttPat = 'subtitle: \\{url:\\\"([^\\\"]+\\.vtt)\\\"'
str3 = self.regStr(decontent, urlPat)
str4 = self.regStr(decontent, vttPat)
self.loadVtt(str3)
result = {
'parse': '0',
'playUrl': '',
'url': str3,
'header': ''
}
if len(str4) > 0:
result['subf'] = '/vtt/utf-8'
# result['subt'] = Proxy.localProxyUrl() + "?do=czspp&url=" + URLEncoder.encode(str4)
result['subt'] = ''
return result
def loadVtt(self, url): def searchContent(self,key,quick):
pass url = 'https://www.czys.me//xssearch?q={0}'.format(key)
# getHeader()
rsp = self.fetch(url)
root = self.html(rsp.text)
def isVideoFormat(self, url): result = {}
pass vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a")
videos = []
for vod in vodList:
name = vod.xpath('./img/@alt')[0]
pic = vod.xpath('./img/@data-original')[0]
href = vod.xpath('./@href')[0]
tid = self.regStr(href,'movie/(\\S+).html')
remark = ""
videos.append({
"vod_id": tid,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
})
result = {
'list':videos
}
return result
def manualVideoCheck(self): config = {
pass "player": { },
"filter": { }
}
header = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"
}
def localProxy(self, param): def parseCBC(self, enc, key, iv):
action = {} keyBytes = key.encode("utf-8")
return [200, "video/MP2T", action, ""] ivBytes = iv.encode("utf-8")
cipher = AES.new(keyBytes, AES.MODE_CBC, ivBytes)
msg = cipher.decrypt(enc)
paddingLen = msg[len(msg)-1]
return msg[0:-paddingLen]
def playerContent(self,flag,id,vipFlags):
url = 'https://www.czys.me//v_play/{0}.html'.format(id)
pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)'
rsp = self.fetch(url)
html = rsp.text
content = self.regStr(html,pat)
key = self.regStr(html,pat,2)
iv = self.regStr(html,pat,3)
decontent = self.parseCBC(base64.b64decode(content),key,iv).decode()
urlPat = 'video: \\{url: \\\"([^\\\"]+)\\\"'
vttPat = 'subtitle: \\{url:\\\"([^\\\"]+\\.vtt)\\\"'
str3 = self.regStr(decontent,urlPat)
str4 = self.regStr(decontent,vttPat)
self.loadVtt(str3)
result = {
'parse':'0',
'playUrl':'',
'url':str3,
'header':''
}
if len(str4) > 0:
result['subf'] = '/vtt/utf-8'
# result['subt'] = Proxy.localProxyUrl() + "?do=czspp&url=" + URLEncoder.encode(str4)
result['subt'] = ''
return result
def loadVtt(self,url):
print(url)
def isVideoFormat(self,url):
pass
def manualVideoCheck(self):
pass
def localProxy(self,param):
action = {}
return [200, "video/MP2T", action, ""]

View File

@ -222,6 +222,18 @@
"filterable": 1, "filterable": 1,
"ext": "./py/央视片库.py" "ext": "./py/央视片库.py"
}, },
{
"key": "py_厂长",
"name": "厂长┃[py]",
"type": 3,
"api": "py_czzy",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "./py/py_czspp.py"
},
//{"key":"红领巾影院","name":"红领┃BPQ","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":"./xBPQ/红领巾影院.json","jar": "./JAR/XBPQ1.jar;md5;bb155c3f0133bbce4756ad52003f5968"}, //{"key":"红领巾影院","name":"红领┃BPQ","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":"./xBPQ/红领巾影院.json","jar": "./JAR/XBPQ1.jar;md5;bb155c3f0133bbce4756ad52003f5968"},
{ {
"key": "快看影视", "key": "快看影视",
@ -234,17 +246,6 @@
"ext": "./xBPQ/快看影视.json", "ext": "./xBPQ/快看影视.json",
"jar": "http://xhww.fun:63/小米/暴脾气.jar;md5;bb155c3f0133bbce4756ad52003f5968" "jar": "http://xhww.fun:63/小米/暴脾气.jar;md5;bb155c3f0133bbce4756ad52003f5968"
}, },
{
"key": "厂长资源",
"name": "厂长┃BPQ",
"type": 3,
"api": "csp_XBPQ",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "./xBPQ/厂长资源.json",
"jar": "http://xhww.fun:63/小米/暴脾气.jar;md5;bb155c3f0133bbce4756ad52003f5968"
},
{ {
"key": "csp_xBPQ_素白", "key": "csp_xBPQ_素白",
"name": "素白┃BPQ", "name": "素白┃BPQ",