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.
Ru/c/PY1/uaa有声.py

188 lines
6.1 KiB

# 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, ""]