forked from tfornik/RussiaTools
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
8.2 KiB
250 lines
8.2 KiB
import requests
|
|
from bs4 import BeautifulSoup
|
|
import re
|
|
from base.spider import Spider
|
|
import sys
|
|
import json
|
|
import base64
|
|
import urllib.parse
|
|
|
|
sys.path.append('..')
|
|
|
|
murl = "https://8145.3qxm.com/web/index.html"
|
|
headerx = {
|
|
'User-Agent': "Mozilla/5.0 (Linux; Android 13; M2102J2SC Build/TKQ1.221114.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.3 Mobile Safari/537.36",
|
|
'Accept-Encoding': "gzip, deflate, br, zstd"
|
|
}
|
|
response = requests.get(murl, allow_redirects=True)
|
|
xurl = response.url
|
|
nurl = xurl + '/web/abcdefg.ashx'
|
|
pm = ''
|
|
|
|
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 homeContent(self, filter):
|
|
result = {}
|
|
result = {"class": [{"type_id": "1003", "type_name": "亚洲无码"},
|
|
{"type_id": "3022", "type_name": "欧美无码"},
|
|
{"type_id": "3026", "type_name": "中文字幕"},
|
|
{"type_id": "3025", "type_name": "经典三级"},
|
|
{"type_id": "5", "type_name": "国产主播"},
|
|
{"type_id": "134", "type_name": "韩国主播"},
|
|
{"type_id": "3137", "type_name": "ASMR"},
|
|
{"type_id": "3138", "type_name": "恐怖色情"},
|
|
{"type_id": "131", "type_name": "网红视频"},
|
|
{"type_id": "132", "type_name": "国产视频"},
|
|
{"type_id": "3023", "type_name": "人妖伪娘"},
|
|
{"type_id": "130", "type_name": "动漫卡通"},
|
|
{"type_id": "3088", "type_name": "华人原创"},
|
|
{"type_id": "3135", "type_name": "JVID"},
|
|
{"type_id": "3136", "type_name": "SWAG"},
|
|
{"type_id": "3134", "type_name": "明星换脸"}]}
|
|
return result
|
|
|
|
def homeVideoContent(self):
|
|
videos = []
|
|
try:
|
|
payload = {
|
|
'action': "getindexdata",
|
|
't': "1762753963537691",
|
|
's': "5ad87a586f5aae9c2ca4f913d45f8958"}
|
|
detail = requests.post(url=nurl, data=payload, headers=headerx)
|
|
detail.encoding = "utf-8"
|
|
res = detail.json()
|
|
video_list = res.get("videos", [])
|
|
|
|
for video in video_list:
|
|
name = video.get("title", "")
|
|
id = video.get("id", "")
|
|
pic = video.get("coverimg", "")
|
|
remarks = video.get("updatedate", "")
|
|
video = {
|
|
"vod_id": id,
|
|
"vod_name": name,
|
|
"vod_pic": pic,
|
|
"vod_remarks": remarks
|
|
}
|
|
videos.append(video)
|
|
|
|
result = {'list': videos}
|
|
return result
|
|
except:
|
|
pass
|
|
|
|
def categoryContent(self, cid, pg, filter, ext):
|
|
result = {}
|
|
videos = []
|
|
if pg:
|
|
page = int(pg)
|
|
else:
|
|
page = 1
|
|
|
|
if page == '1':
|
|
payload1 = {
|
|
'action': "getvideos",
|
|
'vtype': {cid},
|
|
'pageindex': "1",
|
|
'pagesize': "12",
|
|
'tags': "全部",
|
|
'sortindex': "1",
|
|
't': "176275570014518",
|
|
's': "ff4218e4cafd552c4d0c93eb935c14f1"}
|
|
else:
|
|
payload1 = {
|
|
'action': "getvideos",
|
|
'vtype': {cid},
|
|
'pageindex': {str(page)},
|
|
'pagesize': "12",
|
|
'tags': "全部",
|
|
'sortindex': "1",
|
|
't': "176275570014518",
|
|
's': "ff4218e4cafd552c4d0c93eb935c14f1"}
|
|
try:
|
|
detail = requests.post(url=nurl, data=payload1, headers=headerx)
|
|
detail.encoding = "utf-8"
|
|
res = detail.json()
|
|
video_list = res.get("videos", [])
|
|
|
|
for video in video_list:
|
|
name = video.get("title", "")
|
|
id = video.get("id", "")
|
|
pic = video.get("coverimg", "")
|
|
remarks = video.get("updatedate", "")
|
|
video = {
|
|
"vod_id": id,
|
|
"vod_name": name,
|
|
"vod_pic": pic,
|
|
"vod_remarks": remarks
|
|
}
|
|
videos.append(video)
|
|
|
|
except:
|
|
pass
|
|
result = {'list': videos}
|
|
result['page'] = pg
|
|
result['pagecount'] = 99
|
|
result['limit'] = 90
|
|
result['total'] = 99
|
|
return result
|
|
|
|
def detailContent(self, ids):
|
|
did = ids[0]
|
|
result = {}
|
|
videos = []
|
|
playurl = ''
|
|
payload2 = {
|
|
'action': "getvideo",
|
|
'vid': did,
|
|
't': "1762756475175265",
|
|
's': "656d5b40c2122f86bc35895dc58fd113"}
|
|
res1 = requests.post(url=nurl, data=payload2, headers=headerx)
|
|
res1.encoding = "utf-8"
|
|
res = res1.json()
|
|
node = res.get("data", {}).get("Table", [{}])[0]
|
|
|
|
vod_id = node.get("id", "")
|
|
vod_name = node.get("title", "")
|
|
vod_pic = node.get("coverimg", "")
|
|
vod_remarks = node.get("updatedate", "")
|
|
vod_content = node.get("title", "")
|
|
|
|
playFrom = []
|
|
playList = []
|
|
if node.get("vurl"):
|
|
base_url1 = res.get("xldata", {}).get("value", "")
|
|
base_url2 = res.get("xldata", {}).get("value1", "")
|
|
if base_url1:
|
|
full_vurl1 = base_url1 + node.get("vurl", "")
|
|
playFrom.append("播放源1")
|
|
playList.append(full_vurl1)
|
|
if base_url2:
|
|
full_vurl2 = base_url2 + node.get("vurl", "")
|
|
playFrom.append("播放源2")
|
|
playList.append(full_vurl2)
|
|
|
|
videos.append({
|
|
"vod_id": vod_id,
|
|
"vod_name": vod_name,
|
|
"vod_pic": vod_pic,
|
|
"vod_remarks": vod_remarks,
|
|
"vod_content": vod_content,
|
|
"vod_play_from": "$$$".join(playFrom),
|
|
"vod_play_url": "$$$".join(playList)
|
|
})
|
|
|
|
result['list'] = videos
|
|
return result
|
|
|
|
def playerContent(self, flag, id, vipFlags):
|
|
parts = id.split("http")
|
|
xiutan = 1
|
|
if xiutan == 1:
|
|
if len(parts) > 1:
|
|
before_https, after_https = parts[0], 'http' + parts[1]
|
|
result = {}
|
|
result["parse"] = xiutan
|
|
result["playUrl"] = ''
|
|
result["url"] = after_https
|
|
result["header"] = headerx
|
|
return result
|
|
|
|
def searchContentPage(self, key, quick, page):
|
|
result = {}
|
|
videos = []
|
|
payload3 = {
|
|
'action': "search",
|
|
'p': {key},
|
|
'pageindex': {str(page)},
|
|
'pagesize': "12",
|
|
'channelid': "0",
|
|
't': "1762756927087982",
|
|
's': "2392bd117b4e6e35b5ec1fa9bc380b6f"}
|
|
detail = requests.post(url=nurl, data=payload3, headers=headerx)
|
|
detail.encoding = "utf-8"
|
|
res = detail.json()
|
|
video_list = res.get("data", [])
|
|
for video in video_list:
|
|
name = video.get("title", "")
|
|
id = video.get("id", "")
|
|
pic = video.get("imgurl", "")
|
|
remarks = video.get("updatedate", "")
|
|
video = {
|
|
"vod_id": id,
|
|
"vod_name": name,
|
|
"vod_pic": pic,
|
|
"vod_remarks": remarks
|
|
}
|
|
videos.append(video)
|
|
|
|
result['list'] = videos
|
|
result['page'] = page
|
|
result['pagecount'] = 60
|
|
result['limit'] = 30
|
|
result['total'] = 999999
|
|
return result
|
|
|
|
def searchContent(self, key, quick):
|
|
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 |