mirror of
https://github.com/wbt5/real-url.git
synced 2025-08-01 14:48:01 +08:00
更新哔哩哔哩直播
This commit is contained in:
parent
dbb54c8e89
commit
3f0c3c6abe
99
bilibili.py
99
bilibili.py
@ -1,61 +1,50 @@
|
||||
# 获取哔哩哔哩直播的真实流媒体地址。
|
||||
# PC网页和手机APP端的qn=1是最高画质;qn取值0~4。
|
||||
# 手机网页端的只找到一个值qn=0。
|
||||
|
||||
# 获取哔哩哔哩直播的真实流媒体地址,默认获取直播间提供的最高画质
|
||||
# qn=150高清
|
||||
# qn=250超清
|
||||
# qn=400蓝光
|
||||
# qn=10000原画
|
||||
import requests
|
||||
import re
|
||||
|
||||
|
||||
def get_real_rid(rid):
|
||||
room_url = 'https://api.live.bilibili.com/room/v1/Room/room_init?id=' + str(rid)
|
||||
response = requests.get(url=room_url).json()
|
||||
data = response.get('data', 0)
|
||||
if data:
|
||||
live_status = data.get('live_status', 0)
|
||||
room_id = data.get('room_id', 0)
|
||||
def bilibili(rid):
|
||||
# 先获取直播状态和真实房间号
|
||||
r_url = 'https://api.live.bilibili.com/room/v1/Room/room_init?id={}'.format(rid)
|
||||
with requests.Session() as s:
|
||||
res = s.get(r_url).json()
|
||||
code = res['code']
|
||||
if code == 0:
|
||||
live_status = res['data']['live_status']
|
||||
if live_status == 1:
|
||||
room_id = res['data']['room_id']
|
||||
|
||||
def u(pf):
|
||||
f_url = 'https://api.live.bilibili.com/xlive/web-room/v1/playUrl/playUrl'
|
||||
params = {
|
||||
'cid': room_id,
|
||||
'qn': 10000,
|
||||
'platform': pf,
|
||||
'https_url_req': 1,
|
||||
'ptype': 16
|
||||
}
|
||||
resp = s.get(f_url, params=params).json()
|
||||
try:
|
||||
durl = resp['data']['durl']
|
||||
real_url = durl[-1]['url']
|
||||
return real_url
|
||||
except KeyError or IndexError:
|
||||
raise Exception('获取失败')
|
||||
|
||||
return {
|
||||
'flv_url': u('web'),
|
||||
'hls_url': u('h5')
|
||||
}
|
||||
|
||||
else:
|
||||
raise Exception('未开播')
|
||||
else:
|
||||
live_status = room_id = 0
|
||||
return live_status, room_id
|
||||
raise Exception('房间不存在')
|
||||
|
||||
|
||||
def get_real_url_flv(rid):
|
||||
room = get_real_rid(rid)
|
||||
live_status = room[0]
|
||||
room_id = room[1]
|
||||
qn = 1 # PC网页和手机APP端的qn=1是最高画质;qn取值0~4。
|
||||
if live_status:
|
||||
try:
|
||||
room_url = 'https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomPlayInfo?room_id={}&play_url=1&mask=1&qn={}&platform=web'.format(room_id, qn)
|
||||
response = requests.get(url=room_url).json()
|
||||
durl = response.get('data').get('play_url').get('durl', 0)
|
||||
real_url = durl[-1].get('url')
|
||||
except:
|
||||
real_url = '疑似部分国外IP无法GET到正确数据,待验证'
|
||||
else:
|
||||
real_url = '未开播或直播间不存在'
|
||||
return real_url
|
||||
|
||||
|
||||
def get_real_url_hls(rid):
|
||||
room = get_real_rid(rid)
|
||||
live_status = room[0]
|
||||
room_id = room[1]
|
||||
qn = 0 # 手机网页端的只找到一个值qn=0。
|
||||
if live_status:
|
||||
try:
|
||||
room_url = 'https://api.live.bilibili.com/xlive/web-room/v1/playUrl/playUrl?cid={}&platform=h5&otype=json&quality={}'.format(room_id, qn)
|
||||
response = requests.get(url=room_url).json()
|
||||
durl = response.get('data').get('durl', 0)
|
||||
real_url = durl[-1].get('url')
|
||||
except:
|
||||
real_url = '疑似部分国外IP无法GET到正确数据,待验证'
|
||||
else:
|
||||
real_url = '未开播或直播间不存在'
|
||||
return real_url
|
||||
|
||||
rid = input('请输入bilibili房间号:\n')
|
||||
real_url_flv = get_real_url_flv(rid)
|
||||
# real_url_hls = get_real_url_hls(rid)
|
||||
print('该直播间源地址为:')
|
||||
print(real_url_flv)
|
||||
# print(real_url_hls)
|
||||
if __name__ == '__main__':
|
||||
r = input('输入bilibili直播间号:\n')
|
||||
print(bilibili(r))
|
||||
|
Loading…
x
Reference in New Issue
Block a user