fix
This commit is contained in:
Liu committed 2025-02-09 00:16:54 +08:00
1 parent 582afb5d28
commit 03e4aa1131
43 files changed
+14203 -21754

No files matched your search

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

-215
View File
@@ -1,215 +0,0 @@
import sys
sys.path.append("..")
import re
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from base64 import b64encode, b64decode
import json
from base.spider import Spider
from urllib.parse import quote
class Spider(Spider):
def getName(self):
return "九龙趣看"
def init(self, extend=""):
self.host = self.host()
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
def homeContent(self, filter):
data = self.fetch(f"{self.host}/api/v3/drama/getCategory?orderBy=type_id", headers=self.headers).json()
dy = {
"class": "类型",
"area": "地区",
"lang": "语言",
"year": "年份",
"letter": "字母",
"by": "排序",
"sort": "排序"
}
result = {"class": [], "filters": {}}
for item in data["data"]:
jsontype_extend = json.loads(item["converUrl"])
result["class"].append({"type_name": item["name"], "type_id": str(item["id"])})
if any(key in jsontype_extend and jsontype_extend[key].strip() for key in dy):
result["filters"][str(item["id"])] = []
for dkey in dy:
if dkey in jsontype_extend and jsontype_extend[dkey].strip():
values = [value.strip() for value in jsontype_extend[dkey].split(",") if value.strip()]
result["filters"][str(item["id"])].append({
"key": dkey,
"name": dy[dkey],
"value": [{"n": v, "v": v} for v in values]
})
return result
def categoryContent(self, tid, pg, filter, extend):
params = []
if extend.get('area'):
params.append(f"vodArea={extend['area']}")
if extend.get('classs'):
params.append(f"vodClass={extend['class']}")
params.append("pagesize=20")
params.append(f"typeId1={tid}")
params.append(f"page={pg}")
if extend.get('year'):
params.append(f"vodYear={extend['year']}")
body = '&'.join(params)
path = self.aes(self.aes(body, self.key[1], 'encrypt'), self.key[0], 'encrypt', True)
data = self.fetch(f"{self.host}/api/ex/v3/security/drama/list?query={path}", headers=self.headers).json()[
"data"]
data = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)['list']
list = []
for item in data:
list.append({
'vod_id': item.get("id"),
'vod_pic': item["coverImage"].get("path"),
'vod_name': item.get("name"),
'vod_year': item.get("year"),
'vod_remarks': item.get("remark")
})
result = {}
result["list"] = list
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
url = f"{self.host}/api/v3/drama/getDetail?id={ids[0]}"
data = self.fetch(url, headers=self.headers).json()["data"]
vod = {
'vod_name': data.get("name"),
'vod_area': data.get("area"),
'type_name': data.get("clazz"),
'vod_actor': data.get("actor"),
'vod_director': data.get("director"),
'vod_content': data.get("brief").strip(),
}
play = []
names = []
plays = {}
for itt in data["videos"]:
if itt["sourceCn"] not in names:
plays[itt["source"]] = []
names.append(itt["sourceCn"])
url = f"vodPlayFrom={itt['source']}&playUrl={itt['path']}"
if re.search(r"\.(mp4|m3u8|flv)$", itt["path"]):
url = itt["path"]
plays[itt["source"]].append(f"{itt['titleOld']}${url}")
for it in plays:
play.append("#".join(plays[it]))
vod["vod_play_from"] = "$$$".join(names)
vod["vod_play_url"] = "$$$".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg=1):
body = f"pagesize=20&page={pg}&searchKeys={key}"
path = self.aes(self.aes(body, self.key[1], 'encrypt'), self.key[0], 'encrypt', True)
data = self.fetch(f"{self.host}/api/ex/v3/security/drama/list?query={path}", headers=self.headers).json()[
"data"]
data = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)['list']
list = []
for item in data:
list.append({
'vod_id': item.get("id"),
'vod_pic': item["coverImage"].get("path"),
'vod_name': item.get("name"),
'vod_year': item.get("year"),
'vod_remarks': item.get("remark")
})
result = {"list": list, "page": pg}
return result
def playerContent(self, flag, id, vipFlags):
url = id
if "vodPlayFrom" in url:
try:
path = self.aes(self.aes(id, self.key[1], 'encrypt'), self.key[0], 'encrypt', True)
data = self.fetch(f"{self.host}/api/ex/v3/security/videoUsableUrl?query={path}", headers=self.headers).json()[
"data"]
url = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)['playUrl']
# try:
# url1 = self.fetch(url, headers=self.headers, timeout=5, allow_redirects=False).headers['Location']
# if "http" in url1 and url1:
# url = url1
# except:
# pass
except Exception as e:
pass
if '.jpg' in url or '.jpeg' in url or '.png' in url:
url = self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8"
result = {}
result["parse"] = 0
result["url"] = url
result["header"] = {'User-Agent': 'okhttp/3.12.1'}
return result
def localProxy(self, param):
url = b64decode(param["url"]).decode('utf-8')
durl = url[:url.rfind('/')]
data = self.fetch(url, headers=self.headers).content.decode("utf-8")
lines = data.strip().split('\n')
for index, string in enumerate(lines):
if '#EXT' not in string and 'http' not in string:
lines[index] = durl + ('' if string.startswith('/') else '/') + string
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def host(self):
return "http://110.42.49.188:9902"
headers = {
'User-Agent': 'okhttp/3.12.1',
'Content-Type': 'application/json;'
}
key = ['ALHMZJVVOFVNQ2HTOEPFZZFXYWH1D2RN', '2C1A06E197EF10CF3F6058CA7A803B5E']
def aes(self, word, key, mode='decrypt', bool=False):
key = key.encode('utf-8')
if mode == 'decrypt':
word = b64decode(word)
cipher = AES.new(key, AES.MODE_ECB)
decrypted = cipher.decrypt(word)
word = unpad(decrypted, AES.block_size).decode('utf-8')
if bool:
word = json.loads(word)
elif mode == 'encrypt':
cipher = AES.new(key, AES.MODE_ECB)
padded = pad(word.encode('utf-8'), AES.block_size)
encrypted = cipher.encrypt(padded)
word = b64encode(encrypted).decode('utf-8')
if bool:
word = quote(word)
return word
+144 -53
View File
@@ -441,7 +441,7 @@
"token": "http://127.0.0.1:9978/file/TVBox/token.txt",
"cookie": "http://127.0.0.1:9978/file/TVBox/quark.txt",
"uc_cookie": "http://127.0.0.1:9978/file/TVBox/uc.txt",
"site": "http://45.207.212.215:12121",
"site": "http://103.45.162.207:20720",
"danmu": true
}
},
@@ -579,17 +579,6 @@
"filterable": 1,
"ext": "https://cs.hgyx.vip/api2/api.php/app/"
},
{
"key": "九龙影视",
"name": "九龙|APP",
"type": 3,
"api": "./PY/九龙影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "猎手影视",
"name": "猎手|APP",
@@ -679,7 +668,7 @@
"type": 3,
"api": "csp_Xdai",
"playerType": 1,
"ext": "jaHR0cDovLzIxMS4xMDEuMjM3LjIyMDo3Nzg4L3lteXMudHh0fDF2ZmZzZGFzZGFzZGFzZDJ8MXZmZnNkYXNkYXNkYXNkMnwxMDU="
"ext": "jaHR0cHM6Ly95bS1ycmNkbi1hb21lbmNsb3VkLnlteXMxLnh5enwxdmZmc2Rhc2Rhc2Rhc2QyfDF2ZmZzZGFzZGFzZGFzZDJ8MTA1"
},
{
"key": "优质",
@@ -705,6 +694,15 @@
"playerType": 2,
"ext": "saHR0cDovL3R4dC55eXlzLm5ld3MvdjQudHh0fGlsYnZ6d3o1MGthZ3U5eHR8aWxidnp3ejUwa2FndTl4dHw1NDQ="
},
{
"key": "闹闹",
"name": "闹闹|App",
"type": 3,
"api": "csp_Xdai",
"searchable": 1,
"changeable": 1,
"ext": "caHR0cDovLzExMC40Mi4zLjE5NTo4OTg5fEQ2cTdoamI4N0ZKMDlGNzd8RDZxN2hqYjg3RkowOUY3Nw"
},
{
"key": "蝴蝶",
"name": "蝴蝶|App",
@@ -724,16 +722,6 @@
"changeable": 1,
"ext": "http://kkwk123.top/api.php/app/"
},
{
"key": "人人影视",
"name": "人人|APP",
"type": 3,
"api": "csp_AppGetApp",
"searchable": 1,
"quickSearch": 0,
"filterable": 0,
"ext": "w7TCmsK8w5rDrcKYwoPCmcKkw57CmsK0wpnCoVpcUFfDgsOhw6PDrcORwqLCosKUV8KzwpPCocOiw6jCnMKkwoZhwqrCrMKhwqXCmlrCpMKZwqDCoMKtwprCoMOV5Ya46YSY5o+V5ZCTwqXlh5/kvpHlkbDCtOW+pOintui1tOa7gOetksOQwqHCpcKaWnHClcKjw4TDmMOzwqDCtFNXdmXCqsK5wq/CvcKvZXRiY8K8wrXDgMKrwrFaXFBXwrrDmMOtw4LDsFpqUFfCv8KowqvCv8Kvd2VidMKrwqbCvcK7w4BlZ1dcwpnCmsONw6LDrsKYwoXCosKcwqDCrcKawqDDosKnwqTCoGrCqMKiwq/CssKoZGVjXsKqwqnCrsKnwqtlZGpmwq/CqMKvwqjDrcKbwpHCksKZwqfDo8Oiw6nCoV9QV8KUw57DlsOsw7LDqsKne8KVwqnCoMKtwprCoMOzwpTCn8KnwpHDp8OawqrCqsKsaVfCrQ=="
},
{
"key": "站长影视",
"name": "站长|APP",
@@ -755,24 +743,34 @@
"ext": "w7TCmsK8w5rDrcKYwoPCmcKkw57CmsK0wpnCocKbwqTCpMKgwrPCosKpwqvCq2ReaWnCp8KswrLCp8KuamppacKywqzCqcOaw6rCnF7CpMKow63CmsKmwpnCocKGwpnCpMKVw47DpcOmwqDCtFNXV1zCmcKaw4PDp8OjwqfCh8KfwqLDncKawrTCmcKhwpzCnsKZwqTDj8KkwqvCssKhX1BXwqTDosOjwqHCs8KaWsKL5Ya16YSY5pCe5ZGWwqblh6XkvpHlkKpq5b6h6Ke26La95ryD562Tw5bCoV9QV3HDnsOmw4XDnsOzWmpQV8OewqfCsMKqw51qwpNgwpXDn8Kjw5zCr8OdwpdhV1zCmcKawrvDnsOtfMKmV2rCmcKaw5/CrcKwZMKTZ8KTwqnDmMOgwqnDnGnCk8KUYcKgwp/CmsKgw57CmMKTwqLCqcOpw6fDhcOew7NaalBXw7LDlMOpw7DDm8KhwpdgYcKrwqnCocO2"
},
{
"key": "猫猫影视",
"name": "猫猫|APP",
"key": "悠悠影视",
"name": "悠悠|APP",
"type": 3,
"api": "csp_AppGetApp",
"searchable": 1,
"quickSearch": 0,
"filterable": 0,
"ext": "w7TClcK8w5rDrcKYwoPCmcKkw57ClcK0wpvDosKnwqTCoGrCqMKiwqzCqsKrYWFgYcKnwqXCrcKwwqhlYmBqwrDCqsKywrHCqcKswp3CqcKjwqfDp8Oyw63CnF9SecKew6LDp8ORw6jDrMKXUmpSwpvCn8Kcw63Do8KjUmpSw5Tlh7jphaLmkJ7lkZ1f5Yac5L2H5ZCnwrPlv6ToqYDotr3mvIrnrIzCjVJcwpvCtMOfw6zDhcKYwqlSasKbwqTDsMOfw6DCpsKUwpHCo8Odw5TDrcOdw5vCpsKUYlLCpcKVwrvDnsOtfMKmUmrCm8Kkw7DDn8OgwqbClMKRwqPDncOUw63DncObwqbClGJSwqXClcONw6LDrsKYwoXCosKcwpvCrcKcwpvDtw=="
"ext": "w7TCmsK8w5rDrcKYwoPCmcKkw57CmsK0wpnCoVpcUFfDgsOhw6PDrcORwqLCosKUV8KzwpPCocOiw6jCnMKkwoZhwqrCrMKhwqXCmlrCpMKZwqDCoMKtwprCoMOV5Ya46YSY5o+V5ZCTwqXlh5/kvpHlkbDCtOW+pOintui1tOa7gOetksOQwqHCpcKaWnHClcKjw4TDmMOzwqDCtFNXdMKow7DCvMOtw63DrMKXwofCksKJw6nDlcOmw7DDqFpcUFfCusOYw63DgsOwWmpQV8K9w6vDscOCw63Cp8KiwpTCh8Obw4zDqsObw6bCqsKeV1zCmcKaw43DosOuwpjChcKiwpzCoMKtwprCoMOiwqfCpMKgasKowqLCq8KuwrBhYmJlwqfCpsKqwqfCsGhqZWXCr8KpwqnDmsOqwpxewqDCmMOpwprCpsKZwqHCl8KVwpPCosOyw6PDrsOEw5/CrFdqUMKgw6zDm8Oow7HClMKewpdgwqrCpcKwwqDDtw=="
},
{
"key": "兄弟影视",
"name": "兄弟|APP",
"key": "良人影视",
"name": "良人|APP",
"type": 3,
"api": "csp_AppGetApp",
"searchable": 1,
"quickSearch": 0,
"filterable": 0,
"ext": "w7TClcK8w5rDrcKYwoPCmcKkw57ClcK0wpvCnF9SwoPCmcOtw5jDj8Orw6ZValLCmMOtw6fDqsOswrRiX8KRwqDDqcKhw5zDq8OpwqnCn8KUXsOcw6LDp8Kow5vCo8KZXsKgw6HDo8KcwqXCnHzCnsKZwqTDkMOiw6zDncKcbVLCmcKew6LDp8OQwqrCq2xSXFLDrcOcw6rCm8K0VcKL5Ya16YSY5pCe5ZGWwqblh6XkvpHlkKpq5b6h6Ke26La95ryD562Tw5bCnF9SccKVw6zCvsOfw7LCnG1SwqPCqsOdw53DscOdw5vCo8KgwqfCk8Onw6DDnsOhw5xVXFJxw57DpsODw6/CnG1SwqPCqsOdw53DscOdw5vCo8KgwqfCk8Onw6DDnsOhw5xVwq0="
"ext": "w7TCmsK8w5rDrcKYwoPCmcKkw57CmsK0wpnCocKbwqTCpMKgw6zCrcKpwqjDpsKcwpHCnsKXw6vDmMOowqbCq2ZhZ2fCqsKqwrDCscKsYcKTwp/Co8Knw5TDqsKmw6HCqMKRwp7Cl8Ozw5vDqcOuwqjCoMKpwqHCk8Olw6LDr8OdwqjClsKfwp1fw6XDnMObw6fDocKlwpXCnl7DrcOrw67CoMKmU1fCg8KZw63DmMOPw6vDplpqUFfCoMKfwprCoMOuwpzCoFdqwpnCmsOV5Ye+6YWi5o+Y5ZCTXOWGnOS+kOWRqsK05b+q6KmA6LW35ruA56yJwo3CoMKfwprCoMK7wpjCo3vClcOywprCtMKZwqF3ZsKhZ8Ohw53DnMKxwrF5emBpwr/CqsKxwqDCplNXccKVw6zCvMOwwqDCtFNXdGbDqsKqw6LDo8Oca2d2esKpwqzDgMKwwrFaXFBXw53DmMOdw6vDs8KjwqR7wpXDssKawrTCmcKhwqzCkcKfwqfDmsOhw6HCqcKrZWZXwq0="
},
{
"key": "云播影视",
"name": "云播|APP",
"type": 3,
"api": "csp_AppGetApp",
"searchable": 1,
"quickSearch": 0,
"filterable": 0,
"ext": "w7TCmsK8w5rDrcKYwoPCmcKkw57CmsK0wpnCoVpcUFfDjMOcw67DnsOPwqXCnFdqwpnCmsOiw63DrsKjal9fw6DDmMOuw5rDqsKjXsKkwqbDssOVw5vDqcOqYcKTwp/CncKow5TDqsOiwqjCo8KYwqBXwqXCk8Khw4LDqMKcwqTCh8Kfw6vDl8KhwrPCmlrCmcKewpnDrcOJwqvCqsKzWlxQV8Otw5zDqsKgwrRTV8KL5Ya16YWh5pCY5ZGdwqXlh6bkvYrlkKdq5b6h6Ki/6La35ryK562Sw5daXFBXwrrDmMOtw4TDn8KsV2pQwqDDoMOjw5zDpWVkZWjDpsOcw53DpMKsZ2VoV8KlwpPCocK6w5/CpnnCplfCs8KTwqHDpsOjwpbCm2Jkwq7Cq8Onw6LDncKeYmRlwrHCmsKmwpnCocKbwpXCkcKUw57DpcOtwqDCtFPCq1fCpcOsw5jDrMKmw5vCmsKVwp7CpMKgwq3CmsKgw4fCosKqwpnCnMOlw5TCqcKuwqhjUFjCh8Oiw6HDnsOow7HCplB+woTCmcKkwqrCp8KqblDCh8KZw6fCqcKuwrTCmsKrZmRZwpnCtMOqw6nDpsKYwofClcKSw4TDnMOuwqjCr2ZnXmPCr8KTwqLDhMOCwod9fFzCmcOfw6PDpMOfU3fClcKTw6TDosKjwpnCvcKbwqLCn8Kdw57CosKrwqrCrGFgXmDCp8KjwprDjMObwpnCkcKiwpnCqMKowq3CsMKoZmZXXMKZwprDm8Olw6bCosKnc8Kiw6jDpsOtw4nDrMKiwqTCn8KTw6jDn8OMw57DnsKcwqLClcKTw63DpsKhwrPCmsKHwqLCpcKVw7bCn8KawqDDnsKYwpPCosKpw6nDp8OFw57Ds1pqUFfDssOUw6nDsMObwqHCl2BhwqvCqcKhw7Y="
},
{
"key": "洽洽影视",
@@ -794,6 +792,68 @@
"filterable": 1,
"ext": "KhY021WelCEl+6MsvwnzaLK5sgGhHBhBszPP7EvqSfdVqJTIDGrV0xPZiB/0I8O9mrMKS+cdzxqKP83dFJJyyyb8D0J0ZVtM/ds4xb/4dA=="
},
{
"key": "小米尘落",
"name": "尘落|APP",
"type": 3,
"api": "csp_Wetv"
},
{
"key": "小米虎虎",
"name": "虎虎|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_AppHuhu"
},
{
"key": "小米眼镜",
"name": "眼镜|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_AppYanjing"
},
{
"key": "小米米兔",
"name": "米兔|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_MiTuApp"
},
{
"key": "小米玉米",
"name": "玉米|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_YuMiApp"
},
{
"key": "小米电影",
"name": "电影|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_MovieApp"
},
{
"key": "小米多多",
"name": "多多|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_DuoDuoApp"
},
{
"key": "小米良人",
"name": "良人|APP",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_LiangRenApp"
},
{
"key": "西瓜视频",
"name": "西瓜|视频",
@@ -833,6 +893,33 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "饭团影视",
"name": "饭团|影视",
"type": 3,
"api": "csp_Fantuan",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "来看影视",
"name": "来看|影视",
"type": 3,
"api": "csp_Lkdy",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "樱花影视",
"name": "樱花|影视",
"type": 3,
"api": "csp_Lggys",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "饺子影视",
"name": "饺子|影视",
@@ -842,6 +929,15 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "看客影视",
"name": "看客|影视",
"type": 3,
"api": "csp_Kanke",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "全网影视",
"name": "全网|影视",
@@ -852,22 +948,6 @@
"filterable": 1,
"ext": "https://www.91qkw.com"
},
{
"key": "看客影视",
"name": "看客|影视",
"type": 3,
"api": "csp_Kanke",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "瓜子影视",
"name": "瓜子|影视",
"type": 3,
"api": "./JS/drpy2.min.js",
"ext": "./JS/瓜子影视.js"
},
{
"key": "奇优影视",
"name": "奇优|影视",
@@ -888,11 +968,13 @@
"filterable": 1
},
{
"key": "樱花影视",
"name": "樱花|影视",
"key": "瓜子影视",
"name": "瓜子|影视",
"type": 3,
"api": "csp_XBPQ",
"ext": "./XBPQ/樱花影视.json"
"api": "csp_Gz360",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "可可影视",
@@ -2031,6 +2113,15 @@
"regex": [
"video/tos/cn"
]
},
{
"name": "饭团点击",
"hosts": [
"fantuan"
],
"script": [
"document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();"
]
}
],
"doh": [
@@ -2082,7 +2173,7 @@
"name": "肥羊直播",
"type": 3,
"api": "csp_Feiyang",
"url": "tv.m3u",
"url": "https://9877.kstore.space/Live/live.m3u",
"timeout": 10,
"ua": "okhttp/3.15"
},
@@ -2106,7 +2197,7 @@
"name": "虎牙一起看",
"type": 3,
"api": "csp_Feiyang",
"url": "huyayqk.m3u",
"url": "https://9877.kstore.space/Live/huyayqk.m3u",
"timeout": 10,
"ua": "okhttp/3.15"
},
@@ -2114,7 +2205,7 @@
"name": "斗鱼一起看",
"type": 3,
"api": "csp_Feiyang",
"url": "douyuyqk.m3u",
"url": "https://9877.kstore.space/Live/douyuyqk.m3u",
"timeout": 10,
"ua": "okhttp/3.15"
},
@@ -2122,7 +2213,7 @@
"name": "YY轮播",
"type": 3,
"api": "csp_Feiyang",
"url": "yylunbo.m3u",
"url": "https://9877.kstore.space/Live/yylunbo.m3u",
"timeout": 10,
"ua": "okhttp/3.15"
},
BIN
View File
Binary file not shown.