Files
a/PY1/uaa有声.py
2026-03-24 18:40:17 +08:00

188 lines
6.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import json
import time
import urllib.parse
import re
import requests
from lxml import etree
import base64
class Spider(Spider):
def getName(self):
return "UAA[听]"
def init(self, extend):
pass
def homeContent(self, filter):
result = {}
cateManual = {
"有声小说": "有声小说",
"淫词艳曲": "淫词艳曲",
"激情骚麦": "激情骚麦",
"寸止训练": "寸止训练",
"ASMR": "ASMR"
}
classes = []
for key in cateManual:
classes.append({
'type_name': key,
'type_id': cateManual[key]
})
result['class'] = classes
return result
def homeVideoContent(self):
result = {}
return result
def categoryContent(self, tid, pg, filter, extend):
result = {}
url = 'https://www.uaa001.com/api/audio/app/audio/search?category={0}&orderType=1&page={1}&searchType=1&size=42'.format(tid, pg)
rsp = self.fetch(url)
content = rsp.text
videos = []
data = json.loads(content)
for item in data['model']['data']:
videos.append({
"vod_id": item['id'],
"vod_name": item['title'],
"vod_pic": item['coverUrl'],
"vod_remarks": item['categories']
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 42
result['total'] = 999999
return result
def detailContent(self, array):
tid = array[0]
url = 'https://www.uaa001.com/api/audio/app/audio/intro?id={0}'.format(tid)
rsp = self.fetch(url)
content = rsp.text
data = json.loads(content)
model = data['model']
# 构建播放列表
play_list = []
if 'chapters' in model and model['chapters']:
for chapter in model['chapters']:
chapter_id = chapter.get('id', '')
chapter_title = chapter.get('title', '{}'.format(chapter.get('order', 1)))
# 获取章节播放链接
chapter_url = self.getChapterUrl(chapter_id)
if chapter_url:
play_list.append('{}${}'.format(chapter_title, chapter_url))
# 如果没有章节信息,使用默认播放链接
if not play_list and 'latestReadChapterUrl' in model:
play_list.append('第1集${}'.format(model['latestReadChapterUrl']))
play_url = '#'.join(play_list) if play_list else ''
# 构建详细信息
vod_actor = model.get('author', '未知') # CV信息
vod_area = model.get('categories', '') # 分类信息
# 构建备注信息,包含收听量和收藏量
remarks_parts = []
if 'playCount' in model:
play_count = self.format_count(model['playCount'])
remarks_parts.append(f'收听:{play_count}')
if 'collectCount' in model:
collect_count = self.format_count(model['collectCount'])
remarks_parts.append(f'收藏:{collect_count}')
vod_remarks = ' | '.join(remarks_parts) if remarks_parts else model.get('updateState', '')
vod = {
"vod_id": tid,
"vod_name": model['title'],
"vod_pic": model['coverUrl'],
"vod_content": model.get('intro', ''),
"vod_actor": vod_actor, # 显示CV信息
"vod_area": vod_area, # 显示分类信息
"vod_remarks": vod_remarks, # 显示收听量和收藏量
"vod_play_from": "UAA",
"vod_play_url": play_url
}
result = {
'list': [vod]
}
return result
def format_count(self, count):
"""格式化数字显示如18200显示为18.2K"""
try:
count = int(count)
if count >= 10000:
return f"{count/10000:.1f}"
elif count >= 1000:
return f"{count/1000:.1f}K"
else:
return str(count)
except:
return str(count)
def getChapterUrl(self, chapter_id):
"""获取章节播放链接"""
if not chapter_id:
return ''
try:
url = 'https://www.uaa001.com/api/audio/app/audio/chapter?id={}'.format(chapter_id)
rsp = self.fetch(url)
data = json.loads(rsp.text)
if data.get('model') and data['model'].get('chapterUrl'):
return data['model']['chapterUrl']
except:
pass
return ''
def searchContent(self, key, quick, page='1'):
result = {}
url = 'https://www.uaa001.com/api/audio/app/audio/search?category=&keyword={0}&orderType=1&orderType=1&origin=&page=1&searchType=1&size=32&tag='.format(urllib.parse.quote(key))
rsp = self.fetch(url)
content = rsp.text
videos = []
data = json.loads(content)
for item in data['model']['data']:
videos.append({
"vod_id": item['id'],
"vod_name": item['title'],
"vod_pic": item['coverUrl'],
"vod_remarks": item['categories']
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
# 直接从播放链接播放,不需要额外解析
result["parse"] = 0
result["playUrl"] = ''
result["url"] = id
result["header"] = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Referer": "https://www.uaa001.com/"
}
return result
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def localProxy(self, param):
action = {}
return [200, "video/MP2T", action, ""]