mirror of https://github.com/gaotianliuyun/gao
parent
0a2dd3ff9f
commit
4951c12e48
@ -0,0 +1,175 @@ |
||||
#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 = { |
||||
"Zard": "Zard", |
||||
"玩具汽车": "玩具汽车", |
||||
"儿童": "儿童", |
||||
"幼儿": "幼儿", |
||||
"儿童玩具": "儿童玩具", |
||||
"昆虫": "昆虫", |
||||
"动物世界": "动物世界", |
||||
"纪录片": "纪录片", |
||||
"相声小品": "相声小品", |
||||
"搞笑": "搞笑", |
||||
"假窗-白噪音": "窗+白噪音", |
||||
"演唱会": "演唱会" |
||||
} |
||||
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): |
||||
rsp = self.fetch("https://www.bilibili.com/") |
||||
self.cookies = rsp.cookies |
||||
return rsp.cookies |
||||
def categoryContent(self,tid,pg,filter,extend): |
||||
result = {} |
||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&duration=4&page={1}'.format(tid,pg) |
||||
if len(self.cookies) <= 0: |
||||
self.getCookie() |
||||
rsp = self.fetch(url,cookies=self.cookies) |
||||
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 = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","") |
||||
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) |
||||
jRoot = json.loads(rsp.text) |
||||
jo = jRoot['data'] |
||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","") |
||||
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":"", |
||||
"vod_remarks":"", |
||||
"vod_actor":"", |
||||
"vod_director":"", |
||||
"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): |
||||
result = { |
||||
'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) |
||||
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, ""] |
||||
Loading…
Reference in new issue