mirror of
https://github.com/wbt5/real-url.git
synced 2025-07-28 03:20:31 +08:00
💡 Update README.md
This commit is contained in:
commit
112da3b32c
@ -76,12 +76,25 @@ class Bilibili:
|
|||||||
msg = {}
|
msg = {}
|
||||||
if ops[i] == 5:
|
if ops[i] == 5:
|
||||||
j = json.loads(d)
|
j = json.loads(d)
|
||||||
msg['msg_type'] = {'SEND_GIFT': 'gift', 'DANMU_MSG': 'danmaku',
|
msg['msg_type'] = {
|
||||||
'WELCOME': 'enter', 'NOTICE_MSG': 'broadcast'}.get(j.get('cmd'), 'other')
|
'SEND_GIFT': 'gift',
|
||||||
|
'DANMU_MSG': 'danmaku',
|
||||||
|
'WELCOME': 'enter',
|
||||||
|
'NOTICE_MSG': 'broadcast',
|
||||||
|
'LIVE_INTERACTIVE_GAME': 'interactive_danmaku' # 新增互动弹幕,经测试与弹幕内容一致
|
||||||
|
}.get(j.get('cmd'), 'other')
|
||||||
|
|
||||||
|
# 2021-06-03 bilibili 字段更新, 形如 DANMU_MSG:4:0:2:2:2:0
|
||||||
|
if msg.get('msg_type', 'UNKNOWN').startswith('DANMU_MSG'):
|
||||||
|
msg['msg_type'] = 'danmaku'
|
||||||
|
|
||||||
if msg['msg_type'] == 'danmaku':
|
if msg['msg_type'] == 'danmaku':
|
||||||
msg['name'] = (j.get('info', ['', '', ['', '']])[2][1]
|
msg['name'] = (j.get('info', ['', '', ['', '']])[2][1]
|
||||||
or j.get('data', {}).get('uname', ''))
|
or j.get('data', {}).get('uname', ''))
|
||||||
msg['content'] = j.get('info', ['', ''])[1]
|
msg['content'] = j.get('info', ['', ''])[1]
|
||||||
|
elif msg['msg_type'] == 'interactive_danmaku':
|
||||||
|
msg['name'] = j.get('data', {}).get('uname', '')
|
||||||
|
msg['content'] = j.get('data', {}).get('msg', '')
|
||||||
elif msg['msg_type'] == 'broadcast':
|
elif msg['msg_type'] == 'broadcast':
|
||||||
msg['type'] = j.get('msg_type', 0)
|
msg['type'] = j.get('msg_type', 0)
|
||||||
msg['roomid'] = j.get('real_roomid', 0)
|
msg['roomid'] = j.get('real_roomid', 0)
|
||||||
|
@ -22,11 +22,11 @@ class Huya:
|
|||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
async with session.get(url, headers=headers) as resp:
|
async with session.get(url, headers=headers) as resp:
|
||||||
room_page = await resp.text()
|
room_page = await resp.text()
|
||||||
m = re.search(r"ayyuid: +'([0-9]+)'", room_page, re.MULTILINE)
|
m = re.search(r"lYyid\":([0-9]+)", room_page, re.MULTILINE)
|
||||||
ayyuid = m.group(1)
|
ayyuid = m.group(1)
|
||||||
m = re.search(r"TOPSID += +'([0-9]+)'", room_page, re.MULTILINE)
|
m = re.search(r"lChannelId\":([0-9]+)", room_page, re.MULTILINE)
|
||||||
tid = m.group(1)
|
tid = m.group(1)
|
||||||
m = re.search(r"SUBSID += +'([0-9]+)'", room_page, re.MULTILINE)
|
m = re.search(r"lSubChannelId\":([0-9]+)", room_page, re.MULTILINE)
|
||||||
sid = m.group(1)
|
sid = m.group(1)
|
||||||
|
|
||||||
oos = tarscore.TarsOutputStream()
|
oos = tarscore.TarsOutputStream()
|
||||||
|
59
huya.py
59
huya.py
@ -7,6 +7,7 @@ import base64
|
|||||||
import urllib.parse
|
import urllib.parse
|
||||||
import hashlib
|
import hashlib
|
||||||
import time
|
import time
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
class HuYa:
|
class HuYa:
|
||||||
@ -23,63 +24,17 @@ class HuYa:
|
|||||||
'(KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36 '
|
'(KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36 '
|
||||||
}
|
}
|
||||||
response = requests.get(url=room_url, headers=header).text
|
response = requests.get(url=room_url, headers=header).text
|
||||||
livelineurl = re.findall(r'liveLineUrl = "([\s\S]*?)";', response)[0]
|
streamInfo = json.loads(re.findall(r"<script> window.HNF_GLOBAL_INIT = (.*)</script>", response)[0])["roomInfo"]["tLiveInfo"]["tLiveStreamInfo"]["vStreamInfo"]["value"]
|
||||||
livelineurl = base64.b64decode(livelineurl).decode('utf-8')
|
if streamInfo == []:
|
||||||
if livelineurl:
|
|
||||||
if 'replay' in livelineurl:
|
|
||||||
real_url = {
|
|
||||||
'replay': "https:" + livelineurl,
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
stream_name = self.get_stream_name(livelineurl)
|
|
||||||
base_url = 'http://121.12.115.15/tx.hls.huya.com/src/' + stream_name
|
|
||||||
real_url = {
|
|
||||||
'hls': base_url + '.m3u8',
|
|
||||||
'flv': base_url + '.flv',
|
|
||||||
'hls_2m': base_url + '.m3u8?ratio=2000',
|
|
||||||
'flv_2m': base_url + '.flv?ratio=2000'
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
raise Exception('未开播或直播间不存在')
|
raise Exception('未开播或直播间不存在')
|
||||||
|
real_url = {}
|
||||||
|
for info in streamInfo:
|
||||||
|
real_url[info["sCdnType"].lower() + "_flv"] = info["sFlvUrl"] + "/" + info["sStreamName"] + "." + info["sFlvUrlSuffix"] + "?" + info["sFlvAntiCode"]
|
||||||
|
real_url[info["sCdnType"].lower() + "_hls"] = info["sHlsUrl"] + "/" + info["sStreamName"] + "." + info["sHlsUrlSuffix"] + "?" + info["sHlsAntiCode"]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception('未开播或直播间不存在')
|
raise Exception('未开播或直播间不存在')
|
||||||
return real_url
|
return real_url
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_stream_name(e):
|
|
||||||
i, b = e.split('?')
|
|
||||||
r = i.split('/')
|
|
||||||
s = re.sub(r'.(flv|m3u8)', '', r[-1])
|
|
||||||
return s
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def live(e):
|
|
||||||
i, b = e.split('?')
|
|
||||||
r = i.split('/')
|
|
||||||
s = re.sub(r'.(flv|m3u8)', '', r[-1])
|
|
||||||
c = b.split('&')
|
|
||||||
c = [i for i in c if i != '']
|
|
||||||
n = {i.split('=')[0]: i.split('=')[1] for i in c}
|
|
||||||
fm = urllib.parse.unquote(n['fm'])
|
|
||||||
u = base64.b64decode(fm).decode('utf-8')
|
|
||||||
p = u.split('_')[0]
|
|
||||||
seqid = str(int(time.time() * 1e7))
|
|
||||||
ctype = n['ctype']
|
|
||||||
t = n['t']
|
|
||||||
mf = hashlib.md5((seqid + '|' + ctype + '|' + t).encode('utf-8')).hexdigest()
|
|
||||||
ll = n['wsTime']
|
|
||||||
ratio = n.get('ratio')
|
|
||||||
if ratio is None:
|
|
||||||
ratio = ''
|
|
||||||
uid = '1279523789849'
|
|
||||||
h = '_'.join([p, uid, s, mf, ll])
|
|
||||||
m = hashlib.md5(h.encode('utf-8')).hexdigest()
|
|
||||||
txyp = n['txyp']
|
|
||||||
fs = n['fs']
|
|
||||||
url = "{}?wsSecret={}&wsTime={}&uuid=&uid={}&seqid={}&ratio={}&txyp={}&fs={}&ctype={}&ver=1&t={}".format(
|
|
||||||
i, m, ll, uid, seqid, ratio, txyp, fs, ctype, t)
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
def get_real_url(rid):
|
def get_real_url(rid):
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user