diff --git a/py/plugin/py_kunyu77.json b/py/plugin/py_kunyu77.json new file mode 100644 index 0000000..abbedc7 --- /dev/null +++ b/py/plugin/py_kunyu77.json @@ -0,0 +1,175 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json + +class Spider(Spider): + def getName(self): + return "77" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def homeContent(self,filter): + result = {} + url = 'http://api.kunyu77.com/api.php/provide/filter' + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + classes = [] + jData = jo['data'] + for cKey in jData.keys(): + classes.append({ + 'type_name':jData[cKey][0]['cat'], + 'type_id':cKey + }) + result['class'] = classes + if(filter): + result['filters'] = self.config['filter'] + return result + def homeVideoContent(self): + url = 'http://api.kunyu77.com/api.php/provide/homeBlock?type_id=0' + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + blockList = jo['data']['blocks'] + videos = [] + for block in blockList: + vodList = block['contents'] + for vod in vodList: + videos.append({ + "vod_id":vod['id'], + "vod_name":vod['title'], + "vod_pic":vod['videoCover'], + "vod_remarks":vod['msg'] + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if 'type_id' not in extend.keys(): + extend['type_id'] = tid + extend['pagenum'] = pg + filterParams = ["type_id", "pagenum"] + params = ["", ""] + for idx in range(len(filterParams)): + fp = filterParams[idx] + if fp in extend.keys(): + params[idx] = '&'+filterParams[idx]+'='+extend[fp] + suffix = ''.join(params) + url = 'http://api.kunyu77.com/api.php/provide/searchFilter?pagesize=24{0}'.format(suffix) + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + vodList = jo['data']['result'] + videos = [] + for vod in vodList: + videos.append({ + "vod_id":vod['id'], + "vod_name":vod['title'], + "vod_pic":vod['videoCover'], + "vod_remarks":vod['msg'] + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self,array): + tid = array[0] + url = 'http://api.kunyu77.com/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids={0}'.format(tid) + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + node = jo['data'] + vod = { + "vod_id":node['id'], + "vod_name":node['videoName'], + "vod_pic":node['videoCover'], + "type_name":node['subCategory'], + "vod_year":node['year'], + "vod_area":node['area'], + "vod_remarks":node['msg'], + "vod_actor":node['actor'], + "vod_director":node['director'], + "vod_content":node['brief'].strip() + } + listUrl = 'http://api.kunyu77.com/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids={0}'.format(tid) + listRsp = self.fetch(listUrl,headers=self.header) + listJo = json.loads(listRsp.text) + playMap = {} + episodes = listJo['data']['episodes'] + for ep in episodes: + playurls = ep['playurls'] + for playurl in playurls: + source = playurl['playfrom'] + if source not in playMap.keys(): + playMap[source] = [] + playMap[source].append(playurl['title'].strip() + '$' + playurl['playurl']) + + playFrom = [] + playList = [] + for key in playMap.keys(): + playFrom.append(key) + playList.append('#'.join(playMap[key])) + + vod_play_from = '$$$' + vod_play_from = vod_play_from.join(playFrom) + vod_play_url = '$$$' + vod_play_url = vod_play_url.join(playList) + vod['vod_play_from'] = vod_play_from + vod['vod_play_url'] = vod_play_url + + result = { + 'list':[ + vod + ] + } + return result + + def searchContent(self,key,quick): + url = 'http://api.kunyu77.com/api.php/provide/searchVideo?searchName={0}'.format(key) + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + vodList = jo['data'] + videos = [] + for vod in vodList: + videos.append({ + "vod_id":vod['id'], + "vod_name":vod['videoName'], + "vod_pic":vod['videoCover'], + "vod_remarks":vod['msg'] + }) + result = { + 'list':videos + } + return result + + config = { + "player": {}, + "filter": {} + } + header = { + "User-Agent":"Dalvik/2.1.0" + } + def playerContent(self,flag,id,vipFlags): + result = {} + url = 'http://api.kunyu77.com/api.php/provide/parserUrl?url={0}'.format(id) + jo = self.fetch(url,headers=self.header).json() + result = { + 'parse':0, + 'jx':0, + 'playUrl':'', + 'url':id, + 'header':'' + } + if flag in vipFlags: + result['parse'] = 1 + result['jx'] = 1 + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_lezhutv.json b/py/plugin/py_lezhutv.json new file mode 100644 index 0000000..dff72e0 --- /dev/null +++ b/py/plugin/py_lezhutv.json @@ -0,0 +1,238 @@ +# coding=utf-8 +# !/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import base64 +import hashlib + + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "LeZhuTV" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "1", + "连续剧": "2", + "动漫": "4", + "综艺": "3", + "韩剧": "14", + "美剧": "15" + } + 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): + rsp = self.fetch("http://www.lezhutv.com") + root = self.html(rsp.text) + aList = root.xpath("//ul[@class='tbox_m2']/li") + videos = [] + for a in aList: + name = a.xpath('.//@title')[0] + pic = a.xpath('.//@data-original')[0] + mark = a.xpath(".//span/text()")[0] + sid = a.xpath(".//@href")[0] + sid = self.regStr(sid, "/detail/(\\d+).html") + videos.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": mark + }) + result = { + 'list': videos + } + return result + + def categoryContent(self, tid, pg, filter, extend): + result = {} + + ext = extend.get("by","") + url = 'http://www.lezhutv.com/list/{0}_{1}_desc_{2}_0_0___.html'.format(tid,pg,ext) + rsp = self.fetch(url) + root = self.html(rsp.text) + aList = root.xpath("//ul[@class='tbox_m2']/li") + videos = [] + for a in aList: + name = a.xpath('.//@title')[0] + pic = a.xpath('.//@data-original')[0] + mark = a.xpath(".//span/text()")[0] + sid = a.xpath(".//@href")[0] + sid = self.regStr(sid, "/detail/(\\d+).html") + videos.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": mark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, array): + tid = array[0] + url = 'http://www.lezhutv.com/detail/{0}.html'.format(tid) + rsp = self.fetch(url) + root = self.html(rsp.text) + node = root.xpath(".//div[@class='dbox']")[0] + nodes = root.xpath(".//div[@class='tbox2']")[0] + pic = node.xpath(".//div/@data-original")[0] + title = node.xpath('.//h4/text()')[0] + detail = nodes.xpath(".//div[@class='tbox_js']/text()")[0] + yac = node.xpath(".//p[@class='yac']/text()")[0] + yac = yac.split('/') + yacs = yac[0].strip() + type_name = yac[1].strip() + actor = node.xpath(".//p[@class='act']/text()")[0] + director = node.xpath(".//p[@class='dir']/text()")[0] + + vod = { + "vod_id": tid, + "vod_name": title, + "vod_pic": pic, + "type_name": type_name, + "vod_year": yacs, + "vod_area": "", + "vod_remarks": "", + "vod_actor": actor, + "vod_director": director, + "vod_content": detail + } + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath(".//div[@class='tbox2 tabs']/div/h3/text()") + i=1 + for v in vodHeader: + playFrom.append("线路" + str(i)) + i = i+1 + vod_play_from = vod_play_from.join(playFrom) + vod_play_url = '$$$' + playList = [] + vodList = root.xpath("//div[@class='tbox2 tabs']") + + for vl in vodList: + vodItems = [] + aList = vl.xpath(".//ul/li/a") + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('./text()')[0] + tId = self.regStr(href, '/play/(\\S+).html') + vodItems.append(name + "$" + tId) + joinStr = '#' + joinStr = joinStr.join(vodItems) + playList.append(joinStr) + vod_play_url = vod_play_url.join(playList) + vod['vod_play_from'] = vod_play_from + vod['vod_play_url'] = vod_play_url + + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + url = 'http://www.lezhutv.com/search-pg-1-wd-{0}.html'.format(key) + rsp = self.fetch(url) + root = self.html(rsp.text) + seaArray = root.xpath("//ul[@class='tbox_m']/li") + seaList = [] + for vod in seaArray: + name = vod.xpath('.//@title')[0] + pic = vod.xpath('.//@data-original')[0] + mark = vod.xpath(".//span/text()")[0] + sid = vod.xpath(".//@href")[0] + sid = self.regStr(sid, "/detail/(\\d+).html") + seaList.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": mark + }) + result = { + 'list': seaList + } + return result + + config = { + "player":{}, + "filter":{"1":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"score"},{"n":"评分","v":"hits"}]}],"2":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"score"},{"n":"评分","v":"hits"}]}],"3":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"score"},{"n":"评分","v":"hits"}]}],"4":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"score"},{"n":"评分","v":"hits"}]}],"14":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"score"},{"n":"评分","v":"hits"}]}],"15":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"score"},{"n":"评分","v":"hits"}]}]} + } + header = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36" + } + + def get_md5(self,value): + b64 = base64.b64encode((base64.b64encode(value.encode()).decode() + "NTY2").encode()).decode() + md5 = hashlib.md5(b64.encode()).hexdigest() + return "".join(char if char.isdigit() else "zyxwvutsrqponmlkjihgfedcba"["abcdefghijklmnopqrstuvwxyz".find(char)] for char in md5) + + def playerContent(self, flag, id, vipFlags): + result = {} + url = 'http://www.lezhutv.com/play/{0}.html'.format(id) + rsp = self.fetch(url) + root = self.html(rsp.text) + scripts = root.xpath("//script/text()") + scripts = scripts[1].replace('\n', '') + nid = self.regStr(scripts, 'view_path = \'(.*?)\';') + + md5url = 'http://www.lezhutv.com/hls2/index.php?url={0}'.format(nid) + rsp = self.fetch(md5url) + root = self.html(rsp.text) + value = root.xpath(".//input[@id='hdMd5']/@value") + value = ''.join(value) + md5s = self.get_md5(str(value)) + data = { + "id": nid, + "type": "vid", + "siteuser": "", + "md5": md5s, + "referer": url, + "hd": "", + "lg": "" + } + payUrl = 'http://www.lezhutv.com/hls2/url.php' + parseRsp = self.post(payUrl,data,headers=self.header) + parseRsps = json.loads(parseRsp.text) + realUrl = parseRsps['media']['url'] + if len(realUrl) > 0: + result["parse"] = 0 + result["playUrl"] = "" + result["url"] = realUrl + result["header"] = "" + else: + result["parse"] = 1 + result["playUrl"] = "" + result["url"] = url + result["header"] = json.dumps(self.header) + return result + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def localProxy(self, param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_libvio.json b/py/plugin/py_libvio.json new file mode 100644 index 0000000..6d07b8b --- /dev/null +++ b/py/plugin/py_libvio.json @@ -0,0 +1,234 @@ +# coding=utf-8 +# !/usr/bin/python +import sys + +sys.path.append('..') +from base.spider import Spider +import json + + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "Libvio" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "1", + "剧集": "2", + "动漫": "4", + "即将上线": "27", + "日韩剧": "15", + "欧美剧": "16" + } + 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): + rsp = self.fetch("https://www.libvio.me") + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//div[@class='stui-pannel__bd']/ul/li/div/a") + + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./span[2]/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid, "/detail/(\\d+).html") + videos.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": mark + }) + result = { + 'list': videos + } + return result + + def categoryContent(self, tid, pg, filter, extend): + result = {} + + urlParams = ["", "", "", "", "", "", "", "", "", "", "", ""] + urlParams[0] = tid + urlParams[8] = pg + for key in extend: + urlParams[int(key)] = extend[key] + params = '-'.join(urlParams) + url = 'https://www.libvio.me/show/{0}.html'.format(params) + print(url) + rsp = self.fetch(url) + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//div[@class='stui-pannel__bd clearfix']/ul/li/div/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./span[2]/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid, "/detail/(\\d+).html") + videos.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": mark + }) + + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, array): + tid = array[0] + url = 'https://www.libvio.me/detail/{0}.html'.format(tid) + rsp = self.fetch(url) + root = self.html(self.cleanText(rsp.text)) + node = root.xpath("//div[@class='stui-pannel__bd']")[0] + pic = node.xpath(".//img/@data-original")[0] + title = node.xpath('.//h1/text()')[0] + detail = node.xpath(".//span[@class='detail-content']/text()")[0] + douban = node.xpath(".//span[@class='douban']/text()")[0] + + vod = { + "vod_id": tid, + "vod_name": title, + "vod_pic": pic, + "type_name": "", + "vod_year": "", + "vod_area": "", + "vod_remarks": "", + "vod_actor": "", + "vod_director": "", + "vod_douban_score": format(douban.rstrip("分")), + "vod_content": detail + } + + infoArray = node.xpath(".//div[@class='stui-content__detail']/p") + for info in infoArray: + content = info.xpath('string(.)') + if content.startswith('类型'): + vod['type_name'] = content + if content.startswith('主演'): + vod['vod_actor'] = content.replace('\n', '').replace('\t', '') + if content.startswith('导演'): + vod['vod_director'] = content.replace('\n', '').replace('\t', '') + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath("//div[@class='stui-pannel__head clearfix']/h3/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath("//div[@class='stui-vodlist__head']") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./ul/li/a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('./text()')[0] + tId = self.regStr(href, '/play/(\\S+).html') + vodItems.append(name + "$" + tId) + joinStr = '#' + joinStr = joinStr.join(vodItems) + playList.append(joinStr) + vod_play_url = vod_play_url.join(playList) + + vod['vod_play_from'] = vod_play_from + vod['vod_play_url'] = vod_play_url + + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + url = 'https://www.libvio.me/index.php/ajax/suggest?mid=1&wd={0}'.format(key) + # getHeader() + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + result = {} + jArray = [] + if jo['total'] > 0: + for j in jo['list']: + jArray.append({ + "vod_id": j['id'], + "vod_name": j['name'], + "vod_pic": j['pic'], + "vod_remarks": "" + }) + result = { + 'list': jArray + } + return result + + config = { + "player":{"LINE405":{"show":"LINE405","des":"更多极速线路请访问APP","ps":"0","parse":""},"duoduozy":{"show":"LINE100","des":"","ps":"0","parse":""},"LINE407":{"show":"LINE400","des":"","ps":"0","parse":""},"LINE408":{"show":"LINE408","des":"","ps":"0","parse":""},"p300":{"show":"LINE300","des":"","ps":"0","parse":""},"p301":{"show":"LINE301","des":"","ps":"0","parse":""},"line402-日语":{"show":"LINE402","des":"","ps":"0","parse":""},"LINE400":{"show":"LINE400","des":"","ps":"0","parse":""},"line401":{"show":"LINE401","des":"","ps":"0","parse":""},"iframe268":{"show":"LINE268","des":"","ps":"0","parse":""},"iframe290":{"show":"LINE290","des":"","ps":"0","parse":""},"iframe291":{"show":"LINE291","des":"","ps":"0","parse":""},"iframe296":{"show":"LINE296","des":"","ps":"0","parse":""},"iframe297":{"show":"LINE297","des":"","ps":"0","parse":""},"iframe307":{"show":"LINE307","des":"","ps":"0","parse":""},"iframe308":{"show":"LINE308","des":"","ps":"0","parse":""},"iframe309":{"show":"LINE309","des":"","ps":"0","parse":""},"line301":{"show":"LINE333","des":"","ps":"0","parse":""},"line302":{"show":"LINE302","des":"","ps":"0","parse":""},"LINE409":{"show":"LINE409","des":"","ps":"0","parse":""},"banquan":{"show":"已下架","des":"","ps":"0","parse":""},"iframe261":{"show":"LINE261","des":"","ps":"0","parse":""},"iframe265":{"show":"LINE265","des":"","ps":"0","parse":""},"iframe278":{"show":"LINE278","des":"","ps":"0","parse":""},"iframe306":{"show":"LINE306","des":"","ps":"0","parse":""},"iframe317":{"show":"LINE317","des":"","ps":"0","parse":""},"iframe257":{"show":"LINE257","des":"","ps":"0","parse":""},"iframe263":{"show":"LINE263","des":"","ps":"0","parse":""},"iframe258":{"show":"LINE258","des":"","ps":"0","parse":""},"iframe267":{"show":"LINE267","des":"","ps":"0","parse":""},"iframe":{"show":"LINE200","des":"","ps":"0","parse":""},"iframe262":{"show":"LINE262","des":"","ps":"0","parse":""},"iframe266":{"show":"LINE266","des":"","ps":"0","parse":""},"LINE406":{"show":"LINE406","des":"","ps":"0","parse":""},"dplayer3":{"show":"播放线路3","des":"","ps":"0","parse":""}}, + "filter":{"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"台湾","v":"中国台湾"},{"n":"香港","v":"中国香港"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国","v":"中国"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"6":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"7":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"8":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"9":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"10":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"11":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"12":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"13":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"惊悚","v":"惊悚"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"中国大陆"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"14":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"香港","v":"中国香港"},{"n":"台湾","v":"中国台湾"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"15":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"惊悚","v":"惊悚"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"16":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"美国","v":"美国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}]} + } + header = { + "Referer": "https://www.libvio.me", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" + } + + def playerContent(self, flag, id, vipFlags): + result = {} + url = 'https://www.libvio.me/play/{0}.html'.format(id) + rsp = self.fetch(url) + root = self.html(self.cleanText(rsp.text)) + scripts = root.xpath("//script/text()") + jo = {} + for script in scripts: + if (script.startswith("var player_")): + target = script[script.index('{'):] + jo = json.loads(target) + break; + nid = str(jo['nid']) + scriptUrl = 'https://www.libvio.me/static/player/{0}.js'.format(jo['from']) + scriptRsp = self.fetch(scriptUrl) + parseUrl = self.regStr(scriptRsp.text, 'src="(\\S+url=)') + if len(parseUrl) > 0: + path = jo['url'] + '&next=' + jo['link_next'] + '&id=' + jo['id'] + '&nid=' + nid + parseRsp = self.fetch(parseUrl + path,headers=self.header) + realUrl = self.regStr(parseRsp.text, "(?<=urls\\s=\\s').*?(?=')", 0) + if len(realUrl) > 0: + result["parse"] = 0 + result["playUrl"] = "" + result["url"] = realUrl + result["header"] = "" + else: + result["parse"] = 1 + result["playUrl"] = "" + result["url"] = jo['url'] + result["header"] = json.dumps(self.header) + return result + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def localProxy(self, param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_pansou.py b/py/plugin/py_pansou.py new file mode 100644 index 0000000..6fa23d8 --- /dev/null +++ b/py/plugin/py_pansou.py @@ -0,0 +1,92 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import requests + +class Spider(Spider): + def getDependence(self): + return ['py_ali'] + def getName(self): + return "py_pansou" + def init(self,extend): + self.ali = extend[0] + print("============py_pansou============") + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + + def detailContent(self,array): + tid = array[0] + pattern = '(https:\\/\\/www.aliyundrive.com\\/s\\/[^\\\"]+)' + url = self.regStr(tid,pattern) + if len(url) > 0: + return self.ali.detailContent(array) + header = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', + 'Referer': 'https://www.alipansou.com/s/' +tid + } + rsp = requests.get('https://www.alipansou.com/cv/'+tid, allow_redirects=False, headers=header) + url = self.regStr(reg=r'href=\"(.*)\"', src=rsp.text) + if len(url) == 0: + return "" + url = url.replace('\\','') + newArray = [url] + print(newArray) + return self.ali.detailContent(newArray) + + def searchContent(self,key,quick): + map = { + '7':'文件夹', + '1':'视频' + } + ja = [] + for tKey in map.keys(): + url = "https://www.alipansou.com/search?k={0}&t={1}".format(key,tKey) + rsp = self.fetch(url) + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//van-row/a") + for a in aList: + title = '' + divList = a.xpath('.//template/div') + t = divList[0].xpath('string(.)') + t = self.cleanText(t).strip() + title = title + t + remark = divList[1].xpath('string(.)') + remark = self.cleanText(remark).replace('\xa0\xa0','').strip().split(' ')[1] + if key in title: + pic = 'https://www.alipansou.com'+ self.xpText(a,'.//van-card/@thumb') + jo = { + 'vod_id': self.regStr(a.xpath('@href')[0],'/s/(.*)'), + 'vod_name': '{0}[{1}]'.format(title,remark), + 'vod_pic': pic + } + ja.append(jo) + result = { + 'list':ja + } + return result + + def playerContent(self,flag,id,vipFlags): + return self.ali.playerContent(flag,id,vipFlags) + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_star.json b/py/plugin/py_star.json new file mode 100644 index 0000000..5d8e7e7 --- /dev/null +++ b/py/plugin/py_star.json @@ -0,0 +1,152 @@ +import sys +sys.path.append('..') +from base.spider import Spider +import json + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "星光影视" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def homeContent(self,filter): + result = {} + cateManual = { + "电影":"电影", + "电视剧":"电视剧", + "动漫":"动漫", + "综艺":"综艺" + } + 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): + rsp = self.fetch("https://v.8a5.cn/api.php?do=index_list") + alist = json.loads(rsp.text) + alist = alist['list'] + videos = [] + + for a in alist: + videos.append({ + "vod_id":a['id'], + "vod_name":a['name'], + "vod_pic":a['pic'], + "vod_remarks":a['text'] + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if 'name' not in extend.keys(): + extend['name'] = tid + extend['p'] = pg + filterParams = ["name", "area", "by", "n", "lang", "", "", "", "p", "", "", "year"] + params = [] + for idx in range(len(filterParams)): + fp = filterParams[idx] + if fp in extend.keys(): + + params.append(fp + '=' + extend[fp]) + suffix = '&'.join(params) + url = 'https://v.8a5.cn/api.php?do=class_list&{0}'.format(suffix) + rsp = self.fetch(url) + alists = json.loads(rsp.text) + alist = alists['list'] + videos = [] + for a in alist: + videos.append({ + "vod_id":a['id'], + "vod_name":a['name'], + "vod_pic":a['pic'], + "vod_remarks":a['progress'] + }) + + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self,array): + tid = array[0] + url = 'https://v.8a5.cn/api.php?do=detail_info&id={0}'.format(tid) + rsp = self.fetch(url) + alists = json.loads(rsp.text) + alist = alists['info'] + vod = { + "vod_id": alist['id'], + "vod_name": alist['name'], + "vod_pic": alist['pic'], + "type_name": alist['vclass'], + "vod_year": alist['year'], + "vod_area": alist['area'], + "vod_remarks": alist['progress'], + "vod_actor": "", + "vod_director": "", + "vod_play_from":alist['form'], + "vod_play_url":alist['playurl'], + "vod_content": alist['introduce'] + } + + result = { + 'list':[ + vod + ] + } + return result + + def searchContent(self,key,quick): + url = 'https://v.8a5.cn/api.php?do=search&wd={0}'.format(key) + # getHeader() + rsp = self.fetch(url) + jo = json.loads(rsp.text) + result = {} + jArray = [] + if int(jo['count']) > 0: + for a in jo['list']: + jArray.append({ + "vod_id": a['id'], + "vod_name": a['name'], + "vod_pic": a['pic'], + "vod_remarks": a['text'] + }) + result = { + 'list':jArray + } + return result + + config = { + "filter":{"电视剧":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"剧情","v":"剧情"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"奇幻","v":"奇幻"},{"n":"科幻","v":"科幻"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"励志","v":"励志"},{"n":"冒险","v":"冒险"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"丧尸","v":"丧尸"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"纪录","v":"纪录"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"校园","v":"校园"},{"n":"文艺","v":"文艺"},{"n":"运动","v":"运动"},{"n":"青春","v":"青春"},{"n":"同性","v":"同性"},{"n":"人性","v":"人性"},{"n":"美食","v":"美食"},{"n":"女性","v":"女性"},{"n":"治愈","v":"治愈"},{"n":"历史","v":"历史"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"欧美","v":"欧美"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"英语","v":"英语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"泰语","v":"泰语"},{"n":"德语","v":"德语"},{"n":"印度语","v":"印度语"},{"n":"国语","v":"国语"},{"n":"粤 语","v":"粤语"},{"n":"俄语","v":"俄语"},{"n":"西班牙语","v":"西班牙语"},{"n":"意大利语","v":"意大利语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"电影":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"剧情","v":"剧情"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"奇幻","v":"奇幻"},{"n":"科幻","v":"科幻"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"励志","v":"励志"},{"n":"冒险","v":"冒险"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"丧尸","v":"丧尸"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"纪录","v":"纪录"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"校园","v":"校园"},{"n":"文艺","v":"文艺"},{"n":"运动","v":"运动"},{"n":"青春","v":"青春"},{"n":"同性","v":"同性"},{"n":"人性","v":"人性"},{"n":"美食","v":"美食"},{"n":"女性","v":"女性"},{"n":"治愈","v":"治愈"},{"n":"历史","v":"历史"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"英语","v":"英语"},{"n":"法语","v":"法语"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"动漫":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"冒险","v":"冒险"},{"n":"玄幻","v":"玄幻"},{"n":"魔幻","v":"魔幻"},{"n":"武侠","v":"武侠"},{"n":"恋爱","v":"恋爱"},{"n":"推理","v":"推理"},{"n":"日常","v":"日常"},{"n":"校园","v":"校园"},{"n":"悬疑","v":"悬疑"},{"n":"剧情","v":"剧情"},{"n":"萌系","v":"萌系"},{"n":"科幻","v":"科幻"},{"n":"日常","v":"日常"},{"n":"战斗","v":"战斗"},{"n":"战争","v":"战争"},{"n":"热血","v":"热血"},{"n":"机战","v":"机战"},{"n":"游戏","v":"游戏"},{"n":"搞笑","v":"搞笑"},{"n":"恋爱","v":"恋爱"},{"n":"后宫","v":"后宫"},{"n":"百合","v":"百合"},{"n":"基腐","v":"基腐"},{"n":"冒险","v":"冒险"},{"n":"儿童","v":"儿童"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"奇幻","v":"奇幻"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"犯罪","v":"犯罪"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"古装","v":"古装"},{"n":"泡面","v":"泡面"},{"n":"运动","v":"运动"},{"n":"体育","v":"体育"},{"n":"青春","v":"青春"},{"n":"美食","v":"美食"},{"n":"治愈","v":"治愈"},{"n":"致郁","v":"致郁"},{"n":"励志","v":"励志"},{"n":"历史","v":"历史"},{"n":"真人","v":"真人"},{"n":"竞技","v":"竞技"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"综艺":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"游戏","v":"游戏"},{"n":"音乐","v":"音乐"},{"n":"养成","v":"养成"},{"n":"情感","v":"情感"},{"n":"喜剧","v":"喜剧"},{"n":"搞笑","v":"搞笑"},{"n":"脱口秀","v":"脱口秀"},{"n":"表演","v":"表演"},{"n":"体验","v":"体验"},{"n":"亲子","v":"亲子"},{"n":"文化","v":"文化"},{"n":"美食","v":"美食"},{"n":"职场","v":"职场"},{"n":"体育","v":"体育"},{"n":"潮流文化","v":"潮流文化"},{"n":"访谈","v":"访谈"},{"n":"生活服务","v":"生活服务"},{"n":"萌宠","v":"萌宠"},{"n":"资讯","v":"资讯"},{"n":"曲艺","v":"曲艺"},{"n":"职场","v":"职场"},{"n":"晚会","v":"晚会"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"记录片":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"纪录","v":"纪录"},{"n":"真人秀","v":"真人秀"},{"n":"自然","v":"自然"},{"n":"传记","v":"传记"},{"n":"文化","v":"文化"},{"n":"情","v":"情"},{"n":"运动","v":"运动"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"日语","v":"日语"},{"n":"英语","v":"英语"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + def playerContent(self,flag,id,vipFlags): + if "STAR@" in id: + id = id.split('@') + id = id[1] + url = 'https://parse.8a5.cn/video/' + id + rsp = self.fetch(url) + jo = json.loads(rsp.text) + if jo: + id = jo['url'] + else: + id = '' + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = id + return result + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def localProxy(self,param): + return [200, "video/MP2T", action, ""] diff --git a/py/plugin/py_voflix.json b/py/plugin/py_voflix.json new file mode 100644 index 0000000..1f60675 --- /dev/null +++ b/py/plugin/py_voflix.json @@ -0,0 +1,228 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "Voflix" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + # https://meijuchong.cc/ + result = {} + cateManual = { + "电影": "1", + "剧集": "2", + "综艺": "3", + "动漫": "4" + } + 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): + rsp = self.fetch("https://www.voflix.com/",headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[@class='module']/div[contains(@class,'tab-list')]//a") + videos = [] + for vod in vodList: + name = vod.xpath("./@title")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[@class='module-item-note']/text()")[0] + sid = vod.xpath("./@href")[0] + sid = self.regStr(sid,"/detail/(\\S+).html") + videos.append({ + "vod_id":sid, + "vod_name":name, + "vod_pic":pic, + "vod_remarks":mark + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if 'id' not in extend.keys(): + extend['id'] = tid + extend['page'] = pg + filterParams = ["id", "area", "by", "class", "", "", "", "", "page", "", "", "year"] + params = ["", "", "", "", "", "", "", "", "", "", "", ""] + for idx in range(len(filterParams)): + fp = filterParams[idx] + if fp in extend.keys(): + params[idx] = extend[fp] + suffix = '-'.join(params) + url = 'https://www.voflix.com/show/{0}.html'.format(suffix) + + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[contains(@class, 'module-items')]/a") + videos = [] + for vod in vodList: + name = vod.xpath("./@title")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[contains(@class,'module-item-note')]/text()")[0] + sid = vod.xpath("./@href")[0] + sid = self.regStr(sid,"/detail/(\\S+).html") + videos.append({ + "vod_id":sid, + "vod_name":name, + "vod_pic":pic, + "vod_remarks":mark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self,array): + tid = array[0] + url = 'https://www.voflix.com/detail/{0}.html'.format(tid) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + node = root.xpath("//div[@class='main']")[0] + title = node.xpath(".//div[@class='module-info-heading']/h1/text()")[0] + pic = root.xpath(".//div[@class='module-item-pic']/img/@data-original")[0] + vod = { + "vod_id":tid, + "vod_name":title, + "vod_pic":pic, + "type_name":"", + "vod_year":"", + "vod_area":"", + "vod_remarks":"", + "vod_actor":"", + "vod_director":"", + "vod_content":"" + } + infoArray = node.xpath(".//div[@class='module-info-item']") + for info in infoArray: + content = info.xpath('string(.)') + # if content.startswith('分類'): + # vod['type_name'] = content + # if content.startswith('年份'): + # vod['vod_year'] = content + # if content.startswith('地区'): + # vod['vod_area'] = content + if content.startswith('片长'): + vod['vod_remarks'] = content.replace('\n','').replace('\t','') + if content.startswith('主演'): + vod['vod_actor'] = content.replace('\n','').replace('\t','') + if content.startswith('导演'): + vod['vod_director'] = content.replace('\n','').replace('\t','') + # if content.startswith('剧情'): + # vod['vod_content'] = content.replace('\n','').replace('\t','') + vod['vod_content'] = node.xpath(".//div[contains(@class,'module-info-introduction-content')]/p/text()")[0].replace('\n','').replace('\t','') + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath(".//div[contains(@class,'module-tab-items-box')]/div/span/text()") + for v in vodHeader: + playFrom.append(v.strip()) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath(".//div[contains(@class,'module-play-list-content')]") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('.//span/text()')[0] + tId = self.regStr(href,'/play/(\\S+).html') + vodItems.append(name + "$" + tId) + joinStr = '#' + joinStr = joinStr.join(vodItems) + playList.append(joinStr) + vod_play_url = vod_play_url.join(playList) + + vod['vod_play_from'] = vod_play_from + vod['vod_play_url'] = vod_play_url + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + url = "https://www.voflix.com/index.php/ajax/suggest?mid=1&wd={0}".format(key) + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + vodList = jo['list'] + videos = [] + for vod in vodList: + name = vod['name'] + pic = vod['pic'] + mark = '' + sid = vod['id'] + 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): + # https://meijuchong.cc/static/js/playerconfig.js + result = {} + url = 'https://www.voflix.com/play/{0}.html'.format(id) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + scripts = root.xpath("//script/text()") + jo = {} + for script in scripts: + if(script.startswith("var player_")): + target = script[script.index('{'):] + jo = json.loads(target) + break; + + parseUrl = 'https://play.shtpin.com/xplay/?url={0}'.format(jo['url']) + parseRsp = self.fetch(parseUrl,headers={'referer':'https://www.voflix.com/'}) + + configStr = self.regStr(parseRsp.text,'var config = ({[\\s\\S]+})') + configJo = json.loads(configStr) + playUrl = 'https://play.shtpin.com/xplay/555tZ4pvzHE3BpiO838.php?tm={0}&url={1}&vkey={2}&token={3}&sign=F4penExTGogdt6U8' + playUrl.format(time.time(),configJo['url'],configJo['vkey'],configJo['token']) + playRsp = self.fetch(playUrl.format(time.time(),configJo['url'],configJo['vkey'],configJo['token']) + ,headers={'referer':'https://www.voflix.com/'}) + playJo = json.loads(playRsp.text) + b64 = playJo['url'][8:] + targetUrl = base64.b64decode(b64)[8:-8].decode() + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = targetUrl + result["header"] = '' + return result + + config = { + "player": {}, + "filter": {"1":[{"key":"id","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作","v":"6"},{"n":"喜剧","v":"7"},{"n":"爱情","v":"8"},{"n":"科幻","v":"9"},{"n":"恐怖","v":"10"},{"n":"剧情","v":"11"},{"n":"战争","v":"12"},{"n":"动画","v":"23"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"id","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"纪 录片","v":"21"},{"n":"泰国剧","v":"24"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国台湾","v":"中国台湾"},{"n":"中国香港","v":"中国香港"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"选秀"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":" 冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":" 社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国","v":"中国"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_voflix_1.json b/py/plugin/py_voflix_1.json new file mode 100644 index 0000000..1f60675 --- /dev/null +++ b/py/plugin/py_voflix_1.json @@ -0,0 +1,228 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "Voflix" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + # https://meijuchong.cc/ + result = {} + cateManual = { + "电影": "1", + "剧集": "2", + "综艺": "3", + "动漫": "4" + } + 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): + rsp = self.fetch("https://www.voflix.com/",headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[@class='module']/div[contains(@class,'tab-list')]//a") + videos = [] + for vod in vodList: + name = vod.xpath("./@title")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[@class='module-item-note']/text()")[0] + sid = vod.xpath("./@href")[0] + sid = self.regStr(sid,"/detail/(\\S+).html") + videos.append({ + "vod_id":sid, + "vod_name":name, + "vod_pic":pic, + "vod_remarks":mark + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if 'id' not in extend.keys(): + extend['id'] = tid + extend['page'] = pg + filterParams = ["id", "area", "by", "class", "", "", "", "", "page", "", "", "year"] + params = ["", "", "", "", "", "", "", "", "", "", "", ""] + for idx in range(len(filterParams)): + fp = filterParams[idx] + if fp in extend.keys(): + params[idx] = extend[fp] + suffix = '-'.join(params) + url = 'https://www.voflix.com/show/{0}.html'.format(suffix) + + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + vodList = root.xpath("//div[contains(@class, 'module-items')]/a") + videos = [] + for vod in vodList: + name = vod.xpath("./@title")[0] + pic = vod.xpath(".//img/@data-original")[0] + mark = vod.xpath(".//div[contains(@class,'module-item-note')]/text()")[0] + sid = vod.xpath("./@href")[0] + sid = self.regStr(sid,"/detail/(\\S+).html") + videos.append({ + "vod_id":sid, + "vod_name":name, + "vod_pic":pic, + "vod_remarks":mark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self,array): + tid = array[0] + url = 'https://www.voflix.com/detail/{0}.html'.format(tid) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + node = root.xpath("//div[@class='main']")[0] + title = node.xpath(".//div[@class='module-info-heading']/h1/text()")[0] + pic = root.xpath(".//div[@class='module-item-pic']/img/@data-original")[0] + vod = { + "vod_id":tid, + "vod_name":title, + "vod_pic":pic, + "type_name":"", + "vod_year":"", + "vod_area":"", + "vod_remarks":"", + "vod_actor":"", + "vod_director":"", + "vod_content":"" + } + infoArray = node.xpath(".//div[@class='module-info-item']") + for info in infoArray: + content = info.xpath('string(.)') + # if content.startswith('分類'): + # vod['type_name'] = content + # if content.startswith('年份'): + # vod['vod_year'] = content + # if content.startswith('地区'): + # vod['vod_area'] = content + if content.startswith('片长'): + vod['vod_remarks'] = content.replace('\n','').replace('\t','') + if content.startswith('主演'): + vod['vod_actor'] = content.replace('\n','').replace('\t','') + if content.startswith('导演'): + vod['vod_director'] = content.replace('\n','').replace('\t','') + # if content.startswith('剧情'): + # vod['vod_content'] = content.replace('\n','').replace('\t','') + vod['vod_content'] = node.xpath(".//div[contains(@class,'module-info-introduction-content')]/p/text()")[0].replace('\n','').replace('\t','') + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath(".//div[contains(@class,'module-tab-items-box')]/div/span/text()") + for v in vodHeader: + playFrom.append(v.strip()) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath(".//div[contains(@class,'module-play-list-content')]") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('.//span/text()')[0] + tId = self.regStr(href,'/play/(\\S+).html') + vodItems.append(name + "$" + tId) + joinStr = '#' + joinStr = joinStr.join(vodItems) + playList.append(joinStr) + vod_play_url = vod_play_url.join(playList) + + vod['vod_play_from'] = vod_play_from + vod['vod_play_url'] = vod_play_url + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + url = "https://www.voflix.com/index.php/ajax/suggest?mid=1&wd={0}".format(key) + rsp = self.fetch(url,headers=self.header) + jo = json.loads(rsp.text) + vodList = jo['list'] + videos = [] + for vod in vodList: + name = vod['name'] + pic = vod['pic'] + mark = '' + sid = vod['id'] + 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): + # https://meijuchong.cc/static/js/playerconfig.js + result = {} + url = 'https://www.voflix.com/play/{0}.html'.format(id) + rsp = self.fetch(url,headers=self.header) + root = self.html(rsp.text) + scripts = root.xpath("//script/text()") + jo = {} + for script in scripts: + if(script.startswith("var player_")): + target = script[script.index('{'):] + jo = json.loads(target) + break; + + parseUrl = 'https://play.shtpin.com/xplay/?url={0}'.format(jo['url']) + parseRsp = self.fetch(parseUrl,headers={'referer':'https://www.voflix.com/'}) + + configStr = self.regStr(parseRsp.text,'var config = ({[\\s\\S]+})') + configJo = json.loads(configStr) + playUrl = 'https://play.shtpin.com/xplay/555tZ4pvzHE3BpiO838.php?tm={0}&url={1}&vkey={2}&token={3}&sign=F4penExTGogdt6U8' + playUrl.format(time.time(),configJo['url'],configJo['vkey'],configJo['token']) + playRsp = self.fetch(playUrl.format(time.time(),configJo['url'],configJo['vkey'],configJo['token']) + ,headers={'referer':'https://www.voflix.com/'}) + playJo = json.loads(playRsp.text) + b64 = playJo['url'][8:] + targetUrl = base64.b64decode(b64)[8:-8].decode() + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = targetUrl + result["header"] = '' + return result + + config = { + "player": {}, + "filter": {"1":[{"key":"id","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作","v":"6"},{"n":"喜剧","v":"7"},{"n":"爱情","v":"8"},{"n":"科幻","v":"9"},{"n":"恐怖","v":"10"},{"n":"剧情","v":"11"},{"n":"战争","v":"12"},{"n":"动画","v":"23"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"id","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"纪 录片","v":"21"},{"n":"泰国剧","v":"24"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国台湾","v":"中国台湾"},{"n":"中国香港","v":"中国香港"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"选秀"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":" 冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":" 社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国","v":"中国"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_wmkk.json b/py/plugin/py_wmkk.json new file mode 100644 index 0000000..b01572c --- /dev/null +++ b/py/plugin/py_wmkk.json @@ -0,0 +1,176 @@ +# coding=utf-8 +# !/usr/bin/python +import sys +import re +sys.path.append('..') +from base.spider import Spider + + + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "完美看看" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "1", + "国产剧": "5", + "欧美剧": "2", + "韩剧": "3", + "泰剧": "9", + "日剧": "4", + "动漫": "6", + "综艺": "7", + "纪录片": "10" + } + 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 = { + 'list': [] + } + return result + + def categoryContent(self, tid, pg, filter, extend): + result = {} + url = 'https://www.wanmeikk.film/category/{0}-{1}.html'.format(tid, pg) + rsp = self.fetch(url) + root = self.html(rsp.text) + aList = root.xpath("//div[@class='stui-pannel_bd']/ul[1]/li") + videos = [] + for a in aList: + name = a.xpath('./div/a/@title')[0] + pic = a.xpath('./div/a/@data-original')[0] + mark = a.xpath("./div/a/span[@class='pic-text text-right']/text()")[0] + sid = a.xpath("./div/a/@href")[0].replace("/", "").replace("project", "").replace(".html", "") + videos.append({ + "vod_id": sid, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": mark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, array): + tid = array[0] + url = 'https://www.wanmeikk.film/project/{0}.html'.format(tid) + header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"} + rsp = self.fetch(url, headers=header) + root = self.html(rsp.content) + divContent = root.xpath("//div[@class='col-lg-wide-75 col-xs-1']")[0] + title = divContent.xpath(".//h1[@class='title']/text()")[0] + pic = divContent.xpath(".//a[@class='stui-vodlist__thumb picture v-thumb']/img/@data-original")[0] + detail = divContent.xpath(".//p[@class='desc detail hidden-xs']/span[@class='detail-content']/text()")[0] + vod = { + "vod_id": tid, + "vod_name": title, + "vod_pic": pic, + "type_name": "", + "vod_year": "", + "vod_area": "", + "vod_remarks": "", + "vod_actor": "", + "vod_director": "", + "vod_content": detail + } + infoArray = divContent.xpath(".//div[@class='stui-content__detail']/p[@class='data']") + for info in infoArray: + content = info.xpath('string(.)') + if content.startswith('类型'): + infon = content.split('\xa0') + for inf in infon: + if inf.startswith('类型'): + vod['type_name'] = inf.replace("类型:", "") + if inf.startswith('地区'): + vod['vod_area'] = inf.replace("地区:", "") + if inf.startswith('年份'): + vod['vod_year'] = inf.replace("年份:", "") + if content.startswith('主演'): + vod['vod_actor'] = content.replace("\xa0", "/").replace("主演:", "") + if content.startswith('导演'): + vod['vod_director'] = content.replace("\xa0", "").replace("导演:", "") + vod_play_url = '$$$' + vod['vod_play_from'] = '完美看看' + purl = divContent.xpath(".//div[@class='stui-pannel_bd col-pd clearfix']/ul/li") + playList = [] + vodItems = [] + for plurl in purl: + plaurl = plurl.xpath(".//a/@href")[0] + name = plurl.xpath(".//a/text()")[0] + tId = self.regStr(plaurl, '/play/(\\S+).html') + vodItems.append(name + "$" + tId) + joinStr = '#' + joinStr = joinStr.join(vodItems) + playList.append(joinStr) + vod_play_url = vod_play_url.join(playList) + vod['vod_play_url'] = vod_play_url + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + result = {} + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + url = 'https://www.wanmeikk.film/play/{0}.html'.format(id) + rsp = self.fetch(url) + root = self.html(rsp.text) + scripts = root.xpath("//div[@class='stui-player__video embed-responsive embed-responsive-16by9 clearfix']/script/text()")[0] + key = scripts.split("url")[1].replace('"', "").replace(':', "").replace(',', "").replace("'", "") + surl = 'https://www.wanmeikk.film/dplayer.php?url={0}'.format(key) + srsp = self.fetch(surl) + sroot = self.html(srsp.text) + murl = sroot.xpath("//script[@type='text/javascript']/text()")[0] + mp4url = re.findall(r"var urls = '(.*)';", murl)[0] + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = mp4url + result["header"] = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"} + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def localProxy(self, param): + action = { + 'url': '', + 'header': '', + 'param': '', + 'type': 'string', + 'after': '' + } + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_xmaomi.json b/py/plugin/py_xmaomi.json new file mode 100644 index 0000000..83e6b7f --- /dev/null +++ b/py/plugin/py_xmaomi.json @@ -0,0 +1,258 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "x小猫咪" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "电影":"1", + "电视剧":"2", + "综艺":"3", + "动漫":"4", + "纪录":"5" + } + 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): + tmpRsp = self.fetch("https://xmaomi.net/") + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + # self.cookie = rsp.cookies + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + aList = root.xpath("//ul[contains(@class,'hl-vod-list')]/li/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./div[@class='hl-pic-text']/span/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid,"/(\\S+).html") + videos.append({ + "vod_id":sid, + "vod_name":name, + "vod_pic":pic, + "vod_remarks":mark + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + + urlParams = ["", "", "", "", "", "", "", "", "", "", "", ""] + urlParams[0] = tid + urlParams[8] = pg + for key in extend: + urlParams[int(key)] = extend[key] + params = '-'.join(urlParams) + url = 'https://xmaomi.net/vod_____show/{0}.html'.format(params) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = 'https://xmaomi.net'+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + aList = root.xpath("//ul[contains(@class,'hl-vod-list')]/li/a") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + pic = a.xpath('./@data-original')[0] + mark = a.xpath("./div[@class='hl-pic-text']/span/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid,"/(\\S+).html") + videos.append({ + "vod_id":sid, + "vod_name":name, + "vod_pic":pic, + "vod_remarks":mark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self,array): + tid = array[0] + url = 'https://xmaomi.net/{0}.html'.format(tid) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + divContent = root.xpath("//div[contains(@class,'hl-full-box')]")[0] + title = divContent.xpath("./div[@class='hl-item-pic']/span/@title")[0] + pic = divContent.xpath("./div[@class='hl-item-pic']/span/@data-original")[0] + vod = { + "vod_id":tid, + "vod_name":title, + "vod_pic":pic, + "type_name":"", + "vod_year":"", + "vod_area":"", + "vod_remarks":"", + "vod_actor":"", + "vod_director":"", + "vod_content":"" + } + liArray = divContent.xpath(".//li") + for li in liArray: + content = li.xpath('string(.)') + if content.startswith('类型'): + vod['type_name'] = content + if content.startswith('年份'): + vod['vod_year'] = content + if content.startswith('地区'): + vod['vod_area'] = content + if content.startswith('状态'): + vod['vod_remarks'] = content + if content.startswith('主演'): + vod['vod_actor'] = content + if content.startswith('导演'): + vod['vod_director'] = content + if content.startswith('简介'): + vod['vod_content'] = content + + vod_play_from = '$$$' + playFrom = [] + vodHeader = root.xpath("//div[contains(@class,'hl-rb-tips')]//span[@class='hl-text-site']/text()") + for v in vodHeader: + playFrom.append(v) + vod_play_from = vod_play_from.join(playFrom) + + vod_play_url = '$$$' + playList = [] + vodList = root.xpath(".//div[contains(@class,'hl-play-source')]//ul") + for vl in vodList: + vodItems = [] + aList = vl.xpath('./li/a') + for tA in aList: + href = tA.xpath('./@href')[0] + name = tA.xpath('string(.)') + tId = self.regStr(href,'/(\\S+).html') + vodItems.append(name + "$" + tId) + joinStr = '#' + joinStr = joinStr.join(vodItems) + playList.append(joinStr) + vod_play_url = vod_play_url.join(playList) + + vod['vod_play_from'] = vod_play_from + vod['vod_play_url'] = vod_play_url + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + url = 'https://xmaomi.net/v_search/{0}-------------.html'.format(key) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + aList = root.xpath("//ul[contains(@class,'hl-one-list')]/li//a[contains(@class,'hl-item-thumb')]") + videos = [] + for a in aList: + name = a.xpath('./@title')[0] + print(name) + pic = a.xpath('./@data-original')[0] + print(pic) + mark = a.xpath("./div[@class='hl-pic-text']/span/text()")[0] + sid = a.xpath("./@href")[0] + sid = self.regStr(sid,"/(\\S+).html") + 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): + url = 'https://xmaomi.net/{0}.html'.format(id) + tmpRsp = self.fetch(url) + suffix = self.regStr(tmpRsp.text,"window.location.href =\"(\\S+)\"") + url = "https://xmaomi.net"+suffix + rsp = self.fetch(url,cookies=tmpRsp.cookies) + root = self.html(rsp.text) + print(rsp.text[0]) + print(root) + scripts = root.xpath("//script/text()") + jo = {} + for script in scripts: + if(script.startswith("var player_")): + target = script[script.index('{'):] + jo = json.loads(target) + break; + parseUrl = "" + print(jo) + htmlUrl = 'https://play.fositv.com/?url={0}&tm={1}&key={2}&next=&title='.format(jo['url'],jo['tm'],jo['key']) + htmlRsp = self.fetch(htmlUrl) + htmlRoot = self.html(htmlRsp.text) + configScripts = htmlRoot.xpath("//script/text()") + configJo = {} + for script in configScripts: + if(script.strip().startswith("var config")): + target = script[script.index('{'):(script.index('}')+1)] + configJo = json.loads(target) + break; + param = { + 'url': configJo['url'], + 'time': configJo['time'], + 'key': configJo['key'] + } + postRsp = self.post('https://play.fositv.com/API.php',param) + resultJo = json.loads(postRsp.text) + result = { + 'parse':0, + 'playUrl':'', + 'url':resultJo['url'], + 'header':{ + 'User-Agent':resultJo['ua'] + } + } + return result + + cookie = {} + config = { + "player": {}, + "filter": {"1":[{"key":0,"name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作","v":"101"},{"n":"喜剧","v":"102"},{"n":"爱情","v":"103"},{"n":"科幻","v":"104"},{"n":"剧情","v":"105"},{"n":"悬疑","v":"106"},{"n":"惊悚","v":"107"},{"n":"恐怖","v":"108"},{"n":"犯罪","v":"109"},{"n":"谍战","v":"110"},{"n":"冒险","v":"111"},{"n":"奇幻","v":"112"},{"n":"灾难","v":"113"},{"n":"战争","v":"114"},{"n":"动画","v":"115"},{"n":"歌舞","v":"116"},{"n":"历史","v":"117"},{"n":"传记","v":"118"},{"n":"纪录","v":"119"},{"n":"其他","v":"120"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":" 印度","v":"印度"},{"n":"其他","v":"其他"}]},{"key":11,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":0,"name":"分类","value":[{"n":"全部","v":"2"},{"n":"武侠","v":"201"},{"n":"喜剧","v":"202"},{"n":"爱情","v":"203"},{"n":"剧情","v":"204"},{"n":"青春","v":"205"},{"n":"悬疑","v":"206"},{"n":"科幻","v":"207"},{"n":"军事","v":"208"},{"n":"警匪","v":"209"},{"n":"谍战","v":"210"},{"n":"奇幻","v":"211"},{"n":"偶 像","v":"212"},{"n":"年代","v":"213"},{"n":"乡村","v":"214"},{"n":"都市","v":"215"},{"n":"家庭","v":"216"},{"n":"古装","v":"217"},{"n":"历史","v":"218"},{"n":"神话","v":"219"},{"n":"其他","v":"220"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印 度"},{"n":"其他","v":"其他"}]},{"key":11,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":0,"name":"分类","value":[{"n":"全部","v":"3"},{"n":"脱口秀","v":"301"},{"n":"真人秀","v":"302"},{"n":"搞笑","v":"303"},{"n":"访谈","v":"304"},{"n":"生活","v":"305"},{"n":"晚会","v":"306"},{"n":"美食","v":"307"},{"n":"游戏","v":"308"},{"n":"亲子","v":"309"},{"n":"旅游","v":"310"},{"n":"文化","v":"311"},{"n":"体育","v":"312"},{"n":"时尚","v":"313"},{"n":"纪实","v":"314"},{"n":"益智","v":"315"},{"n":"演艺","v":"316"},{"n":"歌舞","v":"317"},{"n":"音乐","v":"318"},{"n":"播报","v":"319"},{"n":"其他","v":"320"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"其他","v":"其他"}]},{"key":11,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":0,"name":"分类","value":[{"n":"全部","v":"4"},{"n":"热血","v":"401"},{"n":"格斗","v":"402"},{"n":"恋爱","v":"403"},{"n":"美少女","v":"404"},{"n":"校园","v":"405"},{"n":"搞笑","v":"406"},{"n":"LOLI","v":"407"},{"n":"神魔","v":"408"},{"n":"机战","v":"409"},{"n":"科幻","v":"410"},{"n":"真人","v":"411"},{"n":"青春","v":"412"},{"n":"魔法","v":"413"},{"n":"神话","v":"414"},{"n":"冒险","v":"415"},{"n":"运动","v":"416"},{"n":"竞技","v":"417"},{"n":"童话","v":"418"},{"n":"亲子","v":"419"},{"n":"教育","v":"420"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"其他","v":"其他"}]},{"key":11,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],"5":[{"key":0,"name":"分类","value":[{"n":"全部","v":"5"},{"n":"人物","v":"501"},{"n":"军事","v":"502"},{"n":"历史","v":"503"},{"n":"自然","v":"504"},{"n":"探险","v":"505"},{"n":"科技","v":"506"},{"n":"文化","v":"507"},{"n":"刑侦","v":"508"},{"n":"社会","v":"509"},{"n":"旅游","v":"510"},{"n":"其他","v":"511"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"其他","v":"其他"}]},{"key":11,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":5,"name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":2,"name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_xmly.py b/py/plugin/py_xmly.py new file mode 100644 index 0000000..bf50ea6 --- /dev/null +++ b/py/plugin/py_xmly.py @@ -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, ""] \ No newline at end of file diff --git a/py/plugin/py_yiso.py b/py/plugin/py_yiso.py new file mode 100644 index 0000000..4ce5f65 --- /dev/null +++ b/py/plugin/py_yiso.py @@ -0,0 +1,63 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import requests + +class Spider(Spider): + def getDependence(self): + return ['py_ali'] + def getName(self): + return "py_yiso" + def init(self,extend): + self.ali = extend[0] + print("============py_yiso============") + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + header = { + "User-Agent": "Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36", + "Referer": "https://yiso.fun/" + } + def detailContent(self,array): + return self.ali.detailContent(array) + + def searchContent(self,key,quick): + url = "https://yiso.fun/api/search?name={0}&from=ali".format(key) + vodList = requests.get(url=url, headers=self.header, verify=False).json()["data"]["list"] + videos = [] + for vod in vodList: + videos.append({ + "vod_id": vod["url"], + "vod_name": vod["fileInfos"][0]["fileName"], + "vod_pic": "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000", + "vod_remarks": vod['gmtCreate'] + }) + result = { + 'list':videos + } + return result + + def playerContent(self,flag,id,vipFlags): + return self.ali.playerContent(flag,id,vipFlags) + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_yixi.json b/py/plugin/py_yixi.json new file mode 100644 index 0000000..52b9dbb --- /dev/null +++ b/py/plugin/py_yixi.json @@ -0,0 +1,126 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): + def getName(self): + return "一席" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + url = 'https://yixi.tv/api/site/category/?_=1' + jo = self.fetch(url,headers=self.header).json() + category = jo['data']['items'] + classes = [] + classes.append({ + 'type_name':'全部', + 'type_id':'' + }) + for cat in category: + classes.append({ + 'type_name':cat['title'], + 'type_id':cat['id'] + }) + result['class'] = classes + if(filter): + result['filters'] = self.config['filter'] + return result + def homeVideoContent(self): + # url = 'https://yixi.tv/api/site/album/?page=1&page_size=4&_=1' + url = 'https://yixi.tv/api/site/album/22/detail/?page=1&page_size=24&_=1' + jo = self.fetch(url,headers=self.header).json() + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + videos.append({ + "vod_id":vod['id'], + "vod_name":vod['title'], + "vod_pic":vod['cover'], + "vod_remarks":vod['time'] + }) + result = { + 'list':videos + } + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + url = 'https://yixi.tv/api/site/speech/?page={1}&page_size=12&category_id={0}&order_by=0&_=1'.format(tid,pg) + jo = self.fetch(url,headers=self.header).json() + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + videos.append({ + "vod_id":vod['id'], + "vod_name":vod['title'], + "vod_pic":vod['cover'], + "vod_remarks":vod['time'] + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self,array): + tid = array[0] + url = "https://yixi.tv/api/site/speech/{0}/detail/?_=1".format(tid) + jo = self.fetch(url,headers=self.header).json() + + vod = { + "vod_id":jo['data']['speech']['id'], + "vod_name":jo['data']['speech']['title'], + "vod_pic":jo['data']['speech']['cover'], + "type_name":jo['data']['speech']['first_category'], + "vod_year":"", + "vod_area":"", + "vod_remarks":jo['data']['speech']['date'], + "vod_actor":"", + "vod_director":"", + "vod_content":jo['data']['speech']['titlelanguage'] + } + + vod['vod_play_from'] = '一席' + pList = [] + for vUrl in jo['data']['speech']['video_url']: + pList.append(vUrl['type_name']+"$"+vUrl['video_url']) + vod['vod_play_url'] = '#'.join(pList) + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + result = { + 'list':[] + } + return result + def playerContent(self,flag,id,vipFlags): + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = id + result["header"] = '' + return result + + config = { + "player": {}, + "filter": {} + } + header = { + "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36" + } + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/py_zhaozy.py b/py/plugin/py_zhaozy.py new file mode 100644 index 0000000..b190658 --- /dev/null +++ b/py/plugin/py_zhaozy.py @@ -0,0 +1,85 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def getDependence(self): + return ['py_ali'] + def getName(self): + return "py_zhaozy" + def init(self,extend): + self.ali = extend[0] + print("============py_zhaozy============") + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + return result + def homeVideoContent(self): + result = {} + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + return result + header = { + "User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1", + "Referer": "https://zhaoziyuan.la/" + } + def detailContent(self,array): + tid = array[0] + print(self.getName()) + pattern = '(https://www.aliyundrive.com/s/[^\"]+)' + url = self.regStr(tid,pattern) + if len(url) > 0: + return self.ali.detailContent(array) + + rsp = self.fetch('https://zhaoziyuan.la/'+tid) + url = self.regStr(rsp.text,pattern) + if len(url) == 0: + return "" + newArray = [url] + print(newArray) + return self.ali.detailContent(newArray) + + def searchContent(self,key,quick): + map = { + '7':'文件夹', + '1':'视频' + } + ja = [] + for tKey in map.keys(): + url = "https://zhaoziyuan.la/so?filename={0}&t={1}".format(key,tKey) + rsp = self.fetch(url,headers=self.header) + root = self.html(self.cleanText(rsp.text)) + aList = root.xpath("//li[@class='clear']//a") + for a in aList: + # title = a.xpath('./h3/text()')[0] + a.xpath('./p/text()')[0] + title = self.xpText(a,'./h3/text()') + self.xpText(a,'./p/text()') + pic = 'https://img0.baidu.com/it/u=603086994,1727626977&fm=253&fmt=auto?w=500&h=667' + jo = { + 'vod_id': self.xpText(a,'@href'), + 'vod_name': '[{0}]{1}'.format(key,title), + 'vod_pic': pic + } + ja.append(jo) + result = { + 'list':ja + } + return result + + def playerContent(self,flag,id,vipFlags): + return self.ali.playerContent(flag,id,vipFlags) + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/py/plugin/sp360.py b/py/plugin/sp360.py new file mode 100644 index 0000000..3ddbe26 --- /dev/null +++ b/py/plugin/sp360.py @@ -0,0 +1,123 @@ +# -*- coding:utf-8 -*- +import requests +import urllib3 + + +urllib3.util.timeout.Timeout._validate_timeout = lambda *args: 5 if args[2] != 'total' else None + + +Tag = "sp360" +Tag_name = "360影视" +SiteSearch = "https://api.so.360kan.com" +SiteDetail = "https://api.web.360kan.com" + + +def getHeaders(): + headers = { + "User-Agent": "Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36", + } + return headers + + +def searchContent(key, token): + try: + url = f"{SiteSearch}/index?force_v=1&kw={key}&from=&pageno=1&v_ap=1&tab=all" + res = requests.get(url=url, headers=getHeaders()).json() + if len(res["data"]["longData"]): + lists = res["data"]["longData"]["rows"] + else: + return [] + videos = [] + for vod in lists: + videos.append({ + "vod_id": f'{Tag}${vod.get("cat_id", "")}_{vod.get("en_id", "")}', + "vod_name": vod.get("titleTxt", ""), + "vod_pic": vod.get("cover", ""), + "vod_remarks": Tag_name + " " + vod.get("score", "") + }) + return videos + except Exception as e: + print(e) + return [] + + +def detailContent(ids, token): + try: + id = ids.split("$")[-1].split("_") + url = f"{SiteDetail}/v1/detail?cat={id[0]}&id={id[1]}" + data = requests.get(url=url, headers=getHeaders()).json()["data"] + vodList = { + "vod_id": ids, + "vod_name": data.get("title", ""), + "vod_pic": data.get("cdncover", ""), + "type_name": ",".join(item for item in data.get("moviecategory", [])), + "vod_year": data.get("pubdate", ""), + "vod_area": ",".join(item for item in data.get("area", [])), + "vod_remarks": data.get("doubanscore", ""), + "vod_actor": ",".join(item for item in data.get("actor", [])), + "vod_director": ",".join(item for item in data.get("director", [])), + "vod_content": data.get("description", ""), + "vod_play_from": "$$$".join(item for item in data.get("playlink_sites", [])) + } + delta = 200 + vod_play = {} + for site in data.get("playlink_sites", []): + playList = "" + vodItems = [] + if "allupinfo" in data: + total = int(data["allupinfo"][site]) + for start in range(1, total, delta): + end = total if (start + delta) > total else start + delta - 1 + vod_data = requests.get( + url=url, + params={ + "start": start, + "end": end, + "site": site + }, + headers=getHeaders() + ).json()["data"] + if "allepidetail" in vod_data: + vod_data = vod_data["allepidetail"] + for item in vod_data[site]: + vodItems.append(item.get("playlink_num", "") + "$" + f"{Tag}___" + item.get("url", "")) + else: + vod_data = vod_data['defaultepisode'] + for item in vod_data: + vodItems.append(item.get('period', "") + item.get('name', "") + "$" + f"{Tag}___" + item.get("url", "")) + else: + item = data["playlinksdetail"][site] + vodItems.append(item.get("sort", "") + "$" + f"{Tag}___" + item.get("default_url", "")) + if len(vodItems): + playList = "#".join(vodItems) + if len(playList) == 0: + continue + vod_play.setdefault(site, playList) + if len(vod_play): + vod_play_url = "$$$".join(vod_play.values()) + vodList.setdefault("vod_play_url", vod_play_url) + return [vodList] + except Exception as e: + print(e) + return [] + + +def playerContent(ids, flag, token): + try: + url = ids.split("___")[-1] + return { + "parse": 1, + "playUrl": "", + "jx": "1", + "url": url + } + except Exception as e: + print(e) + return {} + + +if __name__ == '__main__': + # res = searchContent("月升沧海", "") + # res = searchContent("冰雨火", "") + res = detailContent('sp360$2_QbVqbX7lTGLrMH', "") + print(res) \ No newline at end of file diff --git a/py/plugin/初中教育.py b/py/plugin/初中教育.py new file mode 100644 index 0000000..6fd1775 --- /dev/null +++ b/py/plugin/初中教育.py @@ -0,0 +1,278 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "初中" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "7年级地理":"7年级地理", + "7年级生物":"7年级生物", + "7年级物理":"7年级物理", + "7年级化学":"7年级化学", + "8年级语文":"8年级语文", + "8年级数学":"8年级数学", + "8年级英语":"8年级英语", + "8年级历史":"8年级历史", + "8年级地理":"8年级地理", + "8年级生物":"8年级生物", + "8年级物理":"8年级物理", + "8年级化学":"8年级化学", + "9年级语文":"9年级语文", + "9年级数学":"9年级数学", + "9年级英语":"9年级英语", + "9年级历史":"9年级历史", + "9年级地理":"9年级地理", + "9年级生物":"9年级生物", + "9年级物理":"9年级物理", + "9年级化学":"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 = { + 'list':[] + } + return result + cookies = '' + def getCookie(self): + import requests + import http.cookies + # 这里填cookie + raw_cookie_line = "buvid3=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; LIVE_BUVID=AUTO4216125328906835; rpdid=|(umRum~uY~R0J'uYukYukkkY; balh_is_closed=; balh_server_inner=__custom__; PVID=4; video_page_version=v_old_home; i-wanna-go-back=-1; CURRENT_BLACKGAP=0; blackside_state=0; fingerprint=8965144a609d60190bd051578c610d72; buvid_fp_plain=undefined; CURRENT_QUALITY=120; hit-dyn-v2=1; nostalgia_conf=-1; buvid_fp=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; CURRENT_FNVAL=4048; DedeUserID=85342; DedeUserID__ckMd5=f070401c4c699c83; b_ut=5; hit-new-style-dyn=0; buvid4=15C64651-E8B7-100C-4B1F-C7CFD2DB473007906-022110820-jYQRaMeS%2BRXRfw14q70%2FLQ%3D%3D; b_nut=1667910208; b_lsid=3CE4AE79_184578915C0; is-2022-channel=1; innersign=0; SESSDATA=a5e4d58d%2C1683641322%2C2c39a%2Ab1; bili_jct=2f3126b5954e37f593130f2fef082cd8; sid=p7tjqv22; bp_video_offset_85342=726936847258746900" + simple_cookie = http.cookies.SimpleCookie(raw_cookie_line) + cookie_jar = requests.cookies.RequestsCookieJar() + cookie_jar.update(simple_cookie) + return cookie_jar + def get_dynamic(self,pg): + result = {} + + url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg) + + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + if vod['type'] == 'DYNAMIC_TYPE_AV': + ivod = vod['modules']['module_dynamic']['major']['archive'] + aid = str(ivod['aid']).strip() + title = ivod['title'].strip().replace("","").replace("","") + img = ivod['cover'].strip() + remark = str(ivod['duration_text']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def get_hot(self,pg): + result = {} + url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg) + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def get_rank(self): + result = {} + url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all' + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = 1 + result['pagecount'] = 1 + result['limit'] = 90 + result['total'] = 999999 + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if tid == "热门": + return self.get_hot(pg=pg) + if tid == "排行榜" : + return self.get_rank() + if tid == '动态': + return self.get_dynamic(pg=pg) + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url,cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = tid + ":" + vod['title'].strip().replace("","").replace("","") + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + + rsp = self.fetch(url,headers=self.header,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("","").replace("","") + pic = jo['pic'] + desc = jo['desc'] + typeName = jo['tname'] + vod = { + "vod_id":aid, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":"bilidanmu", + "vod_remarks":"", + "vod_actor":jo['owner']['name'], + "vod_director":jo['owner']['name'], + "vod_content":desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'] + playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid) + + vod['vod_play_from'] = 'B站' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + search = self.categoryContent(tid=key,pg=1,filter=None,extend=None) + result = { + 'list':search['list'] + } + return result + def playerContent(self,flag,id,vipFlags): + # https://www.555dianying.cc/vodplay/static/js/playerconfig.js + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1]) + rsp = self.fetch(url,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + } + result["contentType"] = 'video/x-flv' + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] diff --git a/py/plugin/哔哩合集.json b/py/plugin/哔哩合集.json new file mode 100644 index 0000000..602abe4 --- /dev/null +++ b/py/plugin/哔哩合集.json @@ -0,0 +1,4395 @@ +{ + + "classes": [ + + { + "type_name": "美食", + "type_id": "美食超清" + }, + { + "type_name": "食谱", + "type_id": "食谱" + }, + { + "type_name": "体育", + "type_id": "体育超清" + }, + { + "type_name": "球星", + "type_id": "球星" + }, + { + "type_name": "旅游", + "type_id": "旅游" + }, + { + "type_name": "风景", + "type_id": "风景4K" + }, + { + "type_name": "说案", + "type_id": "说案" + }, + { + "type_name": "知名UP主", + "type_id": "知名UP主" + }, + { + "type_name": "探索发现", + "type_id": "探索发现超清" + }, + { + "type_name": "纪录片", + "type_id": "纪录片超清" + }, + { + "type_name": "鬼畜", + "type_id": "鬼畜" + }, + { + "type_name": "搞笑", + "type_id": "搞笑" + }, + { + "type_name": "儿童", + "type_id": "儿童" + }, + { + "type_name": "动物世界", + "type_id": "动物世界" + }, + { + "type_name": "相声小品", + "type_id": "相声小品超清" + }, + { + "type_name": "戏曲", + "type_id": "戏曲" + }, + { + "type_name": "解说", + "type_id": "解说" + }, + + { + "type_name": "演讲", + "type_id": "演讲" + }, + { + "type_name": "小姐姐", + "type_id": "小姐姐超清" + }, + { + "type_name": "荒野求生", + "type_id": "荒野求生超清" + }, + { + "type_name": "健身", + "type_id": "健身" + }, + { + "type_name": "帕梅拉", + "type_id": "帕梅拉" + }, + { + "type_name": "太极拳", + "type_id": "太极拳" + }, + + { + "type_name": "广场舞", + "type_id": "广场舞" + }, + { + "type_name": "舞蹈", + "type_id": "舞蹈" + }, + { + "type_name": "音乐", + "type_id": "音乐" + }, + { + "type_name": "歌曲", + "type_id": "歌曲" + }, + { + "type_name": "MV", + "type_id": "MV4K" + }, + { + "type_name": "舞曲", + "type_id": "舞曲超清" + }, + { + "type_name": "4K", + "type_id": "4K" + }, + { + "type_name": "电影", + "type_id": "电影" + }, + { + "type_name": "电视剧", + "type_id": "电视剧" + }, + { + "type_name": "白噪音", + "type_id": "白噪音超清" + }, + { + "type_name": "考公考证", + "type_id": "考公考证" + }, + + { + "type_name": "平面设计教学", + "type_id": "平面设计教学" + }, + { + "type_name": "软件教程", + "type_id": "软件教程" + }, + { + "type_name": "Windows", + "type_id": "Windows" + } + + ], + + "cookie":"_uuid=5E4B2B98-1014A-84D8-FA33-EC210C5BEC10DA82367infoc; buvid3=E9D0A426-85E9-E6C7-C75E-206A3E1BEB4D81910infoc; b_nut=1666168082; buvid4=4FC87B9C-3540-2275-688C-8612D3EA719B81910-022101916-ZLe640jXRAMHySuaCe9aUw==; rpdid=|(k|u)YYm)uY0J'uYYYuY)uuu; i-wanna-go-back=-1; fingerprint=9c214a6da0197a48e576ccf22e9f0ac7; buvid_fp_plain=undefined; nostalgia_conf=-1; DedeUserID=3493076028885079; DedeUserID__ckMd5=60a8757a1f4d6ae9; buvid_fp=9c214a6da0197a48e576ccf22e9f0ac7; CURRENT_QUALITY=80; b_ut=5; PVID=2; bp_video_offset_3493076028885079=undefined; bsource=search_google; SESSDATA=42b8ada6,1683277266,4bd05*b2; bili_jct=2dbe39aea02b41324395630a24d4775f; sid=89gnel66; innersign=0; b_lsid=9EF63922_1844D55A286; CURRENT_FNVAL=4048", + + "filter": { + "考公考证": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "探索发现超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "电影": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "鬼畜": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "说案": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "说案" + }, + { + "n": "汤圆", + "v": "汤圆说案" + }, + { + "n": "唐唐", + "v": "唐唐说案" + }, + { + "n": "罗翔", + "v": "罗翔说刑法" + }, + { + "n": "何家弘", + "v": "何家弘说案" + }, + { + "n": "韩诺", + "v": "韩诺说案" + }, + { + "n": "老V", + "v": "老V说案" + }, + { + "n": "禁播档案‼️", + "v": "禁播档案" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "演讲": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "全部演讲4K" + }, + { + "n": "A艾跃进", + "v": "艾跃进演讲4K" + }, + { + "n": "C超级演说家", + "v": "超级演说家4K" + }, + { + "n": "D电影", + "v": "电影演讲4K" + }, + { + "n": "D典籍里的中国", + "v": "典籍里的中国4K" + }, + { + "n": "G感动中国", + "v": "感动中国4K" + }, + { + "n": "G郭继承", + "v": "郭继承演讲4K" + }, + { + "n": "H华春莹", + "v": "华春莹演讲4K" + }, + { + "n": "L雷军", + "v": "雷军演讲4K" + }, + { + "n": "L罗翔", + "v": "罗翔演讲4K" + }, + { + "n": "R任正非", + "v": "任正非演讲4K" + }, + { + "n": "TED", + "v": "TED演讲4K" + }, + { + "n": "W汪文斌", + "v": "汪文斌演讲4K" + }, + { + "n": "Y一刻", + "v": "一刻演讲4K" + }, + { + "n": "Z赵立坚", + "v": "赵立坚演讲4K" + }, + { + "n": "Z郑强", + "v": "郑强演讲4K" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "解说": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "解说" + }, + { + "n": "电影", + "v": "电影解说" + }, + { + "n": "电视", + "v": "电视解说" + }, + { + "n": "历史", + "v": "历史解说" + }, + { + "n": "动漫", + "v": "动漫解说" + }, + { + "n": "小说", + "v": "小说解说" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "风景4K": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "风景4K" + }, + { + "n": "A澳门", + "v": "澳门风景4K" + }, + { + "n": "A安徽", + "v": "安徽风景4K" + }, + { + "n": "B布达拉宫", + "v": "布达拉宫风景4K" + }, + { + "n": "B北京", + "v": "北京风景4K" + }, + { + "n": "C重庆", + "v": "重庆风景4K" + }, + { + "n": "C草原", + "v": "草原风景4K" + }, + { + "n": "D大海", + "v": "大海风景4K" + }, + { + "n": "F福建", + "v": "福建风景4K" + }, + { + "n": "G广东", + "v": "广东风景4K" + }, + { + "n": "G广西", + "v": "广西风景4K" + }, + { + "n": "G贵州", + "v": "贵州风景4K" + }, + { + "n": "G甘肃", + "v": "甘肃风景4K" + }, + { + "n": "H海南", + "v": "海南风景4K" + }, + { + "n": "H河北", + "v": "河北风景4K" + }, + { + "n": "H河南", + "v": "河南风景4K" + }, + { + "n": "H湖北", + "v": "湖北风景4K" + }, + { + "n": "H湖南", + "v": "湖南风景4K" + }, + { + "n": "H黑龙江", + "v": "黑龙江风景4K" + }, + { + "n": "J吉林", + "v": "吉林风景4K" + }, + { + "n": "J江苏", + "v": "江苏风景4K" + }, + { + "n": "J江西", + "v": "江西风景4K" + }, + { + "n": "L辽宁", + "v": "辽宁风景4K" + }, + { + "n": "M民宿", + "v": "民宿风景4K" + }, + { + "n": "N内蒙古", + "v": "内蒙古风景4K" + }, + { + "n": "N宁夏", + "v": "宁夏风景4K" + }, + { + "n": "Q青海", + "v": "青海风景4K" + }, + { + "n": "S上海", + "v": "上海风景4K" + }, + { + "n": "S陕西", + "v": "陕西风景4K" + }, + { + "n": "S四川", + "v": "四川风景4K" + }, + { + "n": "S山西", + "v": "山西风景4K" + }, + { + "n": "S山东", + "v": "山东风景4K" + }, + { + "n": "T天津", + "v": "天津风景4K" + }, + { + "n": "T台湾", + "v": "台湾风景4K" + }, + { + "n": "T天空", + "v": "天空风景4K" + }, + { + "n": "X西湖", + "v": "西湖风景4K" + }, + { + "n": "X西藏", + "v": "西藏风景4K" + }, + { + "n": "X新疆", + "v": "新疆风景4K" + }, + { + "n": "X香港", + "v": "香港风景4K" + }, + { + "n": "Y云南", + "v": "云南风景4K" + }, + { + "n": "Z浙江", + "v": "浙江风景4K" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "MV4K": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "MV4K" + }, + { + "n": "A阿杜", + "v": "阿杜MV4K" + }, + { + "n": "A阿黛尔", + "v": "阿黛尔MV4K" + }, + { + "n": "BBeyond", + "v": "BeyondMV4K" + }, + { + "n": "BBy2", + "v": "By2MV4K" + }, + { + "n": "BBIGBANG", + "v": "BIGBANGMV4K" + }, + { + "n": "B布兰妮", + "v": "布兰妮MV4K" + }, + { + "n": "C陈奕迅", + "v": "陈奕迅MV4K" + }, + { + "n": "C蔡依林", + "v": "蔡依林MV4K" + }, + { + "n": "C初音未来", + "v": "初音未来MV4K" + }, + { + "n": "C蔡健雅", + "v": "蔡健雅MV4K" + }, + { + "n": "C陈小春", + "v": "陈小春MV4K" + }, + { + "n": "C草蜢", + "v": "草蜢MV4K" + }, + { + "n": "C陈慧娴", + "v": "陈慧娴MV4K" + }, + { + "n": "C崔健", + "v": "崔健MV4K" + }, + { + "n": "C仓木麻衣", + "v": "仓木麻衣MV4K" + }, + { + "n": "D戴荃", + "v": "戴荃MV4K" + }, + { + "n": "D动力火车", + "v": "动力火车MV4K" + }, + { + "n": "D邓丽君", + "v": "邓丽君MV4K" + }, + { + "n": "D丁当", + "v": "丁当MV4K" + }, + { + "n": "D刀郎", + "v": "刀郎MV4K" + }, + { + "n": "D邓紫棋", + "v": "邓紫棋MV4K" + }, + { + "n": "D戴佩妮", + "v": "戴佩妮MV4K" + }, + { + "n": "D邓丽君", + "v": "邓丽君MV4K" + }, + { + "n": "F飞儿乐队", + "v": "飞儿乐队MV4K" + }, + { + "n": "F费玉清", + "v": "费玉清MV4K" + }, + { + "n": "F费翔", + "v": "费翔MV4K" + }, + { + "n": "F方大同", + "v": "方大同MV4K" + }, + { + "n": "F房东的猫", + "v": "房东的猫MV4K" + }, + { + "n": "F凤飞飞", + "v": "凤飞飞MV4K" + }, + { + "n": "F凤凰传奇", + "v": "凤凰传奇MV4K" + }, + { + "n": "G古风歌曲", + "v": "古风歌曲4K" + }, + { + "n": "G国乐大典", + "v": "国乐大典4K" + }, + { + "n": "G郭采洁", + "v": "郭采洁MV4K" + }, + { + "n": "G光良", + "v": "光良MV4K" + }, + { + "n": "G郭静", + "v": "郭静MV4K" + }, + { + "n": "G郭富城", + "v": "郭富城MV4K" + }, + { + "n": "H胡彦斌", + "v": "胡彦斌MV4K" + }, + { + "n": "H胡夏", + "v": "胡夏MV4K" + }, + { + "n": "H韩红", + "v": "韩红MV4K" + }, + { + "n": "H黄品源", + "v": "黄品源MV4K" + }, + { + "n": "H黄小琥", + "v": "黄小琥MV4K" + }, + { + "n": "H花儿乐队", + "v": "花儿乐队MV4K" + }, + { + "n": "H黄家强", + "v": "黄家强MV4K" + }, + { + "n": "H后街男孩", + "v": "后街男孩MV4K" + }, + { + "n": "J经典老歌", + "v": "经典老歌4K" + }, + { + "n": "J贾斯丁比伯", + "v": "贾斯丁比伯MV4K" + }, + { + "n": "J金池", + "v": "金池MV4K" + }, + { + "n": "J金志文", + "v": "金志文MV4K" + }, + { + "n": "J焦迈奇", + "v": "焦迈奇MV4K" + }, + { + "n": "K筷子兄弟", + "v": "筷子兄弟MV4K" + }, + { + "n": "L李玟", + "v": "李玟MV4K" + }, + { + "n": "L林忆莲", + "v": "林忆莲MV4K" + }, + { + "n": "L李克勤", + "v": "李克勤MV4K" + }, + { + "n": "L刘宪华", + "v": "刘宪华MV4K" + }, + { + "n": "L李圣杰", + "v": "李圣杰MV4K" + }, + { + "n": "L林宥嘉", + "v": "林宥嘉MV4K" + }, + { + "n": "L梁静茹", + "v": "梁静茹MV4K" + }, + { + "n": "L李健", + "v": "李健MV4K" + }, + { + "n": "L林俊杰", + "v": "林俊杰MV4K" + }, + { + "n": "L李玉刚", + "v": "李玉刚MV4K" + }, + { + "n": "L林志炫", + "v": "林志炫MV4K" + }, + { + "n": "L李荣浩", + "v": "李荣浩MV4K" + }, + { + "n": "L李宇春", + "v": "李宇春MV4K" + }, + { + "n": "L洛天依", + "v": "洛天依MV4K" + }, + { + "n": "L林子祥", + "v": "林子祥MV4K" + }, + { + "n": "L李宗盛", + "v": "李宗盛MV4K" + }, + { + "n": "L黎明", + "v": "黎明MV4K" + }, + { + "n": "L刘德华", + "v": "刘德华MV4K" + }, + { + "n": "L罗大佑", + "v": "罗大佑MV4K" + }, + { + "n": "L林肯公园", + "v": "林肯公园MV4K" + }, + { + "n": "LLadyGaga", + "v": "LadyGagaMV4K" + }, + { + "n": "L旅行团乐队", + "v": "旅行团乐队MV4K" + }, + { + "n": "M莫文蔚", + "v": "莫文蔚MV4K" + }, + { + "n": "M毛不易", + "v": "毛不易MV4K" + }, + { + "n": "M梅艳芳", + "v": "梅艳芳MV4K" + }, + { + "n": "M迈克尔杰克逊", + "v": "迈克尔杰克逊MV4K" + }, + { + "n": "N南拳妈妈", + "v": "南拳妈妈MV4K" + }, + { + "n": "P朴树", + "v": "朴树MV4K" + }, + { + "n": "Q齐秦", + "v": "齐秦MV4K" + }, + { + "n": "Q青鸟飞鱼", + "v": "青鸟飞鱼MV4K" + }, + { + "n": "R容祖儿", + "v": "容祖儿MV4K" + }, + { + "n": "R热歌", + "v": "热歌MV4K" + }, + { + "n": "R任贤齐", + "v": "任贤齐MV4K" + }, + { + "n": "S水木年华", + "v": "水木年华MV4K" + }, + { + "n": "S孙燕姿", + "v": "孙燕姿MV4K" + }, + { + "n": "S苏打绿", + "v": "苏打绿MV4K" + }, + { + "n": "SSHE", + "v": "SHEMV4K" + }, + { + "n": "S孙楠", + "v": "孙楠MV4K" + }, + { + "n": "T陶喆", + "v": "陶喆MV4K" + }, + { + "n": "T谭咏麟", + "v": "谭咏麟MV4K" + }, + { + "n": "T田馥甄", + "v": "田馥甄MV4K" + }, + { + "n": "T谭维维", + "v": "谭维维MV4K" + }, + { + "n": "T逃跑计划", + "v": "逃跑计划MV4K" + }, + { + "n": "T田震", + "v": "田震MV4K" + }, + { + "n": "T谭晶", + "v": "谭晶MV4K" + }, + { + "n": "T屠洪刚", + "v": "屠洪刚MV4K" + }, + { + "n": "T泰勒·斯威夫特", + "v": "泰勒·斯威夫特MV4K" + }, + { + "n": "W王力宏", + "v": "王力宏MV4K" + }, + { + "n": "W王杰", + "v": "王杰MV4K" + }, + { + "n": "W吴克群", + "v": "吴克群MV4K" + }, + { + "n": "W王心凌", + "v": "王心凌MV4K" + }, + { + "n": "W汪峰", + "v": "汪峰MV4K" + }, + { + "n": "W伍佰", + "v": "伍佰MV4K" + }, + { + "n": "W王菲", + "v": "王菲MV4K" + }, + { + "n": "W五月天", + "v": "五月天MV4K" + }, + { + "n": "W汪苏泷", + "v": "汪苏泷MV4K" + }, + { + "n": "X徐佳莹", + "v": "徐佳莹MV4K" + }, + { + "n": "X弦子", + "v": "弦子MV4K" + }, + { + "n": "X萧亚轩", + "v": "萧亚轩MV4K" + }, + { + "n": "X许巍", + "v": "许巍MV4K" + }, + { + "n": "X薛之谦", + "v": "薛之谦MV4K" + }, + { + "n": "X许嵩", + "v": "许嵩MV4K" + }, + { + "n": "X小虎队", + "v": "小虎队MV4K" + }, + { + "n": "X萧敬腾", + "v": "萧敬腾MV4K" + }, + { + "n": "X谢霆锋", + "v": "谢霆锋MV4K" + }, + { + "n": "X徐小凤", + "v": "徐小凤MV4K" + }, + { + "n": "X信乐队", + "v": "信乐队MV4K" + }, + { + "n": "Y夜愿乐队", + "v": "夜愿乐队MV4K" + }, + { + "n": "Y原创音乐", + "v": "原创音乐MV4K" + }, + { + "n": "Y羽泉", + "v": "羽泉MV4K" + }, + { + "n": "Y粤语", + "v": "粤语MV4K" + }, + { + "n": "Y郁可唯", + "v": "郁可唯MV4K" + }, + { + "n": "Y叶倩文", + "v": "叶倩文MV4K" + }, + { + "n": "Y杨坤", + "v": "杨坤MV4K" + }, + { + "n": "Y庾澄庆", + "v": "庾澄庆MV4K" + }, + { + "n": "Y尤长靖", + "v": "尤长靖MV4K" + }, + { + "n": "Y易烊千玺", + "v": "易烊千玺MV4K" + }, + { + "n": "Y袁娅维", + "v": "袁娅维MV4K" + }, + { + "n": "Y杨丞琳", + "v": "杨丞琳MV4K" + }, + { + "n": "Y杨千嬅", + "v": "杨千嬅MV4K" + }, + { + "n": "Y杨宗纬", + "v": "杨宗纬MV4K" + }, + { + "n": "Z周杰伦", + "v": "周杰伦MV4K" + }, + { + "n": "Z张学友", + "v": "张学友MV4K" + }, + { + "n": "Z张信哲", + "v": "张信哲MV4K" + }, + { + "n": "Z张宇", + "v": "张宇MV4K" + }, + { + "n": "Z周华健", + "v": "周华健MV4K" + }, + { + "n": "Z张韶涵", + "v": "张韶涵MV4K" + }, + { + "n": "Z周深", + "v": "周深MV4K" + }, + { + "n": "Z纵贯线", + "v": "纵贯线MV4K" + }, + { + "n": "Z赵雷", + "v": "赵雷MV4K" + }, + { + "n": "Z周传雄", + "v": "周传雄MV4K" + }, + { + "n": "Z张国荣", + "v": "张国荣MV4K" + }, + { + "n": "Z周慧敏", + "v": "周慧敏MV4K" + }, + { + "n": "Z张惠妹", + "v": "张惠妹MV4K" + }, + { + "n": "Z周笔畅", + "v": "周笔畅MV4K" + }, + { + "n": "Z郑中基", + "v": "郑中基MV4K" + }, + { + "n": "Z张艺兴", + "v": "张艺兴MV4K" + }, + { + "n": "Z张震岳", + "v": "张震岳MV4K" + }, + { + "n": "Z中国好声音", + "v": "中国好声音MV4K" + }, + { + "n": "Z张雨生", + "v": "张雨生MV4K" + }, + { + "n": "Z郑智化", + "v": "郑智化MV4K" + }, + { + "n": "Z卓依婷", + "v": "卓依婷MV4K" + }, + { + "n": "Z中岛美雪", + "v": "中岛美雪MV4K" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + + "帕梅拉": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "帕梅拉" + }, + { + "n": "瘦腿", + "v": "帕梅拉瘦腿" + }, + { + "n": "腹部", + "v": "帕梅拉腹部" + }, + { + "n": "手臂", + "v": "帕梅拉手臂" + }, + { + "n": "热身", + "v": "帕梅拉热身" + }, + { + "n": "舞蹈", + "v": "帕梅拉舞蹈" + }, + { + "n": "燃脂", + "v": "帕梅拉燃脂" + }, + { + "n": "有氧", + "v": "帕梅拉有氧" + }, + { + "n": "拉伸", + "v": "帕梅拉拉伸" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + + "知名UP主": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "知名UP主" + }, + { + "n": "菠萝赛东", + "v": "菠萝赛东" + }, + { + "n": "冯提莫", + "v": "冯提莫" + }, + { + "n": "林延秋", + "v": "林延秋" + }, + { + "n": "-LKs-", + "v": "-LKs-" + }, + { + "n": "小约翰可汗", + "v": "小约翰可汗" + }, + { + "n": "low馆长", + "v": "low馆长" + }, + { + "n": "自说自话的总裁", + "v": "自说自话的总裁" + }, + { + "n": "所长林超", + "v": "所长林超" + }, + { + "n": "世界未解之谜M", + "v": "世界未解之谜M" + }, + { + "n": "李永乐老师官方", + "v": "李永乐老师官方" + }, + { + "n": "罗兹", + "v": "罗兹" + }, + { + "n": "回到2049", + "v": "回到2049" + }, + { + "n": "二次元的中科院物理所", + "v": "二次元的中科院物理所" + }, + { + "n": "毕导THU", + "v": "毕导THU" + }, + { + "n": "罗翔讲刑法", + "v": "罗翔讲刑法" + }, + { + "n": "戴博士实验室", + "v": "戴博士实验室" + }, + { + "n": "芳斯塔芙", + "v": "芳斯塔芙" + }, + { + "n": "参赛者网", + "v": "参赛者网" + }, + { + "n": "三维地图看世界", + "v": "三维地图看世界" + }, + { + "n": "有机社会", + "v": "有机社会" + }, + { + "n": "乌鸦校尉CaptainWuya", + "v": "乌鸦校尉CaptainWuya" + }, + { + "n": "果壳", + "v": "果壳" + }, + { + "n": "严伯钧", + "v": "严伯钧" + }, + { + "n": "是你们的康康", + "v": "是你们的康康" + }, + { + "n": "老爸评测", + "v": "老爸评测" + }, + { + "n": "硬核的半佛仙人", + "v": "硬核的半佛仙人" + }, + { + "n": "盗月社食遇记", + "v": "盗月社食遇记" + }, + { + "n": "我是郭杰瑞", + "v": "我是郭杰瑞" + }, + { + "n": "无穷小亮的科普日常", + "v": "无穷小亮的科普日常" + }, + { + "n": "papi酱", + "v": "papi酱" + }, + { + "n": "老番茄", + "v": "老番茄" + }, + { + "n": "绵羊料理", + "v": "绵羊料理" + }, + { + "n": "老师好我叫何同学", + "v": "老师好我叫何同学" + }, + { + "n": "敬汉卿", + "v": "敬汉卿" + }, + { + "n": "周六野Zoey", + "v": "周六野Zoey" + }, + { + "n": "木鱼水心", + "v": "木鱼水心" + }, + { + "n": "凉风Kaze", + "v": "凉风Kaze" + }, + { + "n": "小潮院长", + "v": "小潮院长" + }, + { + "n": "中国BOY超级大猩猩", + "v": "中国BOY超级大猩猩" + }, + { + "n": "李子柒", + "v": "李子柒" + }, + { + "n": "敖厂长", + "v": "敖厂长" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "太极拳": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "太极拳" + }, + { + "n": "邱慧芳", + "v": "太极拳邱慧芳" + }, + { + "n": "陈氏", + "v": "太极拳陈氏" + }, + { + "n": "武当", + "v": "太极拳武当" + }, + { + "n": "二十四式", + "v": "太极拳二十四式" + }, + { + "n": "三十六式", + "v": "太极拳三十六式" + }, + { + "n": "五禽戏", + "v": "五禽戏" + }, + { + "n": "八段锦", + "v": "八段锦" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "舞蹈": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "舞蹈" + }, + { + "n": "宅舞", + "v": "宅舞" + }, + { + "n": "街舞", + "v": "街舞" + }, + { + "n": "中国舞", + "v": "中国舞" + }, + { + "n": "广场舞", + "v": "广场舞" + }, + { + "n": "交谊舞", + "v": "交谊舞" + }, + { + "n": "教程", + "v": "舞蹈教程" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "音乐": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "音乐" + }, + { + "n": "钢琴曲", + "v": "钢琴曲" + }, + { + "n": "协奏曲", + "v": "协奏曲r" + }, + { + "n": "中国古风音乐", + "v": "中国古风音乐" + }, + { + "n": "背景音乐", + "v": "背景音乐" + }, + { + "n": "助眠音乐r", + "v": "助眠音乐" + }, + { + "n": "胎教音乐", + "v": "胎教音乐" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "歌曲": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "歌曲" + }, + { + "n": "香港歌曲", + "v": "香港歌曲" + }, + { + "n": "台湾歌曲", + "v": "台湾歌曲" + }, + { + "n": "内地歌曲", + "v": "内地歌曲" + }, + { + "n": "英文歌曲", + "v": "英文歌曲" + }, + { + "n": "日文歌曲", + "v": "日文歌曲" + }, + { + "n": "小语种歌曲", + "v": "小语种歌曲" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "平面设计教学": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "平面设计教学" + }, + { + "n": "Adobe Photoshop", + "v": "Adobe Photoshop教程" + }, + { + "n": "Adobe Illustrator", + "v": "Adobe Illustrator教程" + }, + { + "n": "CorelDRAW", + "v": "CorelDRAW教程" + }, + { + "n": "Adobe InDesign", + "v": "Adobe InDesign教程" + }, + { + "n": "Adobe Pagermaker", + "v": "Adobe Pagermaker教程" + }, + { + "n": "SAI", + "v": "SAI教程" + }, + { + "n": "Adobe Bridge", + "v": "Adobe Bridge教程" + }, + { + "n": "Adobe Pagermaker", + "v": "Adobe Pagermake教程r" + }, + { + "n": "3D Studio Max", + "v": "3D Studio Max教程" + }, + { + "n": "PR", + "v": "PR教程" + }, + { + "n": "AE", + "v": "AE教程" + }, + { + "n": "CINEMA 4D", + "v": "CINEMA 4D教程" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "软件教程": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "软件教程" + }, + { + "n": "MT管理器", + "v": "MT管理器" + }, + { + "n": "NP管理器", + "v": "NP管理器" + }, + { + "n": "mixplorer", + "v": "mixplorer" + }, + { + "n": "脱壳", + "v": "脱壳" + }, + { + "n": "爬虫", + "v": "爬虫" + }, + { + "n": "json&jar", + "v": "json&jar" + }, + { + "n": "网盘挂载", + "v": "网盘挂载" + }, + { + "n": "alist+WebDav", + "v": "alist+WebDav" + }, + { + "n": "TVBox修改", + "v": "TVBox修改教程" + }, + { + "n": "EXCEL", + "v": "EXCEL教程" + }, + { + "n": "Git入门到精通", + "v": "Git入门到精通" + }, + { + "n": "java", + "v": "java教程" + }, + { + "n": "phyton", + "v": "phyton教程" + }, + { + "n": "xml", + "v": "xml教程" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "Windows": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "小姐姐超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "广场舞超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "舞曲超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "白噪音超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "搞笑": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "体育超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4K": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "足球比赛合集超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "篮球超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "动物世界超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "荒野求生超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "纪录片超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + + "食谱": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "食谱" + }, + { + "n": "川菜食谱", + "v": "川菜食谱" + }, + { + "n": "豫菜食谱", + "v": "豫菜食谱" + }, + { + "n": "淮扬菜食谱", + "v": "淮扬菜食谱" + }, + { + "n": "湘菜食谱", + "v": "湘菜食谱" + }, + { + "n": "鲁菜食谱", + "v": "鲁菜食谱" + }, + { + "n": "粤菜食谱", + "v": "粤菜食谱" + }, + { + "n": "潮菜食谱", + "v": "潮菜食谱" + }, + { + "n": "浙菜食谱", + "v": "浙菜食谱" + }, + { + "n": "徽菜食谱", + "v": "徽菜食谱" + }, + { + "n": "闽菜食谱", + "v": "闽菜食谱" + }, + { + "n": "苏菜食谱", + "v": "苏菜食谱" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "健身": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "健身" + }, + { + "n": "瘦腿", + "v": "瘦腿" + }, + { + "n": "腹部", + "v": "腹部" + }, + { + "n": "手臂", + "v": "手臂" + }, + { + "n": "热身", + "v": "热身" + }, + { + "n": "帕梅拉", + "v": "帕梅拉" + }, + { + "n": "燃脂", + "v": "燃脂" + }, + { + "n": "有氧", + "v": "有氧" + }, + { + "n": "拉伸", + "v": "拉伸" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "窗白噪音": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "美食超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "美食超清" + }, + { + "n": "舌尖上的中国", + "v": "舌尖上的中国超清" + }, + { + "n": "老字号", + "v": "老字号美食超清" + }, + { + "n": "家常菜", + "v": "家常菜美食超清" + }, + { + "n": "香港美食探店", + "v": "香港美食探店超清" + }, + { + "n": "澳门美食探店", + "v": "澳门美食探店超清" + }, + { + "n": "上海美食探店", + "v": "上海美食探店超清" + }, + { + "n": "北京美食探店", + "v": "北京美食探店超清" + }, + { + "n": "重庆美食探店", + "v": "重庆美食探店超清" + }, + { + "n": "南京美食探店", + "v": "南京美食探店超清" + }, + { + "n": "广州美食探店", + "v": "广州美食探店超清" + }, + { + "n": "杭州美食探店", + "v": "杭州美食探店超清" + }, + { + "n": "成都美食探店", + "v": "成都美食探店超清" + }, + { + "n": "苏州美食探店", + "v": "苏州美食探店超清" + }, + { + "n": "武汉美食探店", + "v": "武汉美食探店超清" + }, + { + "n": "台湾美食探店", + "v": "台湾美食探店超清" + }, + { + "n": "川菜", + "v": "川菜美食超清" + }, + { + "n": "豫菜", + "v": "豫菜美食超清" + }, + { + "n": "淮扬菜", + "v": "淮扬菜美食超清" + }, + { + "n": "湘菜", + "v": "湘菜美食超清" + }, + { + "n": "鲁菜", + "v": "鲁菜美食超清" + }, + { + "n": "粤菜", + "v": "粤菜美食超清" + }, + { + "n": "潮菜", + "v": "潮菜美食超清" + }, + { + "n": "浙菜", + "v": "浙菜美食超清" + }, + { + "n": "徽菜", + "v": "徽菜美食超清" + }, + { + "n": "闽菜", + "v": "闽菜美食超清" + }, + { + "n": "东北菜", + "v": "东北菜美食超清" + }, + { + "n": "客家菜", + "v": "客家菜美食超清" + }, + { + "n": "苏菜", + "v": "苏菜美食超清" + }, + + { + "n": "火锅", + "v": "火锅" + }, + { + "n": "面食", + "v": "面食" + }, + { + "n": "炒菜", + "v": "炒菜" + }, + { + "n": "点心", + "v": "点心" + }, + { + "n": "日料", + "v": "日料" + }, + { + "n": "小吃", + "v": "小吃" + }, + { + "n": "素食", + "v": "素食" + }, + { + "n": "蒸菜", + "v": "蒸菜" + }, + { + "n": "凉菜", + "v": "凉菜" + }, + { + "n": "早餐", + "v": "早餐" + }, + { + "n": "披萨", + "v": "披萨" + }, { + "n": "烤鱼", + "v": "烤鱼" + }, { + "n": "海鲜", + "v": "海鲜美食超清" + }, { + "n": "汉堡", + "v": "汉堡" + }, { + "n": "韩国菜", + "v": "韩国菜" + }, + { + "n": "泰国菜", + "v": "泰国菜" + }, { + "n": "穆斯林菜", + "v": "穆斯林菜" + }, { + "n": "法国菜", + "v": "法国菜" + }, { + "n": "意大利菜", + "v": "意大利菜" + }, + { + "n": "西班牙菜", + "v": "西班牙菜" + }, { + "n": "土耳其菜", + "v": "土耳其菜系" + }, { + "n": "阿拉伯菜", + "v": "阿拉伯菜" + }, { + "n": "德国菜", + "v": "德国菜" + } + + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "广场舞": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "球星": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "球星" + }, + { + "n": "梅西", + "v": "梅西" + }, + { + "n": "C罗", + "v": "C罗" + }, + { + "n": "天下足球", + "v": "天下足球" + }, + { + "n": "罗纳尔多", + "v": "罗纳尔多" + }, + { + "n": "亨利", + "v": "亨利" + }, + { + "n": "小罗", + "v": "小罗" + }, + { + "n": "齐达内", + "v": "齐达内" + }, + { + "n": "贝克汉姆", + "v": "贝克汉姆" + }, + { + "n": "内马尔", + "v": "内马尔" + }, + { + "n": "德布劳内", + "v": "德布劳内" + }, + { + "n": "欧冠", + "v": "欧冠" + }, + { + "n": "世界杯", + "v": "世界杯" + }, + { + "n": "西甲", + "v": "西甲" + }, + { + "n": "英超", + "v": "英超" + }, + { + "n": "意甲", + "v": "意甲" + }, + { + "n": "德甲", + "v": "德甲" + }, + { + "n": "国米", + "v": "国米" + }, + { + "n": "皇马", + "v": "皇马" + }, + { + "n": "巴萨", + "v": "巴萨" + }, + { + "n": "巴黎圣日耳曼", + "v": "巴黎圣日耳曼" + }, + { + "n": "曼联", + "v": "曼联" + }, + { + "n": "曼城", + "v": "曼城" + }, + { + "n": "NBA", + "v": "NBA" + }, + { + "n": "詹姆斯", + "v": "詹姆斯" + }, + { + "n": "库里", + "v": "库里" + }, + { + "n": "杜兰特", + "v": "杜兰特" + }, + { + "n": "UFC", + "v": "UFC" + }, + { + "n": "斯诺克", + "v": "斯诺克" + }, + { + "n": "网球", + "v": "网球" + }, + { + "n": "F1", + "v": "F1" + }, + { + "n": "高尔夫", + "v": "高尔夫" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "电视剧": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + + + "相声小品超清": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "相声小品" + }, + { + "n": "单口相声", + "v": "单口相声" + }, + { + "n": "群口相声", + "v": "群口相声" + }, + { + "n": "德云社", + "v": "德云社" + }, + { + "n": "青曲社", + "v": "青曲社" + }, + { + "n": "郭德纲", + "v": "郭德纲" + }, + { + "n": "岳云鹏", + "v": "岳云鹏" + }, + { + "n": "曹云金", + "v": "曹云金" + }, + { + "n": "评书", + "v": "评书" + }, + { + "n": "小曲", + "v": "小曲" + }, + { + "n": "二人转", + "v": "二人转" + }, + { + "n": "春晚小品", + "v": "春晚小品" + }, + { + "n": "赵本山", + "v": "赵本山" + }, + { + "n": "陈佩斯", + "v": "陈佩斯" + }, + { + "n": "冯巩", + "v": "冯巩" + }, + { + "n": "宋小宝", + "v": "宋小宝" + }, + { + "n": "赵丽蓉", + "v": "赵丽蓉" + }, + { + "n": "郭达", + "v": "郭达" + }, + { + "n": "潘长江", + "v": "潘长江" + }, + { + "n": "郭冬临", + "v": "郭冬临" + }, + { + "n": "严顺开", + "v": "严顺开" + }, + { + "n": "文松", + "v": "文松" + }, + { + "n": "开心麻花", + "v": "开心麻花" + }, + { + "n": "屌丝男士", + "v": "屌丝男士" + }, + { + "n": "喜剧综艺", + "v": "喜剧综艺" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "戏曲": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "戏曲" + }, + { + "n": "京剧", + "v": "京剧" + }, + { + "n": "越剧", + "v": "越剧" + }, + { + "n": "黄梅戏", + "v": "黄梅戏" + }, + { + "n": "评剧", + "v": "评剧" + }, + { + "n": "豫剧", + "v": "豫剧" + }, + { + "n": "昆曲", + "v": "昆曲" + }, + { + "n": "高腔", + "v": "高腔" + }, + { + "n": "梆子腔", + "v": "梆子腔" + }, + { + "n": "河北梆子", + "v": "河北梆子" + }, + { + "n": "晋剧", + "v": "晋剧" + }, + { + "n": "蒲剧", + "v": "蒲剧" + }, + { + "n": "雁剧", + "v": "雁剧" + }, + { + "n": "上党梆子", + "v": "上党梆子" + }, + { + "n": "秦腔", + "v": "秦腔" + }, + { + "n": "武安平调", + "v": "武安平调" + }, + { + "n": "二人台", + "v": "二人台" + }, + { + "n": "吉剧", + "v": "吉剧" + }, + { + "n": "龙江剧", + "v": "龙江剧" + }, + { + "n": "越调", + "v": "越调" + }, + { + "n": "河南曲剧", + "v": "河南曲剧" + }, + { + "n": "山东梆子", + "v": "山东梆子" + }, + { + "n": "淮剧", + "v": "淮剧" + }, + { + "n": "沪剧", + "v": "沪剧" + }, + { + "n": "滑稽戏", + "v": "滑稽戏" + }, + { + "n": "婺剧", + "v": "婺剧" + }, + { + "n": "绍剧", + "v": "绍剧" + }, + { + "n": "徽剧", + "v": "徽剧" + }, + { + "n": "闽剧", + "v": "闽剧" + }, + { + "n": "莆仙戏", + "v": "莆仙戏" + }, + { + "n": "梨园戏", + "v": "梨园戏" + }, + { + "n": "高甲戏", + "v": "高甲戏" + }, + { + "n": "赣剧", + "v": "赣剧" + }, + { + "n": "采茶戏", + "v": "采茶戏" + }, + { + "n": "汉剧", + "v": "汉剧" + }, + { + "n": "湘剧", + "v": "湘剧" + }, + { + "n": "祁剧", + "v": "祁剧" + }, + { + "n": "湖南花鼓戏", + "v": "湖南花鼓戏" + }, + { + "n": "粤剧", + "v": "粤剧" + }, + { + "n": "潮剧", + "v": "潮剧" + }, + { + "n": "桂剧", + "v": "桂剧" + }, + { + "n": "彩调", + "v": "彩调" + }, + { + "n": "壮剧", + "v": "壮剧" + }, + { + "n": "川剧", + "v": "川剧" + }, + { + "n": "黔剧", + "v": "黔剧" + }, + { + "n": "滇剧", + "v": "滇剧" + }, + { + "n": "傣剧", + "v": "傣剧" + }, + { + "n": "藏剧", + "v": "藏剧" + }, + { + "n": "皮影戏", + "v": "皮影戏" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "旅游": [{ + "key": "order", + "name": "排序", + "value": [{ + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + + "游泳": [{ + "key": "tid", + "name": "分类", + "value": [{ + "n": "全部", + "v": "泳姿" + }, + { + "n": "蝶泳", + "v": "蝶泳" + }, + { + "n": "仰泳", + "v": "仰泳" + }, + { + "n": "蛙泳", + "v": "蛙泳" + }, + { + "n": "自由泳", + "v": "自由泳" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [{ + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} diff --git a/py/plugin/搭讪.py b/py/plugin/搭讪.py new file mode 100644 index 0000000..60c3e7b --- /dev/null +++ b/py/plugin/搭讪.py @@ -0,0 +1,268 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "多多搭讪" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "美女搭讪":"美女搭讪", + "搭讪技巧":"搭讪技巧", + "女追男":"女追男", + "男追女":"男追女", + "街头搭讪":"街头搭讪", + "夜店搭讪":"夜店搭讪", + "商超搭讪":"商超搭讪", + "校园搭讪":"校园搭讪", + "搭讪失败":"搭讪失败" + + } + 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 = { + 'list':[] + } + return result + cookies = '' + def getCookie(self): + import requests + import http.cookies + # 这里填cookie + raw_cookie_line = "buvid3=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; LIVE_BUVID=AUTO4216125328906835; rpdid=|(umRum~uY~R0J'uYukYukkkY; balh_is_closed=; balh_server_inner=__custom__; PVID=4; video_page_version=v_old_home; i-wanna-go-back=-1; CURRENT_BLACKGAP=0; blackside_state=0; fingerprint=8965144a609d60190bd051578c610d72; buvid_fp_plain=undefined; CURRENT_QUALITY=120; hit-dyn-v2=1; nostalgia_conf=-1; buvid_fp=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; CURRENT_FNVAL=4048; DedeUserID=85342; DedeUserID__ckMd5=f070401c4c699c83; b_ut=5; hit-new-style-dyn=0; buvid4=15C64651-E8B7-100C-4B1F-C7CFD2DB473007906-022110820-jYQRaMeS%2BRXRfw14q70%2FLQ%3D%3D; b_nut=1667910208; b_lsid=3CE4AE79_184578915C0; is-2022-channel=1; innersign=0; SESSDATA=a5e4d58d%2C1683641322%2C2c39a%2Ab1; bili_jct=2f3126b5954e37f593130f2fef082cd8; sid=p7tjqv22; bp_video_offset_85342=726936847258746900" + simple_cookie = http.cookies.SimpleCookie(raw_cookie_line) + cookie_jar = requests.cookies.RequestsCookieJar() + cookie_jar.update(simple_cookie) + return cookie_jar + def get_dynamic(self,pg): + result = {} + + url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg) + + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + if vod['type'] == 'DYNAMIC_TYPE_AV': + ivod = vod['modules']['module_dynamic']['major']['archive'] + aid = str(ivod['aid']).strip() + title = ivod['title'].strip().replace("","").replace("","") + img = ivod['cover'].strip() + remark = str(ivod['duration_text']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def get_hot(self,pg): + result = {} + url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg) + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def get_rank(self): + result = {} + url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all' + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = 1 + result['pagecount'] = 1 + result['limit'] = 90 + result['total'] = 999999 + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if tid == "热门": + return self.get_hot(pg=pg) + if tid == "排行榜" : + return self.get_rank() + if tid == '动态': + return self.get_dynamic(pg=pg) + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url,cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = tid + ":" + vod['title'].strip().replace("","").replace("","") + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + + rsp = self.fetch(url,headers=self.header,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("","").replace("","") + pic = jo['pic'] + desc = jo['desc'] + typeName = jo['tname'] + vod = { + "vod_id":aid, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":"bilidanmu", + "vod_remarks":"", + "vod_actor":jo['owner']['name'], + "vod_director":jo['owner']['name'], + "vod_content":desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'] + playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid) + + vod['vod_play_from'] = 'B站' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + search = self.categoryContent(tid=key,pg=1,filter=None,extend=None) + result = { + 'list':search['list'] + } + return result + def playerContent(self,flag,id,vipFlags): + # https://www.555dianying.cc/vodplay/static/js/playerconfig.js + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1]) + rsp = self.fetch(url,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + } + result["contentType"] = 'video/x-flv' + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] diff --git a/py/plugin/搭配.py b/py/plugin/搭配.py new file mode 100644 index 0000000..751e0b2 --- /dev/null +++ b/py/plugin/搭配.py @@ -0,0 +1,277 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "多多搭配" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "内衣":"内衣", + "男生搭配":"男生搭配", + "女生搭配":"女生搭配", + "裙子":"裙子", + "紧身裤":"紧身裤", + "吊带衫":"吊带衫", + "娃娃衣":"娃娃衣", + "牛仔裙":"牛仔裙", + "丝袜":"丝袜", +"雪纺":"雪纺", + "礼服":"礼服", +"裤子":"裤子", +"西装":"西装", + "领带":"领带", + "衬衫":"衬衫", + "卫衣":"卫衣", + "T恤":"T恤", + "Polo衫":"Polo衫" + + } + 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 = { + 'list':[] + } + return result + cookies = '' + def getCookie(self): + import requests + import http.cookies + # 这里填cookie + raw_cookie_line = "buvid3=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; LIVE_BUVID=AUTO4216125328906835; rpdid=|(umRum~uY~R0J'uYukYukkkY; balh_is_closed=; balh_server_inner=__custom__; PVID=4; video_page_version=v_old_home; i-wanna-go-back=-1; CURRENT_BLACKGAP=0; blackside_state=0; fingerprint=8965144a609d60190bd051578c610d72; buvid_fp_plain=undefined; CURRENT_QUALITY=120; hit-dyn-v2=1; nostalgia_conf=-1; buvid_fp=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; CURRENT_FNVAL=4048; DedeUserID=85342; DedeUserID__ckMd5=f070401c4c699c83; b_ut=5; hit-new-style-dyn=0; buvid4=15C64651-E8B7-100C-4B1F-C7CFD2DB473007906-022110820-jYQRaMeS%2BRXRfw14q70%2FLQ%3D%3D; b_nut=1667910208; b_lsid=3CE4AE79_184578915C0; is-2022-channel=1; innersign=0; SESSDATA=a5e4d58d%2C1683641322%2C2c39a%2Ab1; bili_jct=2f3126b5954e37f593130f2fef082cd8; sid=p7tjqv22; bp_video_offset_85342=726936847258746900" + simple_cookie = http.cookies.SimpleCookie(raw_cookie_line) + cookie_jar = requests.cookies.RequestsCookieJar() + cookie_jar.update(simple_cookie) + return cookie_jar + def get_dynamic(self,pg): + result = {} + + url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg) + + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + if vod['type'] == 'DYNAMIC_TYPE_AV': + ivod = vod['modules']['module_dynamic']['major']['archive'] + aid = str(ivod['aid']).strip() + title = ivod['title'].strip().replace("","").replace("","") + img = ivod['cover'].strip() + remark = str(ivod['duration_text']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def get_hot(self,pg): + result = {} + url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg) + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def get_rank(self): + result = {} + url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all' + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = 1 + result['pagecount'] = 1 + result['limit'] = 90 + result['total'] = 999999 + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if tid == "热门": + return self.get_hot(pg=pg) + if tid == "排行榜" : + return self.get_rank() + if tid == '动态': + return self.get_dynamic(pg=pg) + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url,cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = tid + ":" + vod['title'].strip().replace("","").replace("","") + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + + rsp = self.fetch(url,headers=self.header,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("","").replace("","") + pic = jo['pic'] + desc = jo['desc'] + typeName = jo['tname'] + vod = { + "vod_id":aid, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":"bilidanmu", + "vod_remarks":"", + "vod_actor":jo['owner']['name'], + "vod_director":jo['owner']['name'], + "vod_content":desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'] + playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid) + + vod['vod_play_from'] = 'B站' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + search = self.categoryContent(tid=key,pg=1,filter=None,extend=None) + result = { + 'list':search['list'] + } + return result + def playerContent(self,flag,id,vipFlags): + # https://www.555dianying.cc/vodplay/static/js/playerconfig.js + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1]) + rsp = self.fetch(url,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + } + result["contentType"] = 'video/x-flv' + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] diff --git a/py/plugin/歌手合集.py b/py/plugin/歌手合集.py new file mode 100644 index 0000000..d1704ab --- /dev/null +++ b/py/plugin/歌手合集.py @@ -0,0 +1,419 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "歌手专辑" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "周杰伦":"周杰伦", +"Beyond":"Beyond", +"陈奕迅":"陈奕迅", +"许巍":"许巍", +"刘德华":"刘德华", +"张学友":"张学友", +"郭富城":"郭富城", +"黎明":"黎明", +"朴树":"朴树", +"迪克牛仔":"迪克牛仔", +"李宗盛":"李宗盛", +"邓丽君":"邓丽君", +"林子祥":"林子祥", +"张信哲":"张信哲", +"任贤齐":"任贤齐", +"孙楠":"孙楠", +"张宇":"张宇", +"周华健":"周华健", +"蔡依林":"蔡依林", +"薛之谦":"薛之谦", +"许嵩":"许嵩", +"初音未来":"初音未来", +"洛天依":"洛天依", +"戴佩妮":"戴佩妮", +"邓紫棋":"邓紫棋", +"蔡健雅":"蔡健雅", +"张韶涵":"张韶涵", +"莫文蔚":"莫文蔚", +"刘若英":"刘若英", +"周深":"周深", +"毛不易":"毛不易", +"汪苏泷":"汪苏泷", +"李宇春":"李宇春", +"徐佳莹":"徐佳莹", +"杨宗纬":"杨宗纬", +"胡彦斌":"胡彦斌", +"杨千嬅":"杨千嬅", +"张靓颖":"张靓颖", +"李荣浩":"李荣浩", +"杨丞琳":"杨丞琳", +"林志炫":"林志炫", +"陶喆":"陶喆", +"胡夏":"胡夏", +"弦子":"弦子", +"陈小春":"陈小春", +"萧亚轩":"萧亚轩", +"鹿晗":"鹿晗", +"纵贯线":"纵贯线", +"林俊杰":"林俊杰", +"谭咏麟":"谭咏麟", +"赵雷":"赵雷", +"凤凰传奇":"凤凰传奇", +"容祖儿":"容祖儿", +"周传雄":"周传雄", +"SHE":"SHE", +"苏打绿":"苏打绿", +"五月天":"五月天", +"张国荣":"张国荣", +"梅艳芳":"梅艳芳", +"孙燕姿":"孙燕姿", +"李健":"李健", +"华晨宇":"华晨宇", +"袁娅维":"袁娅维", +"大张伟":"大张伟", +"TFBOYS":"TFBOYS", +"易烊千玺":"易烊千玺", +"王俊凯":"王俊凯", +"王源":"王源", +"田馥甄":"田馥甄", +"小虎队":"小虎队", +"张杰":"张杰", +"伍佰":"伍佰", +"王菲":"王菲", +"刀郎":"刀郎", +"草蜢":"草蜢", +"潘玮柏":"潘玮柏", +"梁静茹":"梁静茹", +"林宥嘉":"林宥嘉", +"蔡徐坤":"蔡徐坤", +"周慧敏":"周慧敏", +"李圣杰":"李圣杰", +"张惠妹":"张惠妹", +"萧敬腾":"萧敬腾", +"周笔畅":"周笔畅", +"焦迈奇":"焦迈奇", +"尤长靖":"尤长靖", +"郑中基":"郑中基", +"谭维维":"谭维维", +"陈慧娴":"陈慧娴", +"张艺兴":"张艺兴", +"王嘉尔":"王嘉尔", +"刘宪华":"刘宪华", +"张敬轩":"张敬轩", +"李克勤":"李克勤", +"阿杜":"阿杜", +"郭静":"郭静", +"崔健":"崔健", +"庾澄庆":"庾澄庆", +"汪峰":"汪峰", +"那英":"那英", +"杨坤":"杨坤", +"叶倩文":"叶倩文", +"王心凌":"王心凌", +"张震岳":"张震岳", +"韩红":"韩红", +"齐秦":"齐秦", +"张雨生":"张雨生", +"黄品源":"黄品源", +"林忆莲":"林忆莲", +"丁当":"丁当", +"郑智化":"郑智化", +"李玟":"李玟", +"谢霆锋":"谢霆锋", +"黄小琥":"黄小琥", +"徐小凤":"徐小凤", +"任嘉伦":"任嘉伦", +"卓依婷":"卓依婷", +"逃跑计划":"逃跑计划", +"青鸟飞鱼":"青鸟飞鱼", +"飞儿乐队":"飞儿乐队", +"花儿乐队":"花儿乐队", +"南拳妈妈":"南拳妈妈", +"水木年华":"水木年华", +"动力火车":"动力火车", +"筷子兄弟":"筷子兄弟", +"鹿先森乐队":"鹿先森乐队", +"信乐队":"信乐队", +"旅行团乐队":"旅行团乐队", +"By2":"By2", +"郁可唯":"郁可唯", +"宋亚森":"宋亚森", +"费玉清":"费玉清", +"费翔":"费翔", +"金志文":"金志文", +"方大同":"方大同", +"吴克群":"吴克群", +"罗大佑":"罗大佑", +"光良":"光良", +"凤飞飞":"凤飞飞", +"田震":"田震", +"谭晶":"谭晶", +"王杰":"王杰", +"羽泉":"羽泉", +"金池":"金池", +"屠洪刚":"屠洪刚", +"戴荃":"戴荃", +"郭采洁":"郭采洁", +"罗志祥":"罗志祥", +"王力宏":"王力宏", +"林肯公园":"林肯公园", +"迈克尔杰克逊":"迈克尔杰克逊", +"泰勒·斯威夫特":"泰勒·斯威夫特", +"阿黛尔":"阿黛尔", +"BIGBANG":"BIGBANG", +"贾斯丁比伯":"贾斯丁比伯", +"Lady Gaga":"Lady Gaga", +"中岛美雪":"中岛美雪", +"后街男孩":"后街男孩", +"仓木麻衣":"仓木麻衣", +"布兰妮":"布兰妮", +"夜愿乐队":"夜愿乐队" + } + 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 = { + 'list':[] + } + return result + cookies = '' + def getCookie(self): + import requests + import http.cookies + # 这里填cookie + raw_cookie_line = "buvid3=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; LIVE_BUVID=AUTO4216125328906835; rpdid=|(umRum~uY~R0J'uYukYukkkY; balh_is_closed=; balh_server_inner=__custom__; PVID=4; video_page_version=v_old_home; i-wanna-go-back=-1; CURRENT_BLACKGAP=0; blackside_state=0; fingerprint=8965144a609d60190bd051578c610d72; buvid_fp_plain=undefined; CURRENT_QUALITY=120; hit-dyn-v2=1; nostalgia_conf=-1; buvid_fp=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; CURRENT_FNVAL=4048; DedeUserID=85342; DedeUserID__ckMd5=f070401c4c699c83; b_ut=5; hit-new-style-dyn=0; buvid4=15C64651-E8B7-100C-4B1F-C7CFD2DB473007906-022110820-jYQRaMeS%2BRXRfw14q70%2FLQ%3D%3D; b_nut=1667910208; b_lsid=3CE4AE79_184578915C0; is-2022-channel=1; innersign=0; SESSDATA=a5e4d58d%2C1683641322%2C2c39a%2Ab1; bili_jct=2f3126b5954e37f593130f2fef082cd8; sid=p7tjqv22; bp_video_offset_85342=726936847258746900" + simple_cookie = http.cookies.SimpleCookie(raw_cookie_line) + cookie_jar = requests.cookies.RequestsCookieJar() + cookie_jar.update(simple_cookie) + return cookie_jar + def get_dynamic(self,pg): + result = {} + + url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg) + + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + if vod['type'] == 'DYNAMIC_TYPE_AV': + ivod = vod['modules']['module_dynamic']['major']['archive'] + aid = str(ivod['aid']).strip() + title = ivod['title'].strip().replace("","").replace("","") + img = ivod['cover'].strip() + remark = str(ivod['duration_text']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def get_hot(self,pg): + result = {} + url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg) + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def get_rank(self): + result = {} + url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all' + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = 1 + result['pagecount'] = 1 + result['limit'] = 90 + result['total'] = 999999 + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if tid == "热门": + return self.get_hot(pg=pg) + if tid == "排行榜" : + return self.get_rank() + if tid == '动态': + return self.get_dynamic(pg=pg) + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url,cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = tid + ":" + vod['title'].strip().replace("","").replace("","") + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + + rsp = self.fetch(url,headers=self.header,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("","").replace("","") + pic = jo['pic'] + desc = jo['desc'] + typeName = jo['tname'] + vod = { + "vod_id":aid, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":"bilidanmu", + "vod_remarks":"", + "vod_actor":jo['owner']['name'], + "vod_director":jo['owner']['name'], + "vod_content":desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'] + playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid) + + vod['vod_play_from'] = 'B站' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + search = self.categoryContent(tid=key,pg=1,filter=None,extend=None) + result = { + 'list':search['list'] + } + return result + def playerContent(self,flag,id,vipFlags): + # https://www.555dianying.cc/vodplay/static/js/playerconfig.js + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1]) + rsp = self.fetch(url,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + } + result["contentType"] = 'video/x-flv' + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""] diff --git a/py/plugin/高中教育.py b/py/plugin/高中教育.py new file mode 100644 index 0000000..687f8dc --- /dev/null +++ b/py/plugin/高中教育.py @@ -0,0 +1,287 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "高中" + def init(self,extend=""): + print("============{0}============".format(extend)) + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "高一语文":"高一语文", + "高一数学":"高一数学", + "高一英语":"高一英语", + "高一历史":"高一历史", +"高一地理":"高一地理", + "高一生物":"高一生物", + "高一思想政治":"高一思想政治", +"高一物理":"高一物理", + "高一化学":"高一化学", +"高二语文":"高二语文", + "高二数学":"高二数学", + "高二英语":"高二英语", + "高二历史":"高二历史", +"高二地理":"高二地理", + "高二生物":"高二生物", + "高二思想政治":"高二思想政治", +"高二物理":"高二物理", + "高二化学":"高二化学", +"高三语文":"高三语文", + "高三数学":"高三数学", + "高三英语":"高三英语", + "高三历史":"高三历史", +"高三地理":"高三地理", + "高三生物":"高三生物", + "高三思想政治":"高三思想政治", +"高三物理":"高三物理", + "高三化学":"高三化学", +"高中信息技术":"高中信息技术", + "高中信息技术":"高中信息技术" + } + 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 = { + 'list':[] + } + return result + cookies = '' + def getCookie(self): + import requests + import http.cookies + # 这里填cookie + raw_cookie_line = "buvid3=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; LIVE_BUVID=AUTO4216125328906835; rpdid=|(umRum~uY~R0J'uYukYukkkY; balh_is_closed=; balh_server_inner=__custom__; PVID=4; video_page_version=v_old_home; i-wanna-go-back=-1; CURRENT_BLACKGAP=0; blackside_state=0; fingerprint=8965144a609d60190bd051578c610d72; buvid_fp_plain=undefined; CURRENT_QUALITY=120; hit-dyn-v2=1; nostalgia_conf=-1; buvid_fp=CFF74DA7-E79E-4B53-BB96-FC74AB8CD2F3184997infoc; CURRENT_FNVAL=4048; DedeUserID=85342; DedeUserID__ckMd5=f070401c4c699c83; b_ut=5; hit-new-style-dyn=0; buvid4=15C64651-E8B7-100C-4B1F-C7CFD2DB473007906-022110820-jYQRaMeS%2BRXRfw14q70%2FLQ%3D%3D; b_nut=1667910208; b_lsid=3CE4AE79_184578915C0; is-2022-channel=1; innersign=0; SESSDATA=a5e4d58d%2C1683641322%2C2c39a%2Ab1; bili_jct=2f3126b5954e37f593130f2fef082cd8; sid=p7tjqv22; bp_video_offset_85342=726936847258746900" + simple_cookie = http.cookies.SimpleCookie(raw_cookie_line) + cookie_jar = requests.cookies.RequestsCookieJar() + cookie_jar.update(simple_cookie) + return cookie_jar + def get_dynamic(self,pg): + result = {} + + url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg) + + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['items'] + for vod in vodList: + if vod['type'] == 'DYNAMIC_TYPE_AV': + ivod = vod['modules']['module_dynamic']['major']['archive'] + aid = str(ivod['aid']).strip() + title = ivod['title'].strip().replace("","").replace("","") + img = ivod['cover'].strip() + remark = str(ivod['duration_text']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def get_hot(self,pg): + result = {} + url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg) + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def get_rank(self): + result = {} + url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all' + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] == 0: + videos = [] + vodList = jo['data']['list'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = vod['title'].strip().replace("","").replace("","") + img = vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = 1 + result['pagecount'] = 1 + result['limit'] = 90 + result['total'] = 999999 + return result + def categoryContent(self,tid,pg,filter,extend): + result = {} + if tid == "热门": + return self.get_hot(pg=pg) + if tid == "排行榜" : + return self.get_rank() + if tid == '动态': + return self.get_dynamic(pg=pg) + url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg) + if len(self.cookies) <= 0: + self.getCookie() + rsp = self.fetch(url,cookies=self.getCookie()) + content = rsp.text + jo = json.loads(content) + if jo['code'] != 0: + rspRetry = self.fetch(url,cookies=self.getCookie()) + content = rspRetry.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + for vod in vodList: + aid = str(vod['aid']).strip() + title = tid + ":" + vod['title'].strip().replace("","").replace("","") + img = 'https:' + vod['pic'].strip() + remark = str(vod['duration']).strip() + videos.append({ + "vod_id":aid, + "vod_name":title, + "vod_pic":img, + "vod_remarks":remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def cleanSpace(self,str): + return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','') + def detailContent(self,array): + aid = array[0] + url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid) + + rsp = self.fetch(url,headers=self.header,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + title = jo['title'].replace("","").replace("","") + pic = jo['pic'] + desc = jo['desc'] + typeName = jo['tname'] + vod = { + "vod_id":aid, + "vod_name":title, + "vod_pic":pic, + "type_name":typeName, + "vod_year":"", + "vod_area":"bilidanmu", + "vod_remarks":"", + "vod_actor":jo['owner']['name'], + "vod_director":jo['owner']['name'], + "vod_content":desc + } + ja = jo['pages'] + playUrl = '' + for tmpJo in ja: + cid = tmpJo['cid'] + part = tmpJo['part'] + playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid) + + vod['vod_play_from'] = 'B站' + vod['vod_play_url'] = playUrl + + result = { + 'list':[ + vod + ] + } + return result + def searchContent(self,key,quick): + search = self.categoryContent(tid=key,pg=1,filter=None,extend=None) + result = { + 'list':search['list'] + } + return result + def playerContent(self,flag,id,vipFlags): + # https://www.555dianying.cc/vodplay/static/js/playerconfig.js + result = {} + + ids = id.split("_") + url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1]) + rsp = self.fetch(url,cookies=self.getCookie()) + jRoot = json.loads(rsp.text) + jo = jRoot['data'] + ja = jo['durl'] + + maxSize = -1 + position = -1 + for i in range(len(ja)): + tmpJo = ja[i] + if maxSize < int(tmpJo['size']): + maxSize = int(tmpJo['size']) + position = i + + url = '' + if len(ja) > 0: + if position == -1: + position = 0 + url = ja[position]['url'] + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = { + "Referer":"https://www.bilibili.com", + "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + } + result["contentType"] = 'video/x-flv' + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + return [200, "video/MP2T", action, ""]