一点尝试,获取纯净的播放地址,并使用播放器播放,代码如下
#----------------------import-------------------------
import requests,os
import easygui as g
import time
from threading import Thread
#----------------------常数区---------------------------
res = requests.session()
dic={}
#----cookie保存在cookie.txt文件-----
cookie=open('cookie.txt','r').read()
h={
"cookie": cookie
}
#----------------------函数区------------------------------
#-------获取地址---------
def getm3u8(cid):
url = 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id='+str(cid)+'&no_playurl=0&mask=1&qn=0&platform=web&protocol=0,1&format=0,2&codec=0,1'
s = res.get(url,headers=h).json()['data']['playurl_info']['playurl']['stream'][0]['format'][0]['codec'][0]
#stream【0】获取的是flv地址,需配合extra使用,strea【1】获取的是m3u8地址,无需配合extra,但不是所有但房间都有m3u8地址
return s['url_info'][0]['host']+s['base_url']+s['url_info'][0]['extra']
#------本地播放-----------
def play(s):
ss = '/Applications/IINA.app/Contents/MacOS/IINA "'#此为mac播放器IIna,如使用ffplay,此行换为 ss='ffplay -v warning "'
cmd = ss + s+'"'
os.system(cmd)
#------获取直播列表-------
def getlist():
page=1
sat=1
ts=str(int(time.time()*1000))
while sat!=0:
url='https://api.live.bilibili.com/xlive/web-ucenter/v1/xfetter/GetWebList?page='+str(page)+'&page_size=10&_='+ts
s=res.get(url,headers=h).json()['data']['list']
sat=len(s)
for i in s:
rid=i['roomid']
name=i['uname']
dic.update({name:rid})
page+=1
#-------简易ui-------------
def mai():
cho = g.choicebox('', '', choices=dic.keys())
if cho!=None:
url = getm3u8(dic[cho])
Thread(target=play,args=(url,)).start()
mai()
#--------------------主函数---------------------------
if __name__ == '__main__':
getlist()
mai()
一点个人的尝试,实际使用价值不是很大,目前能想到的用处就是地址获取后也可以用软件进行录播,也欢迎大家一起交流
这是老魏的公众号,会发布一些爬虫案例和经验分享,感兴趣的小伙伴可以关注下哦