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
vod['vod_play_url'] = vod_play_url
result = { def categoryContent(self, tid, pg, filter, extend):
'list':[ result = {}
vod url = 'https://www.czzy77.com/{0}/page/{1}'.format(tid,pg)
] rsp = self.getCookie(url)
} root = self.html(self.cleanText(rsp.text))
return result 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
def searchContent(self,key,quick): def detailContent(self, array):
url = 'https://www.czzy66.com/xssearch?q={0}'.format(key) tid = array[0]
# getHeader() url = 'https://www.czzy77.com/movie/{0}.html'.format(tid)
rsp = self.fetch(url) rsp = self.getCookie(url)
root = self.html(rsp.text) 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('地区'):
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)
result = {} vod['vod_play_from'] = vod_play_from
vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a") vod['vod_play_url'] = vod_play_url
videos = [] result = {
for vod in vodList: 'list': [
name = vod.xpath('./img/@alt')[0] vod
pic = vod.xpath('./img/@data-original')[0] ]
href = vod.xpath('./@href')[0] }
tid = self.regStr(href,'movie/(\\S+).html') return result
remark = ""
videos.append({
"vod_id": tid,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
})
result = {
'list':videos
}
return result
config = { def searchContent(self, key, quick):
"player": { }, url = 'https://www.czzy77.com/xssearch?q={0}'.format(urllib.parse.quote(key))
"filter": { } rsp = self.getCookie(url)
} root = self.html(self.cleanText(rsp.text))
header = { vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a")
"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" 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 = {
"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]
def parseCBC(self, enc, key, iv): def playerContent(self, flag, id, vipFlags):
keyBytes = key.encode("utf-8") result = {}
ivBytes = iv.encode("utf-8") url = 'https://www.czzy77.com/v_play/{0}.html'.format(id)
cipher = AES.new(keyBytes, AES.MODE_CBC, ivBytes) rsp = self.getCookie(url)
msg = cipher.decrypt(enc) pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)'
paddingLen = msg[len(msg)-1] html = rsp.text
return msg[0:-paddingLen] 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 playerContent(self,flag,id,vipFlags):
url = 'https://www.czzy66.com/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 def loadVtt(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 isVideoFormat(self, url):
vttPat = 'subtitle: \\{url:\\\"([^\\\"]+\\.vtt)\\\"' pass
str3 = self.regStr(decontent,urlPat) def manualVideoCheck(self):
str4 = self.regStr(decontent,vttPat) pass
self.loadVtt(str3) def localProxy(self, param):
action = {}
result = { return [200, "video/MP2T", action, ""]
'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",