mirror of
https://github.com/yuanwangokk-1/TV-BOX.git
synced 2025-10-24 23:11:21 +00:00
132 lines
No EOL
4.8 KiB
Python
132 lines
No EOL
4.8 KiB
Python
# coding=utf-8
|
||
# !/usr/bin/python
|
||
import sys
|
||
import requests
|
||
sys.path.append('..')
|
||
from base.spider import Spider
|
||
|
||
class Spider(Spider):
|
||
|
||
def init(self, extend="{}"):
|
||
self.host='https://zh.stripchat.com/'
|
||
self.headers = {
|
||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0'
|
||
}
|
||
|
||
def getName(self):
|
||
pass
|
||
|
||
def isVideoFormat(self, url):
|
||
pass
|
||
|
||
def manualVideoCheck(self):
|
||
pass
|
||
|
||
def destroy(self):
|
||
pass
|
||
|
||
def homeContent(self, filter):
|
||
result = {}
|
||
classes = [{'type_name': '女主播', 'type_id': 'girls'}, {'type_name': '情侣', 'type_id': 'couples'}, {'type_name': '男主播', 'type_id': 'men'}, {'type_name': '跨性别', 'type_id': 'trans'}]
|
||
filters = {}
|
||
value = [{'n': '中国', 'v': 'tagLanguageChinese'}, {'n': '亚洲', 'v': 'ethnicityAsian'}, {'n': '白人', 'v': 'ethnicityWhite'}, {'n': '拉丁', 'v': 'ethnicityLatino'}, {'n': '混血', 'v': 'ethnicityMultiracial'}, {'n': '印度', 'v': 'ethnicityIndian'}, {'n': '阿拉伯', 'v': 'ethnicityMiddleEastern'}, {'n': '黑人', 'v': 'ethnicityEbony'}]
|
||
value_gay = [{'n': '情侣', 'v': 'sexGayCouples'}, {'n': '直男', 'v': 'orientationStraight'}]
|
||
for tid in ['girls', 'couples', 'men', 'trans']:
|
||
c_value = value[:]
|
||
if tid == 'men':
|
||
c_value += value_gay
|
||
filters[tid] = [{'key': 'tag', 'value': c_value}]
|
||
result['class'] = classes
|
||
result['filters'] = filters
|
||
return result
|
||
|
||
def homeVideoContent(self):
|
||
pass
|
||
|
||
def categoryContent(self, tid, pg, filter, extend):
|
||
limit = 60
|
||
offset = limit * (int(pg) - 1)
|
||
domain = f"{self.host}api/front/models?improveTs=false&removeShows=false&limit={limit}&offset={offset}&primaryTag={tid}&sortBy=viewersRating&rcmGrp=A&rbCnGr=true&prxCnGr=false&nic=false"
|
||
if 'tag' in extend:
|
||
domain += "&filterGroupTags=%5B%5B%22" + extend['tag'] + "%22%5D%5D"
|
||
rsp = requests.get(domain, headers=self.headers).json()
|
||
vodList = rsp['models']
|
||
videos = []
|
||
for vod in vodList:
|
||
id = str(vod['id'])
|
||
title = str(vod['username']).strip()
|
||
stamp = vod['snapshotTimestamp']
|
||
videos.append({
|
||
"vod_id": title,
|
||
"vod_name": title,
|
||
"vod_pic": f"https://img.doppiocdn.net/thumbs/{stamp}/{id}",
|
||
"vod_remarks": "购票表演中" if vod['groupShowType'] else ""
|
||
})
|
||
total = int(rsp['filteredCount'])
|
||
result = {}
|
||
result['list'] = videos
|
||
result['page'] = pg
|
||
result['pagecount'] = (total + limit - 1) // limit
|
||
result['limit'] = limit
|
||
result['total'] = total
|
||
return result
|
||
|
||
def detailContent(self, array):
|
||
username = array[0]
|
||
domain = f"{self.host}api/front/v2/models/username/{username}/cam"
|
||
rsp = requests.get(domain, headers=self.headers).json()
|
||
info = rsp['cam']
|
||
user = rsp['user']['user']
|
||
id = str(user['id'])
|
||
vod = {
|
||
"vod_id": id,
|
||
"vod_name": str(info['topic']).strip(),
|
||
"vod_pic": str(user['avatarUrl']),
|
||
"vod_director": username,
|
||
"vod_area": str(user['country']),
|
||
'vod_play_from': '老僧酿酒',
|
||
'vod_play_url': f"{id}${id}"
|
||
}
|
||
result = {
|
||
'list': [
|
||
vod
|
||
]
|
||
}
|
||
return result
|
||
|
||
def searchContent(self, key, quick, pg="1"):
|
||
pass
|
||
|
||
def playerContent(self, flag, id, vipFlags):
|
||
domain = f"https://edge-hls.doppiocdn.net/hls/{id}/master/{id}_auto.m3u8?playlistType=lowLatency"
|
||
rsp = requests.get(domain, headers=self.headers).text
|
||
lines = rsp.strip().split('\n')
|
||
psch = ''
|
||
pkey = ''
|
||
url = []
|
||
for i, line in enumerate(lines):
|
||
if line.startswith('#EXT-X-MOUFLON:'):
|
||
parts = line.split(':')
|
||
if len(parts) >= 4:
|
||
psch = parts[2]
|
||
pkey = parts[3]
|
||
if '#EXT-X-STREAM-INF' in line:
|
||
name_start = line.find('NAME="') + 6
|
||
name_end = line.find('"', name_start)
|
||
qn = line[name_start:name_end]
|
||
# URL在下一行
|
||
url_base = lines[i + 1]
|
||
# 组合最终的URL,并加上psch和pkey参数
|
||
full_url = f"{url_base}&psch={psch}&pkey={pkey}"
|
||
# 将画质和URL添加到列表中
|
||
url.append(qn)
|
||
url.append(full_url)
|
||
result = {}
|
||
result["url"] = url
|
||
result["parse"] = '0'
|
||
result["contentType"] = ''
|
||
result["header"] = self.headers
|
||
return result
|
||
|
||
def localProxy(self, param):
|
||
pass |