-
-
Save Justsoos/5287887068d902b6d3ed3534a47f3ff3 to your computer and use it in GitHub Desktop.
#! /usr/bin/env python3 | |
import re | |
import requests | |
import argparse | |
import time | |
import hashlib | |
import json | |
import logging | |
from requests.adapters import HTTPAdapter | |
sess = requests.Session() | |
sess.mount('', HTTPAdapter(max_retries=5)) | |
headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Mobile Safari/537.36"} | |
logging.getLogger().setLevel(logging.DEBUG) | |
logging.debug('') | |
def get_api(url,rate): | |
url = re.sub(r'.*douyu.com','https://m.douyu.com/room',url) | |
sess.headers.update({'referer': url}) | |
for i in range(1,8): | |
html = sess.get(url, headers=headers, allow_redirects=False) | |
if html.status_code==200: | |
break | |
# room_id_patt = r'room_id\s*:\s*(\d+),' | |
room_id_patt = r'"rid"\s*:\s*(\d+),' | |
room_id = re.search(room_id_patt, html.text).group(1) | |
api_url = "http://www.douyutv.com/api/v1/" | |
args = "room/%s?aid=wp&cdn=ws&client_sys=wp&time=%d" % (room_id, int(time.time())) | |
auth_md5 = (args + "zNzMV1y4EMxOHS6I5WKm").encode("utf-8") | |
auth_str = hashlib.md5(auth_md5).hexdigest() | |
json_request_url = "%s%s&auth=%s" % (api_url, args, auth_str) | |
sess.headers.update({'referer': json_request_url}) | |
content = sess.get(json_request_url, headers=headers) | |
json_content = json.loads(content.text) | |
data = json_content['data'] | |
show_status = data.get('show_status') | |
if show_status is not "1": | |
raise ValueError("Offline!!") | |
other_bit = data.get('rtmp_multi_bitrate') | |
if rate == "1": | |
real_url = data.get('rtmp_url') + '/' + other_bit.get('middle') | |
elif rate == "2": | |
real_url = data.get('rtmp_url') + '/' + other_bit.get('middle2') | |
else: | |
real_url = data.get('rtmp_url') + '/' + data.get('rtmp_live') | |
return(real_url) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument('url') | |
parser.add_argument('ratio',nargs='?',default='3') | |
args = parser.parse_args() | |
rid = args.url | |
rate = args.ratio | |
flv_url = get_api(rid,rate) | |
print (flv_url) |
LPL2018直播,一共5个子房间 https://www.douyu.com/lpl ,斗鱼前端并没有显式放出URL,观众请手动使用:
"https://www.douyu.com/288016"
"https://www.douyu.com/424559"
"https://www.douyu.com/664810"
"https://www.douyu.com/673305"
"https://www.douyu.com/673327"
用法:
#douyu_new.py https://www.douyu.com/xxxx 2
1是流畅450k,2是高清750k,3或者不加是蓝光或者最高清晰度,可以达到5M到8M
好像已经失效了
好像已经失效了
还以为这里没人看,更新了。 @p0we7
能不能写一个获取竞猜结果的,抓了半天包,都没想到办法
用 mpv 播放,播几秒钟会自动断开,是什么原因?
用 mpv 播放,播几秒钟会自动断开,是什么原因?
要设置 mpv --no-ytdl
,mpv会去探测流地址消耗掉token
大佬 知道ijkplayer 如何避免消耗掉token吗 我这也是遇到 播了几秒就自动断开的情况
大佬,已经失效了,
api_url = "http://www.douyutv.com/api/v1/"
args = "room/%s?aid=wp&cdn=ws&client_sys=wp&time=%d" % (room_id, int(time.time()))
auth_md5 = (args + "zNzMV1y4EMxOHS6I5WKm").encode("utf-8")
auth_str = hashlib.md5(auth_md5).hexdigest()
json_request_url = "%s%s&auth=%s" % (api_url, args, auth_str)
这个获取不了了
确实获取不到了,有没有新的加密串呀
斗鱼2019春节过完立刻改了api,目前请看这里,基本可实用新api:
streamlink/streamlink#2328 (comment)
斗鱼的技术干什么吃的? 最高码率蓝光5M - 8M,中间码率突然跌落10倍,到高清700k,最低流畅450k,并没有其他档位。
你在拿观众搞笑嘛?