This commit is contained in:
莫名的悲伤 2024-03-28 00:05:19 +08:00
parent 16a7b03162
commit f175531f75
2 changed files with 296 additions and 229 deletions

View File

@ -1,236 +1,290 @@
#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
import hashlib
import requests
from Crypto.Cipher import AES from Crypto.Cipher import AES
import urllib
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.czzy66.com/")
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.czzy66.com/{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
})
result['list'] = videos def init(self, extend=""):
result['page'] = pg print("============{0}============".format(extend))
result['pagecount'] = 9999 pass
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self,array):
tid = array[0]
url = 'https://www.czzy66.com/movie/{0}.html'.format(tid)
rsp = self.fetch(url)
root = self.html(rsp.text)
node = root.xpath("//div[@class='dyxingq']")[0]
pic = node.xpath(".//div[@class='dyimg fl']/img/@src")[0] def homeContent(self, filter):
title = node.xpath('.//h1/text()')[0] result = {}
detail = root.xpath(".//div[@class='yp_context']//p/text()")[0] 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
vod = { def homeVideoContent(self):
"vod_id":tid, url = "https://czspp.com"
"vod_name":title, header = {
"vod_pic":pic, "Connection": "keep-alive",
"type_name":"", "Referer": url,
"vod_year":"", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
"vod_area":"", }
"vod_remarks":"", session = self.getCookie(url,header)
"vod_actor":"", rsp = session.get(url, headers=header)
"vod_director":"", root = self.html(self.cleanText(rsp.text))
"vod_content":detail 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
infoArray = node.xpath(".//ul[@class='moviedteail_list']/li") def getCookie(self,url):
for info in infoArray: header = {
content = info.xpath('string(.)') "Referer": 'https://www.czzy77.com/',
if content.startswith('类型'): "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
vod['type_name'] = content }
if content.startswith('年份'): session = requests.session()
vod['vod_year'] = content rsp = session.get(url)
if content.startswith('地区'): if '人机验证' in rsp.text:
vod['vod_area'] = content append = self.regStr(rsp.text, 'src=\"(/.*?)\"')
if content.startswith('豆瓣'): nurl = 'https://www.czzy77.com' + append
vod['vod_remarks'] = content nrsp = session.get(nurl, headers=header)
if content.startswith('主演'): key = self.regStr(nrsp.text, 'var key=\"(.*?)\"')
vod['vod_actor'] = content avalue = self.regStr(nrsp.text, 'value=\"(.*?)\"')
if content.startswith('导演'): c = ''
vod['vod_director'] = content for i in range(0, len(avalue)):
# if content.startswith('剧情'): a = avalue[i]
# vod['vod_content'] = content b = ord(a)
c = c + str(b)
value = hashlib.md5(c.encode()).hexdigest()
session.get('https://www.czzy77.com/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_ip.php?type=96c4e20a0e951f471d32dae103e83881&key={0}&value={1}'.format(key, value), headers=header)
return session.get(url, headers=header)
elif '检测中' in rsp.text:
append = self.regStr(rsp.text, 'href =\"(/.*?)\"')
session.get('https://www.czzy77.com{0}'.format(append), headers=header)
return session.get(url, headers=header)
else:
return rsp
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 def categoryContent(self, tid, pg, filter, extend):
vod['vod_play_url'] = vod_play_url result = {}
url = 'https://www.czzy77.com/{0}/page/{1}'.format(tid,pg)
rsp = self.getCookie(url)
root = self.html(self.cleanText(rsp.text))
aList = root.xpath("//div[contains(@class,'bt_img mi_ne_kd mrb')]/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='jidi']/span/text()")
if mark ==[]:
mark = a.xpath("./div[@class='hdinfo']/span/text()")
mark = mark[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
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
result = { def detailContent(self, array):
'list':[ tid = array[0]
vod url = 'https://www.czzy77.com/movie/{0}.html'.format(tid)
] rsp = self.getCookie(url)
} root = self.html(self.cleanText(rsp.text))
return result 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('地区'):
tpyeare = ''
for inf in info:
tn = inf.text
tpyeare = tpyeare +'/'+'{0}'.format(tn)
vod['vod_area'] = tpyeare.strip('/')
if content.startswith('年份'):
vod['vod_year'] = content.replace("年份:","")
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].replace('\xa0','')
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://www.czzy66.com/xssearch?q={0}'.format(key) vod['vod_play_url'] = vod_play_url
# getHeader() result = {
rsp = self.fetch(url) 'list': [
root = self.html(rsp.text) vod
]
}
return result
result = {} def searchContent(self, key, quick):
vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a") url = 'https://www.czzy77.com/xssearch?q={0}'.format(urllib.parse.quote(key))
videos = [] rsp = self.getCookie(url)
for vod in vodList: root = self.html(self.cleanText(rsp.text))
name = vod.xpath('./img/@alt')[0] vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a")
pic = vod.xpath('./img/@data-original')[0] videos = []
href = vod.xpath('./@href')[0] for vod in vodList:
tid = self.regStr(href,'movie/(\\S+).html') name = vod.xpath('./img/@alt')[0]
remark = "" pic = vod.xpath('./img/@data-original')[0]
videos.append({ href = vod.xpath('./@href')[0]
"vod_id": tid, tid = self.regStr(href, 'movie/(\\S+).html')
"vod_name": name, res = vod.xpath('./div[@class="jidi"]/span/text()')
"vod_pic": pic, if len(res) == 0:
"vod_remarks": remark remark = '全1集'
}) else:
result = { remark = vod.xpath('./div[@class="jidi"]/span/text()')[0]
'list':videos videos.append({
} "vod_id": tid,
return result "vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
})
result = {
'list': videos
}
return result
config = {
"player": {},
"filter": {}
}
header = {
"Referer": "https://www.czzy77.com/",
"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]
config = { def playerContent(self, flag, id, vipFlags):
"player": { }, result = {}
"filter": { } url = 'https://www.czzy77.com/v_play/{0}.html'.format(id)
} rsp = self.getCookie(url)
header = { pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)'
"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" html = rsp.text
} content = self.regStr(html, pat)
if content == '':
str3 = url
pars = 1
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"
}
else:
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)
pars = 0
header = ''
if len(str4) > 0:
result['subf'] = '/vtt/utf-8'
result['subt'] = ''
result = {
'parse': pars,
'playUrl': '',
'url': str3,
'header': header
}
return result
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): def loadVtt(self, url):
url = 'https://www.czzy66.com/v_play/{0}.html'.format(id) pass
pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)'
rsp = self.fetch(url)
html = rsp.text def isVideoFormat(self, url):
content = self.regStr(html,pat) pass
key = self.regStr(html,pat,2)
iv = self.regStr(html,pat,3)
decontent = self.parseCBC(base64.b64decode(content),key,iv).decode()
urlPat = 'video: \\{url: \\\"([^\\\"]+)\\\"' def manualVideoCheck(self):
vttPat = 'subtitle: \\{url:\\\"([^\\\"]+\\.vtt)\\\"' pass
str3 = self.regStr(decontent,urlPat) def localProxy(self, param):
str4 = self.regStr(decontent,vttPat) action = {}
return [200, "video/MP2T", action, ""]
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

