diff --git a/api.json b/api.json index ca1ceb6..8677a21 100644 --- a/api.json +++ b/api.json @@ -92,6 +92,51 @@ "key3": "aassddwwxxllsx1x" } }, + { + "key": "乐达", + "name": "乐达|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://ledayy.com", + "site": "", + "dataKey": "hjjp68c2okw12345", + "dataIv": "hjjp68c2okw12345", + "deviceId": "", + "version": "" + } + }, + { + "key": "灵虎", + "name": "灵虎|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://bind.315999.xyz/89.txt", + "dataKey": "#getapp@TMD@2025", + "dataIv": "#getapp@TMD@2025", + "deviceId": "", + "version": "120" + } + }, + { + "key": "旗星", + "name": "旗星|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://ys.qist.top", + "site": "", + "dataKey": "2SWSPFxugBLPPOKo", + "dataIv": "2SWSPFxugBLPPOKo", + "deviceId": "", + "version": "120" + } + }, { "key": "云云", "name": "云云|APP", @@ -286,6 +331,7 @@ "key": "米诺", "name": "米诺|APP", "type": 3, + "quickSearch": 1, "api": "csp_AppGet", "ext": { "url": "http://www.milkidc.cn", @@ -771,23 +817,59 @@ "type": "list" } }, - { - "key": "爱搜", - "name": "爱搜|4K弹幕", - "type": 3, - "api": "./js/cloud.min.js", - "ext": "./js/爱搜.js", - "style": { - "type": "list" - } - }, { "key": "糖果", "name": "糖果|搜索", "type": 3, "api": "csp_TGSou", "searchable": 1, - "changeable": 0 + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "音海夸克", + "name": "音海|夸克", + "type": 3, + "api": "csp_YinHaiQuark", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "音海UC", + "name": "音海|UC", + "type": 3, + "api": "csp_YinHaiUC", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "音海天翼", + "name": "音海|天翼", + "type": 3, + "api": "csp_YinHaiTianyi", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "音海123", + "name": "音海|123", + "type": 3, + "api": "csp_YinHai123", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "音海百度", + "name": "音海|百度", + "type": 3, + "api": "csp_YinHaiBaidu", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 }, { "key": "米搜", @@ -795,16 +877,6 @@ "type": 3, "api": "csp_MiSou" }, - { - "key": "人人分享站", - "name": "人人|搜索", - "type": 3, - "api": "./js/cloud.min.js", - "ext": "./js/人人分享站.js", - "style": { - "type": "list" - } - }, { "key": "全盘", "name": "全盘|搜索", @@ -832,8 +904,7 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 }, { "key": "偷乐短剧", @@ -843,8 +914,7 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 }, { "key": "爱看短剧", @@ -854,8 +924,7 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 }, { "key": "锦鲤短剧", @@ -865,8 +934,17 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 + }, + { + "key": "剧王短剧", + "name": "剧王|短剧", + "type": 3, + "api": "./py/剧王短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1 }, { "comment": "自定义接口开始", @@ -1261,7 +1339,6 @@ "searchable": 1, "quickSearch": 1, "filterable": 1, - "playerType": 2, "ext": { "site": "https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" } @@ -1274,8 +1351,7 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 }, { "key": "零度影视", @@ -1285,8 +1361,7 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 }, { "key": "追星影视", @@ -1296,8 +1371,7 @@ "searchable": 1, "changeable": 1, "quickSearch": 1, - "filterable": 1, - "playerType": 2 + "filterable": 1 }, { "key": "厂长影视", @@ -1350,8 +1424,7 @@ "key": "饺子影视", "name": "饺子|影视", "type": 3, - "api": "csp_Jiaozi", - "playerType": 2 + "api": "csp_Jiaozi" }, { "key": "鸭梨影视", diff --git a/js/drpy2.min.js b/js/drpy2.min.js index 7b64954..8e28a73 100644 --- a/js/drpy2.min.js +++ b/js/drpy2.min.js @@ -2253,7 +2253,7 @@ function detailParse(detailObj) { } } if (p === "*") { - vod.vod_play_from = "兵哥视界"; + vod.vod_play_from = "在线播放"; vod.vod_remarks = detailUrl; vod.vod_actor = "没有二级,只有一级链接直接嗅探播放"; vod.vod_content = MY_URL; @@ -2359,7 +2359,7 @@ function detailParse(detailObj) { } console.log(JSON.stringify(playFrom)) } else { - playFrom = ["兵哥视界"] + playFrom = ["在线播放"] } vod.vod_play_from = playFrom.join(vod_play_from); let vod_play_url = "$$$"; diff --git a/py/剧王短剧.py b/py/剧王短剧.py new file mode 100644 index 0000000..d596cc2 --- /dev/null +++ b/py/剧王短剧.py @@ -0,0 +1,329 @@ +# coding=utf-8 +# !/usr/bin/python + +""" + +作者 丢丢喵推荐 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容 + ====================Diudiumiao==================== + +""" + +from Crypto.Util.Padding import unpad +from Crypto.Util.Padding import pad +from urllib.parse import unquote +from Crypto.Cipher import ARC4 +from urllib.parse import quote +from base.spider import Spider +from Crypto.Cipher import AES +from datetime import datetime +from bs4 import BeautifulSoup +from base64 import b64decode +import urllib.request +import urllib.parse +import datetime +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://djw1.com" + +headerx = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36' + } + +class Spider(Spider): + global xurl + global headerx + + def getName(self): + return "首页" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''): + if pl == 3: + plx = [] + while True: + start_index = text.find(start_str) + if start_index == -1: + break + end_index = text.find(end_str, start_index + len(start_str)) + if end_index == -1: + break + middle_text = text[start_index + len(start_str):end_index] + plx.append(middle_text) + text = text.replace(start_str + middle_text + end_str, '') + if len(plx) > 0: + purl = '' + for i in range(len(plx)): + matches = re.findall(start_index1, plx[i]) + output = "" + for match in matches: + match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1]) + if match3: + number = match3.group(1) + else: + number = 0 + if 'http' not in match[0]: + output += f"#{match[1]}${number}{xurl}{match[0]}" + else: + output += f"#{match[1]}${number}{match[0]}" + output = output[1:] + purl = purl + output + "$$$" + purl = purl[:-3] + return purl + else: + return "" + else: + start_index = text.find(start_str) + if start_index == -1: + return "" + end_index = text.find(end_str, start_index + len(start_str)) + if end_index == -1: + return "" + + if pl == 0: + middle_text = text[start_index + len(start_str):end_index] + return middle_text.replace("\\", "") + + if pl == 1: + middle_text = text[start_index + len(start_str):end_index] + matches = re.findall(start_index1, middle_text) + if matches: + jg = ' '.join(matches) + return jg + + if pl == 2: + middle_text = text[start_index + len(start_str):end_index] + matches = re.findall(start_index1, middle_text) + if matches: + new_list = [f'{item}' for item in matches] + jg = '$$$'.join(new_list) + return jg + + def homeContent(self, filter): + result = {"class": []} + + detail = requests.get(url=xurl + "/all/", headers=headerx) + detail.encoding = "utf-8" + res = detail.text + + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('section', class_="container items") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + id = vod.find('a')['href'] + + name = vod.text.strip() + + result["class"].append({"type_id": id, "type_name": "" + name}) + + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + url = f'{cid}page/{str(page)}/' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('section', class_="container items") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + name = vod.find('img')['alt'] + + ids = vod.find('a', class_="image-line") + id = ids['href'] + + pic = vod.find('img')['src'] + + remark = self.extract_middle_text(str(vod), 'class="remarks light">', '<', 0) + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": '▶️' + remark + } + videos.append(video) + + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + did = ids[0] + result = {} + videos = [] + xianlu = '' + bofang = '' + + if 'http' not in did: + did = xurl + did + + res = requests.get(url=did, headers=headerx) + res.encoding = "utf-8" + res = res.text + doc = BeautifulSoup(res, "lxml") + + url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + content = '集多为您介绍剧情📢' + self.extract_middle_text(res,'class="info-detail">','<', 0) + + remarks = self.extract_middle_text(res, 'class="info-mark">', '<', 0) + + year = self.extract_middle_text(res, 'class="info-addtime">', '<', 0) + + if name not in content: + bofang = Jumps + xianlu = '1' + else: + soups = doc.find('div', class_="ep-list-items") + + soup = soups.find_all('a') + + for sou in soup: + + id = sou['href'] + + name = sou.text.strip() + + bofang = bofang + name + '$' + id + '#' + + bofang = bofang[:-1] + + xianlu = '专线' + + videos.append({ + "vod_id": did, + "vod_remarks": remarks, + "vod_year": year, + "vod_content": content, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + + res = requests.get(url=id, headers=headerx) + res.encoding = "utf-8" + res = res.text + + url = self.extract_middle_text(res, '"wwm3u8":"', '"', 0).replace('\\', '') + + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, pg): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + url = f'{xurl}/search/{key}/page/{str(page)}/' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('section', class_="container items") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + name = vod.find('img')['alt'] + + ids = vod.find('a', class_="image-line") + id = ids['href'] + + pic = vod.find('img')['src'] + + remark = self.extract_middle_text(str(vod), 'class="remarks light">', '<', 0) + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": '▶️' + remark + } + videos.append(video) + + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def searchContent(self, key, quick, pg="1"): + return self.searchContentPage(key, quick, '1') + + def localProxy(self, params): + if params['type'] == "m3u8": + return self.proxyM3u8(params) + elif params['type'] == "media": + return self.proxyMedia(params) + elif params['type'] == "ts": + return self.proxyTs(params) + return None + + + + + + + diff --git a/spider.jar b/spider.jar index 09e9c41..db87936 100644 Binary files a/spider.jar and b/spider.jar differ