mirror of
https://github.com/ls125781003/tvboxtg.git
synced 2025-10-28 20:32:23 +00:00
1202/1202-1520
up
This commit is contained in:
164
小米/api.json
164
小米/api.json
@@ -23,11 +23,13 @@
|
||||
"name": "🧸玩偶┃4K4K",
|
||||
"type": 3,
|
||||
"api": "csp_Wogg",
|
||||
"changeable": 0,
|
||||
"filterable": 1,
|
||||
"ext": {
|
||||
"site_urls": [
|
||||
"https://wogg.xxooo.cf",
|
||||
"http://www.wogg.bf",
|
||||
"https://woggpan.333232.xyz/",
|
||||
"https://wogg.xxooo.cf/",
|
||||
"https://woggapi.888484.xyz/",
|
||||
"https://www.wogg.net"
|
||||
],
|
||||
"threadinfo": {
|
||||
@@ -41,10 +43,13 @@
|
||||
"name": "💯至臻┃4K4K",
|
||||
"type": 3,
|
||||
"api": "csp_Duopan",
|
||||
"changeable": 0,
|
||||
"filterable": 1,
|
||||
"ext": {
|
||||
"site_urls": [
|
||||
"https://mihdr.top",
|
||||
"http://www.xhww.net",
|
||||
"http://xhww.net",
|
||||
"https://xiaomiai.site"
|
||||
],
|
||||
"url_key": "Duopan",
|
||||
@@ -59,6 +64,7 @@
|
||||
"name": "💌MIUC┃4K4K",
|
||||
"type": 3,
|
||||
"api": "csp_MiUc",
|
||||
"changeable": 0,
|
||||
"filterable": 1,
|
||||
"ext": {
|
||||
"site_urls": [
|
||||
@@ -107,6 +113,44 @@
|
||||
"changeable": 0,
|
||||
"ext": "./js/kanqiu.js"
|
||||
},
|
||||
{
|
||||
"key": "csp_JPYY",
|
||||
"name": "🥇文采┃1080P",
|
||||
"type": 3,
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"api": "csp_Jpyy",
|
||||
"playerType": 2,
|
||||
"filterable": 1,
|
||||
"ext": ""
|
||||
},
|
||||
{
|
||||
"key": "csp_XSX",
|
||||
"name": "👀视讯┃1080P",
|
||||
"type": 3,
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"quickSearch": 1,
|
||||
"api": "csp_Xsx",
|
||||
"playerType": 2,
|
||||
"filterable": 1,
|
||||
"ext": ""
|
||||
},
|
||||
{
|
||||
"key": "csp_SuBaiBai",
|
||||
"name": "☁️白白┃1080P",
|
||||
"type": 3,
|
||||
"api": "csp_SuBaiBai",
|
||||
"playerType": 2,
|
||||
"ext": "https://subaibai.com/"
|
||||
},
|
||||
{
|
||||
"key": "huohuo",
|
||||
"name": "💥火火┃1080P",
|
||||
"type": 3,
|
||||
"changeable": 0,
|
||||
"api": "csp_SaoHuo"
|
||||
},
|
||||
{
|
||||
"key": "瓜子",
|
||||
"name": "🍉瓜子┃1080P",
|
||||
@@ -153,13 +197,18 @@
|
||||
"jar": "./jars/天天.jar"
|
||||
},
|
||||
{
|
||||
"key": "繁荣",
|
||||
"name": "🥝凡人┃1080P",
|
||||
"key": "csp_zhufan",
|
||||
"name": "🚗追饭┃1080P",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"type": 3,
|
||||
"api": "csp_Frong",
|
||||
"playerType": 2,
|
||||
"ext": "FMy4wLjJ8aHR0cDovLzQzLjI0OC4xMjguMTM4OjgxMzN8NDJmN2EyMDl8MjV8NTY4Njg1NDM0RkVDN0M4QzI5MEFFNEZCMzI1RkYxMzB8c2hpamllbWFvdHZ8MzNhN2ZmYTljODU0MTJjNzQyZjdhMjA5fDI1fDU2ODY4NTQzNEZFQzdDOEMyOTBBRTRGQjMyNUZGMTMwfHNoaWppZW1hb3R2fDMzYTdmZmE5Yzg1NDEyYzc=",
|
||||
"jar": "./jars/天天.jar"
|
||||
"api": "csp_MiTo",
|
||||
"ext": {
|
||||
"url": "http://xiafan.zhuiju666.com",
|
||||
"dataKey": "aassddwwxxllsx1x",
|
||||
"playKey": "bbssqdbbssll25sx",
|
||||
"version": "1.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "csp_LiteApple",
|
||||
@@ -173,41 +222,39 @@
|
||||
"ext": ""
|
||||
},
|
||||
{
|
||||
"key": "csp_JPYY",
|
||||
"name": "🥇文采┃1080P",
|
||||
"key": "hipy_js_腾云驾雾[官]",
|
||||
"name": "🌞腾腾┃解析",
|
||||
"type": 3,
|
||||
"api": "./api/drpy2.js",
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"api": "csp_Jpyy",
|
||||
"playerType": 2,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": ""
|
||||
"order_num": 0,
|
||||
"changeable": 0,
|
||||
"ext": "./js/tm.js"
|
||||
},
|
||||
{
|
||||
"key": "csp_XSX",
|
||||
"name": "👀视讯┃1080P",
|
||||
"key": "guoguo",
|
||||
"name": "🌞果果┃解析",
|
||||
"type": 3,
|
||||
"api": "./api/drpy2.js",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"order_num": 0,
|
||||
"changeable": 0,
|
||||
"ext": "./js/guoguo.js"
|
||||
},
|
||||
{
|
||||
"key": "csp_视觉",
|
||||
"name": "🔭视觉┃PYTHON",
|
||||
"type": 3,
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"quickSearch": 1,
|
||||
"api": "csp_Xsx",
|
||||
"api": "./api/shijue.py",
|
||||
"playerType": 2,
|
||||
"filterable": 1,
|
||||
"ext": ""
|
||||
},
|
||||
{
|
||||
"key": "csp_SuBaiBai",
|
||||
"name": "☁️白白┃1080P",
|
||||
"type": 3,
|
||||
"api": "csp_SuBaiBai",
|
||||
"playerType": 2,
|
||||
"ext": "https://subaibai.com/"
|
||||
},
|
||||
{
|
||||
"key": "csp_Tvyb",
|
||||
"name": "☁️云播┃1080P",
|
||||
"type": 3,
|
||||
"api": "csp_Tvyb"
|
||||
"filterable": 1
|
||||
},
|
||||
{
|
||||
"key": "csp_Czsapp",
|
||||
@@ -229,20 +276,6 @@
|
||||
"click": "document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();",
|
||||
"ext": "https://fantuan.vip/"
|
||||
},
|
||||
{
|
||||
"key": "csp_Dm84",
|
||||
"name": "🎨动漫┃1080P",
|
||||
"type": 3,
|
||||
"api": "csp_Dm84",
|
||||
"playerType": 2
|
||||
},
|
||||
{
|
||||
"key": "huohuo",
|
||||
"name": "💥火火┃1080P",
|
||||
"type": 3,
|
||||
"changeable": 0,
|
||||
"api": "csp_SaoHuo"
|
||||
},
|
||||
{
|
||||
"key": "荐片",
|
||||
"name": "🍭荐片┃磁力",
|
||||
@@ -294,9 +327,9 @@
|
||||
"url": "Web"
|
||||
},
|
||||
{
|
||||
"name": "4K解析",
|
||||
"name": "解析1",
|
||||
"type": 1,
|
||||
"url": "https://jx.xiaofengtv.com/jx.php?url=",
|
||||
"url": "https://www.mpanso.com/muou/qilin.php?url=",
|
||||
"ext": {
|
||||
"flag": [
|
||||
"qq",
|
||||
@@ -325,36 +358,7 @@
|
||||
{
|
||||
"name": "反弹",
|
||||
"type": 1,
|
||||
"url": "http://27.25.141.188:6688/api/?key=cc10901237ea968438714d7f0303986b&url=",
|
||||
"ext": {
|
||||
"flag": [
|
||||
"qq",
|
||||
"腾讯",
|
||||
"qiyi",
|
||||
"爱奇艺",
|
||||
"奇艺",
|
||||
"youku",
|
||||
"优酷",
|
||||
"sohu",
|
||||
"搜狐",
|
||||
"letv",
|
||||
"乐视",
|
||||
"mgtv",
|
||||
"芒果",
|
||||
"tnmb",
|
||||
"seven",
|
||||
"bilibili",
|
||||
"1905"
|
||||
],
|
||||
"header": {
|
||||
"User-Agent": "okhttp/4.9.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "1080解析1",
|
||||
"type": 1,
|
||||
"url": "https://zy.qiaoji8.com/neibu.php?url=",
|
||||
"url": "",
|
||||
"ext": {
|
||||
"flag": [
|
||||
"qq",
|
||||
@@ -383,7 +387,7 @@
|
||||
{
|
||||
"name": "1080解析",
|
||||
"type": 1,
|
||||
"url": "http://117.50.183.202:8036/?ip=111.55.12.236&url=",
|
||||
"url": "",
|
||||
"ext": {
|
||||
"flag": [
|
||||
"qq",
|
||||
|
||||
238
小米/api/shijue.py
Normal file
238
小米/api/shijue.py
Normal file
@@ -0,0 +1,238 @@
|
||||
# coding=utf-8
|
||||
# !/usr/bin/python
|
||||
# by嗷呜
|
||||
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": "排序",
|
||||
}
|
||||
filters = {}
|
||||
classes = []
|
||||
for item in data["data"]:
|
||||
has_non_empty_field = False
|
||||
jsontype_extend = json.loads(item["converUrl"])
|
||||
classes.append({"type_name": item["name"], "type_id": str(item["id"])})
|
||||
for key in dy:
|
||||
if key in jsontype_extend and jsontype_extend[key].strip() != "":
|
||||
has_non_empty_field = True
|
||||
break
|
||||
if has_non_empty_field:
|
||||
filters[str(item["id"])] = []
|
||||
for dkey in jsontype_extend:
|
||||
if dkey in dy and jsontype_extend[dkey].strip() != "":
|
||||
values = jsontype_extend[dkey].split(",")
|
||||
value_array = [
|
||||
{"n": value.strip(), "v": value.strip()}
|
||||
for value in values
|
||||
if value.strip() != ""
|
||||
]
|
||||
filters[str(item["id"])].append(
|
||||
{"key": dkey, "name": dy[dkey], "value": value_array}
|
||||
)
|
||||
result = {}
|
||||
result["class"] = classes
|
||||
result["filters"] = filters
|
||||
return result
|
||||
|
||||
def homeVideoContent(self):
|
||||
data = self.fetch(f"{self.host}/api/ex/v3/security/tag/list", headers=self.headers).json()["data"]
|
||||
data1 = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)
|
||||
list = []
|
||||
for item in data1[0]['carousels']:
|
||||
id = item['link'].split("id=")[1]
|
||||
list.append({
|
||||
"vod_id": id,
|
||||
'vod_name': item.get("title"),
|
||||
'vod_pic': item.get("cover"),
|
||||
'vod_remarks': item.get("sort"),
|
||||
})
|
||||
result = {"list": list}
|
||||
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):
|
||||
try:
|
||||
url = self.fetch('https://www.shijue.pro/token.txt', headers=self.headers).json()['domain']
|
||||
return url
|
||||
except:
|
||||
return "http://118.25.18.217:6632"
|
||||
|
||||
headers = {
|
||||
'User-Agent': 'okhttp/3.12.1',
|
||||
'Content-Type': 'application/json;'
|
||||
}
|
||||
key = ['TFLYWVJ5EG5YB1PLZLVVMGVLBGRIDCSW', 'nj6E5K4yYYT5W4ScJ3J3rJ2zrzcJkpTk']
|
||||
|
||||
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
|
||||
1
小米/js/guoguo.js
Normal file
1
小米/js/guoguo.js
Normal file
File diff suppressed because one or more lines are too long
1
小米/js/tm.js
Normal file
1
小米/js/tm.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -277,6 +277,22 @@ http://[2409:8087:3c02:21:0:1:0:100a]:6410/shandong_cabletv.live.zte.com////CHAN
|
||||
http://[2409:8087:3c02:21:0:1:0:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002010/index.m3u8?IASHttpSessionId=
|
||||
#EXTINF:-1 tvg-name="第一财经" tvg-logo="https://live.fanmingming.com/tv/上海第一财经.png" group-title="上海频道",第一财经
|
||||
http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000004/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000004&IASHttpSessionId=OTT19019320240419154124000281
|
||||
#EXTINF:-1 tvg-name="浙江公共新闻" tvg-logo="https://live.fanmingming.com/tv/浙江新闻.png" group-title="浙江频道",浙江新闻
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="浙江国际" tvg-logo="https://live.fanmingming.com/tv/浙江国际.png" group-title="浙江频道",浙江国际
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://live.fanmingming.com/tv/浙江少儿.png" group-title="浙江频道",浙江少儿
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="浙江教科影视" tvg-logo="https://live.fanmingming.com/tv/浙江教科影视.png" group-title="浙江频道",浙江教科
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://live.fanmingming.com/tv/之江纪录.png" group-title="浙江频道",之江纪录
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="浙江民生休闲" tvg-logo="https://live.fanmingming.com/tv/浙江民生休闲.png" group-title="浙江频道",浙江民生
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="浙江经视" tvg-logo="https://live.fanmingming.com/tv/浙江经济生活.png" group-title="浙江频道",浙江经济
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="浙江钱江都市" tvg-logo="https://live.fanmingming.com/tv/钱江都市.png" group-title="浙江频道",浙江钱江
|
||||
https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
|
||||
#EXTINF:-1 tvg-name="内蒙古综合" tvg-logo="https://live.fanmingming.com/tv/内蒙古新闻综合.png" group-title="内蒙频道",内蒙新闻
|
||||
https://livestream-bt.nmtv.cn/nmtv/2316general.m3u8?txSecret=b4373417a82ed64e52b0982a66da8df2&txTime=771E8800
|
||||
#EXTINF:-1 tvg-name="内蒙古经济生活" tvg-logo="https://live.fanmingming.com/tv/内蒙古经济生活.png" group-title="内蒙频道",内蒙经济
|
||||
|
||||
1998
小米/lives/平台直播.txt
1998
小米/lives/平台直播.txt
File diff suppressed because it is too large
Load Diff
BIN
小米/spider.jar
BIN
小米/spider.jar
Binary file not shown.
Reference in New Issue
Block a user