软件简介
软件名称 | 斗鱼直播源解析工具 |
---|---|
软件版本 | 2020.08.12 |
软件类别 | 直播解析工具 |
适用平台 | Windows |
最近更新 | 2020.08.12 |
使用说明
运行斗鱼直播源解析工具.exe,输入需要解析直播源的直播间房间号,回车获取直播源,获取后程序会自动复制,直接粘贴到PotPlayer播放器播放即可观看直播
Python源码
- # coding=utf-8
- # 获取斗鱼直播间的真实流媒体地址,默认最高画质。
- import requests
- import re
- import execjs
- import time
- import hashlib
- import pyperclip
- import os
- class DouYu:
- def __init__(self, rid):
- # 房间号通常为1~7位纯数字,浏览器地址栏中看到的房间号不一定是真实rid.
- self.did = '10000000000000000000000000001501'
- self.t10 = str(int(time.time()))
- self.t13 = str(int((time.time() * 1000)))
- self.s = requests.Session()
- self.res = self.s.get('https://m.douyu.com/' + str(rid)).text
- result = re.search(r'rid":(\d{1,7}),"vipId', self.res)
- if result:
- self.rid = result.group(1)
- else:
- raise Exception('房间号错误')
- @staticmethod
- def md5(data):
- return hashlib.md5(data.encode('utf-8')).hexdigest()
- def get_pre(self):
- url = 'https://playweb.douyucdn.cn/lapi/live/hlsH5Preview/' + self.rid
- data = {
- 'rid': self.rid,
- 'did': self.did
- }
- auth = DouYu.md5(self.rid + self.t13)
- headers = {
- 'rid': self.rid,
- 'time': self.t13,
- 'auth': auth
- }
- res = self.s.post(url, headers=headers, data=data).json()
- error = res['error']
- data = res['data']
- key = ''
- if data:
- rtmp_live = data['rtmp_live']
- key = re.search(r'(\d{1,7}[0-9a-zA-Z]+)_?\d{0,4}(/playlist|.m3u8)', rtmp_live).group(1)
- return error, key
- def get_js(self):
- result = re.search(r'(function ub98484234.*)\s(var.*)', self.res).group()
- func_ub9 = re.sub(r'eval.*;}', 'strc;}', result)
- js = execjs.compile(func_ub9)
- res = js.call('ub98484234')
- v = re.search(r'v=(\d+)', res).group(1)
- rb = DouYu.md5(self.rid + self.did + self.t10 + v)
- func_sign = re.sub(r'return rt;}\);?', 'return rt;}', res)
- func_sign = func_sign.replace('(function (', 'function sign(')
- func_sign = func_sign.replace('CryptoJS.MD5(cb).toString()', '"' + rb + '"')
- js = execjs.compile(func_sign)
- params = js.call('sign', self.rid, self.did, self.t10)
- params += '&ver=219032101&rid={}&rate=-1'.format(self.rid)
- url = 'https://m.douyu.com/api/room/ratestream'
- res = self.s.post(url, params=params).text
- key = re.search(r'(\d{1,7}[0-9a-zA-Z]+)_?\d{0,4}(.m3u8|/playlist)', res).group(1)
- return key
- def get_real_url(self):
- error, key = self.get_pre()
- if error == 0:
- pass
- elif error == 102:
- raise Exception('房间不存在')
- elif error == 104:
- raise Exception('房间未开播')
- else:
- key = self.get_js()
- return "http://tx2play1.douyucdn.cn/live/{}.flv?uuid=".format(key)
- if __name__ == '__main__':
- r = input('输入斗鱼直播间号:')
- s = DouYu(r)
- print("\n直播源地址:",s.get_real_url())
- pyperclip.copycopy(s.get_real_url())
- print("\n直播地址已复制,请在PotPlayer中粘贴链接即可!\n")
- os.system('pause')
附件下载
附件下载
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。