tvbox804/py/plugin/py_xmly.py

222 lines
6.2 KiB
Python
Raw Normal View History

#coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import math
import json
from requests import session, utils
class Spider(Spider):
def getName(self):
return "喜马拉雅"
def init(self,extend=""):
pass
def isVideoFormat(self,url):
pass
def manualVideoCheck(self):
pass
def homeContent(self,filter):
result = {}
cateManual = {
"小说": "7",
"儿童": "11",
"评书": "10",
"娱乐": "13",
"悬疑": "14",
"人文": "17",
"国学": "18",
"头条": "24",
"音乐": "19",
"历史": "16",
"情感": "20",
"健康": "22",
"生活": "21",
"影视": "15",
"英语": "29",
"科技": "28",
"体育": "25",
"汽车": "23",
"广播剧": "8",
"小语种": "30",
"教育考试": "32",
"少儿素养": "12",
"商业管理": "27",
"个人提升": "31",
"投资理财": "26",
"相声小品": "9",
}
classes = []
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
if (filter):
result['filters'] = self.config['filter']
return result
def homeVideoContent(self):
result = {}
return result
def categoryContent(self,tid,pg,filter,extend):
result = {}
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54",
"Referer": "https://www.ximalaya.com/channel/{}/".format(tid)
}
url = 'https://www.ximalaya.com/revision/metadata/v2/channel/albums?pageNum={0}&pageSize=50&sort=1&metadata=&groupId={1}'.format(pg, tid)
rsp = self.fetch(url,headers=header)
jo = json.loads(rsp.text)
videos = []
numvL = len(jo['data']['albums'])
pgc = math.ceil(numvL/15)
for a in jo['data']['albums']:
aid = a['albumId']
img = 'http://imagev2.xmcdn.com/{0}'.format(a['albumCoverPath'])
name = a['albumTitle']
if a['vipType'] == 1:
remark = 'VIP'
else:
remark = ''
videos.append({
"vod_id": aid,
"vod_name": name,
"vod_pic": img,
"vod_remarks": remark
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = pgc
result['limit'] = numvL
result['total'] = numvL
return result
def detailContent(self,array):
aid = array[0]
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54",
"Referer": "https://www.ximalaya.com/album/{}/".format(aid)
}
pg = 1
url = 'https://www.ximalaya.com/revision/album/v1/getTracksList?albumId={}&pageNum={}&pageSize=30'.format(aid, pg)
rsp = self.fetch(url, headers=header)
jo = json.loads(rsp.text)
items = jo['data']['tracks']
numjo = jo['data']['trackTotalCount']
while len(items) < numjo:
pg = pg + 1
url = 'https://www.ximalaya.com/revision/album/v1/getTracksList?albumId={}&pageNum={}&pageSize=30'.format(aid, pg)
rsp = self.fetch(url, headers=header)
jo = json.loads(rsp.text)
items.extend(jo['data']['tracks'])
playUrl = ''
for item in items:
dir = item['anchorName'].strip()
act = item['anchorName'].strip()
title = item['albumTitle']
pic = 'http://imagev2.xmcdn.com/{0}'.format(item['albumCoverPath'])
year = item['createDateFormat'].split('-')[0]
cont = item['albumTitle']
name = item['title'].strip()
purl = item['trackId']
playUrl = playUrl + '{0}${1}#'.format(name, purl)
vod = {
"vod_id": aid,
"vod_name": title,
"vod_pic": pic,
"type_name": '',
"vod_year": year,
"vod_area": '',
"vod_remarks": '',
"vod_actor": act,
"vod_director": dir,
"vod_content": cont
}
vod['vod_play_from'] = '喜马拉雅'
vod['vod_play_url'] = playUrl
result = {
'list': [
vod
]
}
return result
def searchContent(self,key,quick):
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54",
"Referer": "https://www.ximalaya.com/"
}
url = 'https://www.ximalaya.com/revision/search/main?core=all&kw={}&spellchecker=true&device=iPhone&live=true'.format(key)
rsp = self.fetch(url, headers=header)
jo = json.loads(rsp.text)
items = jo['data']['album']['docs']
pg = 1
while pg < jo['data']['album']['totalPage']:
pg = pg + 1
url = 'https://www.ximalaya.com/revision/search/main?core=album&kw={0}&page={1}&spellchecker=true&rows=20&condition=relation&device=iPhone&fq=&paidFilter=false'.format(key, pg)
rsp = self.fetch(url, headers=header)
jo = json.loads(rsp.text)
items.extend(jo['data']['album']['docs'])
videos = []
for item in items:
name = item['title']
pic = item['coverPath']
if item['vipType'] == 1:
mark = 'VIP'
else:
mark = ''
sid = item['albumId']
videos.append({
"vod_id":sid,
"vod_name":name,
"vod_pic":pic,
"vod_remarks":mark
})
result = {
'list': videos
}
return result
def playerContent(self,flag,id,vipFlags):
result = {}
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54",
"Referer": 'https://www.ximalaya.com/sound/{0}/'.format(id)
}
#这里是游客cookie有vip的填入自己的会员cookie
cookies_str = '_xmLog=h5&48be63f9-2a8a-48e1-b923-d29486aac356&process.env.sdkVersion; xm-page-viewid=ximalaya-web; x_xmly_traffic=utm_source%253A%2526utm_medium%253A%2526utm_campaign%253A%2526utm_content%253A%2526utm_term%253A%2526utm_from%253A'
cookies_dic = dict([co.strip().split('=') for co in cookies_str.split(';')])
rsp = session()
cookies_jar = utils.cookiejar_from_dict(cookies_dic)
rsp.cookie = cookies_jar
url = 'https://www.ximalaya.com/revision/play/v1/audio?id={0}&ptype=1'.format(id)
rsp = self.fetch(url, cookies=rsp.cookie, headers=header)
jo = json.loads(rsp.text)
purl = jo['data']['src']
result["parse"] = 0
result["playUrl"] = ''
result["url"] = purl
result["header"] = ''
return result
config = {
"player": {},
"filter": {}
}
header = {}
def localProxy(self,param):
action = {
'url':'',
'header':'',
'param':'',
'type':'string',
'after':''
}
return [200, "video/MP2T", action, ""]