@ -2,9 +2,9 @@
"spider": "https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1711305426162/fan.txt;md5;602fb3226d777850053484cdeb2f3296", "spider": "https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1711305426162/fan.txt;md5;602fb3226d777850053484cdeb2f3296",
"lives": [ "lives": [
{ {
"name": "—车—", "name": "Auto",
"type": 0, "type": 0,
"url": "https://weixine.net/tv/ysclive.txt", "url": "https://ghproxy.net/https://weixine.net/tv/ysclive.txt",
"playerType": 1, "playerType": 1,
"ua": "okhttp/3.15", "ua": "okhttp/3.15",
"epg": "http://epg.112114.xyz/?ch={name}&date={date}", "epg": "http://epg.112114.xyz/?ch={name}&date={date}",
@ -22,7 +22,7 @@
{ {
"name": "—欧—", "name": "—欧—",
"type": 0, "type": 0,
"url": "http://tv.nxog.top/m/tv/live.jpg", "url": "https://raw.githubusercontent.com/Guovin/TV/master/result.txt",
"playerType": 1, "playerType": 1,
"ua": "okhttp/3.15", "ua": "okhttp/3.15",
"epg": "http://epg.112114.xyz/?ch={name}&date={date}", "epg": "http://epg.112114.xyz/?ch={name}&date={date}",
@ -159,6 +159,16 @@
"jar": "https://jihulab.com/okcaptain/kko/-/raw/main/okpng.txt", "jar": "https://jihulab.com/okcaptain/kko/-/raw/main/okpng.txt",
"timeout": 25 "timeout": 25
}, },
{
"key": "py_czspp",
"name": "厂长┃PY",
"type": 3,
"api": "py_czspp",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "./py_czspp.py"
},
{ {
"key": "白票弹幕版", "key": "白票弹幕版",
"name": "白票┃弹幕", "name": "白票┃弹幕",
@ -177,7 +187,10 @@
{ {
"key": "py_cctv", "key": "py_cctv",
"name": "央视┃[py]", "name": "央视┃[py]",
"style":{"type":"rect","ratio":1.485}, "style": {
"type": "rect",
"ratio": 1.485
},
"type": 3, "type": 3,
"api": "py_cctv", "api": "py_cctv",
"searchable": 1, "searchable": 1,
@ -249,17 +262,17 @@
"跳转播放链接": "urlDecode(vod_class*url\":\"&&\")" "跳转播放链接": "urlDecode(vod_class*url\":\"&&\")"
} }
}, },
{ {
"key": "两个BT", "key": "两个BT",
"name": "2BT┃BPQ", "name": "2BT┃BPQ",
"type": 3, "type": 3,
"api": "csp_XBPQ", "api": "csp_XBPQ",
"searchable": 1, "searchable": 1,
"quickSearch": 1, "quickSearch": 1,
"filterable": 1, "filterable": 1,
"jar": "./JAR/XBPQ1.jar;md5;bb155c3f0133bbce4756ad52003f5968", "jar": "./JAR/XBPQ1.jar;md5;bb155c3f0133bbce4756ad52003f5968",
"ext": "./xBPQ/两个BT.json" "ext": "./xBPQ/两个BT.json"
}, },
{ {
"key": "黑狐", "key": "黑狐",
"name": "黑狐┃BPQ", "name": "黑狐┃BPQ",