修罗
This commit is contained in:
-228
@@ -1,228 +0,0 @@
|
||||
# coding=utf-8
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
from urllib.parse import quote
|
||||
|
||||
from base.spider import Spider as BaseSpider
|
||||
|
||||
sys.path.append("..")
|
||||
|
||||
|
||||
CLASS_LIST = [
|
||||
{"type_id": "逆袭", "type_name": "🎬逆袭"},
|
||||
{"type_id": "霸总", "type_name": "🎬霸总"},
|
||||
{"type_id": "现代言情", "type_name": "🎬现代言情"},
|
||||
{"type_id": "打脸虐渣", "type_name": "🎬打脸虐渣"},
|
||||
{"type_id": "豪门恩怨", "type_name": "🎬豪门恩怨"},
|
||||
{"type_id": "神豪", "type_name": "🎬神豪"},
|
||||
{"type_id": "马甲", "type_name": "🎬马甲"},
|
||||
{"type_id": "都市日常", "type_name": "🎬都市日常"},
|
||||
{"type_id": "战神归来", "type_name": "🎬战神归来"},
|
||||
{"type_id": "小人物", "type_name": "🎬小人物"},
|
||||
{"type_id": "女性成长", "type_name": "🎬女性成长"},
|
||||
{"type_id": "大女主", "type_name": "🎬大女主"},
|
||||
{"type_id": "穿越", "type_name": "🎬穿越"},
|
||||
{"type_id": "都市修仙", "type_name": "🎬都市修仙"},
|
||||
{"type_id": "强者回归", "type_name": "🎬强者回归"},
|
||||
{"type_id": "亲情", "type_name": "🎬亲情"},
|
||||
{"type_id": "古装", "type_name": "🎬古装"},
|
||||
{"type_id": "重生", "type_name": "🎬重生"},
|
||||
{"type_id": "闪婚", "type_name": "🎬闪婚"},
|
||||
{"type_id": "赘婿逆袭", "type_name": "🎬赘婿逆袭"},
|
||||
{"type_id": "虐恋", "type_name": "🎬虐恋"},
|
||||
{"type_id": "追妻", "type_name": "🎬追妻"},
|
||||
{"type_id": "天下无敌", "type_name": "🎬天下无敌"},
|
||||
{"type_id": "家庭伦理", "type_name": "🎬家庭伦理"},
|
||||
{"type_id": "萌宝", "type_name": "🎬萌宝"},
|
||||
{"type_id": "古风权谋", "type_name": "🎬古风权谋"},
|
||||
{"type_id": "职场", "type_name": "🎬职场"},
|
||||
{"type_id": "奇幻脑洞", "type_name": "🎬奇幻脑洞"},
|
||||
{"type_id": "异能", "type_name": "🎬异能"},
|
||||
{"type_id": "无敌神医", "type_name": "🎬无敌神医"},
|
||||
{"type_id": "古风言情", "type_name": "🎬古风言情"},
|
||||
{"type_id": "传承觉醒", "type_name": "🎬传承觉醒"},
|
||||
{"type_id": "现言甜宠", "type_name": "🎬现言甜宠"},
|
||||
{"type_id": "奇幻爱情", "type_name": "🎬奇幻爱情"},
|
||||
{"type_id": "乡村", "type_name": "🎬乡村"},
|
||||
{"type_id": "历史古代", "type_name": "🎬历史古代"},
|
||||
{"type_id": "王妃", "type_name": "🎬王妃"},
|
||||
{"type_id": "高手下山", "type_name": "🎬高手下山"},
|
||||
{"type_id": "娱乐圈", "type_name": "🎬娱乐圈"},
|
||||
{"type_id": "强强联合", "type_name": "🎬强强联合"},
|
||||
{"type_id": "破镜重圆", "type_name": "🎬破镜重圆"},
|
||||
{"type_id": "暗恋成真", "type_name": "🎬暗恋成真"},
|
||||
{"type_id": "民国", "type_name": "🎬民国"},
|
||||
{"type_id": "欢喜冤家", "type_name": "🎬欢喜冤家"},
|
||||
{"type_id": "系统", "type_name": "🎬系统"},
|
||||
{"type_id": "真假千金", "type_name": "🎬真假千金"},
|
||||
{"type_id": "龙王", "type_name": "🎬龙王"},
|
||||
{"type_id": "校园", "type_name": "🎬校园"},
|
||||
{"type_id": "穿书", "type_name": "🎬穿书"},
|
||||
{"type_id": "女帝", "type_name": "🎬女帝"},
|
||||
{"type_id": "团宠", "type_name": "🎬团宠"},
|
||||
{"type_id": "年代爱情", "type_name": "🎬年代爱情"},
|
||||
{"type_id": "玄幻仙侠", "type_name": "🎬玄幻仙侠"},
|
||||
{"type_id": "青梅竹马", "type_name": "🎬青梅竹马"},
|
||||
{"type_id": "悬疑推理", "type_name": "🎬悬疑推理"},
|
||||
{"type_id": "皇后", "type_name": "🎬皇后"},
|
||||
{"type_id": "替身", "type_name": "🎬替身"},
|
||||
{"type_id": "大叔", "type_name": "🎬大叔"},
|
||||
{"type_id": "喜剧", "type_name": "🎬喜剧"},
|
||||
{"type_id": "剧情", "type_name": "🎬剧情"},
|
||||
]
|
||||
|
||||
|
||||
class Spider(BaseSpider):
|
||||
def __init__(self):
|
||||
self.name = "红果短剧"
|
||||
self.host = "https://api-v2.cenguigui.cn"
|
||||
self.api = self.host + "/api/duanju/api.php"
|
||||
self.headers = {
|
||||
"User-Agent": (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/120.0.0.0 Safari/537.36"
|
||||
),
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
}
|
||||
self.classes = CLASS_LIST
|
||||
self.filters = {
|
||||
"分类": [
|
||||
{
|
||||
"key": "area",
|
||||
"name": "分类",
|
||||
"value": CLASS_LIST,
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
def init(self, extend=""):
|
||||
return None
|
||||
|
||||
def getName(self):
|
||||
return self.name
|
||||
|
||||
def homeContent(self, filter):
|
||||
return {"class": self.classes, "filters": self.filters}
|
||||
|
||||
def homeVideoContent(self):
|
||||
return {"list": self._list_items("热播", 1)}
|
||||
|
||||
def categoryContent(self, tid, pg, filter, extend):
|
||||
page = int(pg)
|
||||
items = self._list_category_items(tid, page)
|
||||
return {"page": page, "limit": len(items), "total": page * 30 + len(items), "list": items}
|
||||
|
||||
def searchContent(self, key, quick, pg="1"):
|
||||
page = int(pg)
|
||||
keyword = str(key or "").strip()
|
||||
if not keyword:
|
||||
return {"page": page, "limit": 0, "total": 0, "list": []}
|
||||
items = self._list_items(keyword, page)
|
||||
return {"page": page, "limit": len(items), "total": len(items), "list": items}
|
||||
|
||||
def detailContent(self, ids):
|
||||
result = {"list": []}
|
||||
for raw_id in ids:
|
||||
vod_id = str(raw_id or "").strip()
|
||||
if not vod_id:
|
||||
continue
|
||||
payload = self._get_json(f"{self.api}?book_id={quote(vod_id)}")
|
||||
data = payload.get("data", []) if isinstance(payload, dict) else []
|
||||
if not data:
|
||||
continue
|
||||
episodes = []
|
||||
for index, item in enumerate(data, start=1):
|
||||
play_id = str(item.get("video_id", "")).strip()
|
||||
if not play_id:
|
||||
continue
|
||||
episode_name = self._clean_title(
|
||||
str(item.get("title") or item.get("volume_name") or f"第{index}集")
|
||||
)
|
||||
episodes.append(f"{episode_name}${play_id}")
|
||||
tags = payload.get("category_names") or []
|
||||
result["list"].append(
|
||||
{
|
||||
"vod_id": vod_id,
|
||||
"vod_name": self._clean_title(payload.get("book_name", "")),
|
||||
"vod_pic": str(payload.get("book_pic", "")),
|
||||
"vod_area": ",".join(tags) if isinstance(tags, list) else str(tags or ""),
|
||||
"vod_remarks": str(payload.get("duration", "")).strip() or f"更新至{len(episodes)}集",
|
||||
"vod_year": f"更新时间:{payload.get('time', '')}" if payload.get("time") else "",
|
||||
"vod_actor": str(payload.get("author", "")),
|
||||
"vod_content": str(payload.get("desc", "")),
|
||||
"vod_play_from": "红果短剧",
|
||||
"vod_play_url": "#".join(episodes),
|
||||
}
|
||||
)
|
||||
return result
|
||||
|
||||
def playerContent(self, flag, id, vipFlags):
|
||||
try:
|
||||
payload = self._get_json(
|
||||
f"{self.api}?video_id={quote(str(id or '').strip())}"
|
||||
)
|
||||
return {
|
||||
"parse": 0,
|
||||
"jx": 0,
|
||||
"url": str((payload or {}).get("url", "")).strip(),
|
||||
"header": {},
|
||||
}
|
||||
except Exception:
|
||||
return {"parse": 0, "jx": 0, "url": "", "header": {}}
|
||||
|
||||
def _list_items(self, name, page):
|
||||
payload = self._get_json(f"{self.api}?name={quote(str(name))}&page={int(page)}")
|
||||
data = payload.get("data", []) if isinstance(payload, dict) else []
|
||||
return [self._map_vod(item) for item in data]
|
||||
|
||||
def _list_category_items(self, classname, page):
|
||||
offset = self._category_offset(page)
|
||||
url = (
|
||||
f"{self.api}?classname={quote(str(classname))}"
|
||||
f"&offset={offset}&showRawParams=false"
|
||||
)
|
||||
payload = self._get_json(url)
|
||||
data = payload.get("data", []) if isinstance(payload, dict) else []
|
||||
return [self._map_vod(item) for item in data]
|
||||
|
||||
def _category_offset(self, page):
|
||||
page_num = max(1, int(page))
|
||||
if page_num <= 1:
|
||||
return 1
|
||||
return (page_num - 1) * 20
|
||||
|
||||
def _map_vod(self, item):
|
||||
total = item.get("totalChapterNum")
|
||||
remarks = str(item.get("sub_title", "")).strip()
|
||||
return {
|
||||
"vod_id": str(item.get("book_id") or item.get("id", "")),
|
||||
"vod_name": self._clean_title(item.get("title", "")),
|
||||
"vod_pic": str(item.get("cover", "")),
|
||||
"vod_remarks": remarks or (f"更新至{total}集" if total else ""),
|
||||
}
|
||||
|
||||
def _clean_title(self, text):
|
||||
value = str(text or "")
|
||||
value = re.sub(r"[【\[]热播(?:好剧|短剧)?[】\]]", "", value)
|
||||
value = re.sub(r"[【\[]新剧(?:热播)?[】\]]", "", value)
|
||||
return re.sub(r"\s+", " ", value).strip()
|
||||
|
||||
def _sort_qualities(self, items):
|
||||
priority = {"1080p": 3, "sc": 2, "sd": 1}
|
||||
return sorted(
|
||||
items or [],
|
||||
key=lambda item: priority.get(str(item.get("quality", "")), 0),
|
||||
reverse=True,
|
||||
)
|
||||
|
||||
def _get_json(self, url):
|
||||
response = self.fetch(url, headers=dict(self.headers), timeout=10, verify=False)
|
||||
if response.status_code != 200:
|
||||
return {}
|
||||
try:
|
||||
return json.loads(response.text or "{}")
|
||||
except (json.JSONDecodeError, TypeError, ValueError):
|
||||
return {}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// ignore
|
||||
//@name:红果短剧
|
||||
//@version:1
|
||||
//@remark:
|
||||
//@format:secspider/1
|
||||
//@alg:aes-256-gcm
|
||||
//@wrap:hkdf-aes-keywrap
|
||||
//@sign:ed25519
|
||||
//@kid:k2026_04
|
||||
//@nonce:base64:3yMG/lP1rbyiuq2u
|
||||
//@ek:base64:+KBsZiOu5xvmWi8uouBxrTm6kxabuwL4NGTFM/130SPS/5D9g9nDCYcEFDECR+EB
|
||||
//@hash:sha256:656890e9a95c07003623fc29165860798021bcb22330a9506c2570eda26e7b6a
|
||||
//@sig:base64:p8EDrbE4DwaXS/DDPe206MP3x/vZkYCSV+TtioaMZcsArumBwzeTT5A+OFbJUp0pfJ59mWC/I5phwESRtntLDA==
|
||||
// ignore
|
||||
payload.base64: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
|
||||
Reference in New Issue
Block a user