mirror of
https://github.com/qist/tvbox.git
synced 2026-04-21 15:02:44 +00:00
update XYQ
This commit is contained in:
222
py/py_xmly.py
Normal file
222
py/py_xmly.py
Normal file
@@ -0,0 +1,222 @@
|
||||
#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, ""]
|
||||
Reference in New Issue
Block a user