mirror of https://github.com/gaotianliuyun/gao
parent
0ec545e38b
commit
0a2dd3ff9f
@ -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