Files
biliup/engine/plugins/afreecaTV.py
T

48 lines
1.7 KiB
Python

import requests
from common.decorators import Plugin
from engine.plugins import FFmpegdl, match1, logger
VALID_URL_BASE = r"https?://play\.afreecatv\.com/(?P<username>\w+)(?:/\d+)?"
STREAM_INFO_URLS = "{rmd}/broad_stream_assign.html"
CHANNEL_API_URL = "http://live.afreecatv.com:8057/afreeca/player_live_api.php"
QUALITIES = ["original", "hd", "sd"]
@Plugin.download(regexp=r"https?://play\.afreecatv\.com/(?P<username>\w+)(?:/\d+)?")
class AfreecaTV(FFmpegdl):
def __init__(self, fname, url, suffix='mp4'):
super().__init__(fname, url, suffix)
def check_stream(self):
logger.debug(self.fname)
username = match1(self.url, VALID_URL_BASE)
res_bno = requests.post(CHANNEL_API_URL, data={"bid": username, "mode": "landing", "player_type": "html5"},
timeout=5)
res_bno.close()
if res_bno.json()["CHANNEL"]["RESULT"] == 0:
return
bno = res_bno.json()["CHANNEL"]["BNO"]
cdn = res_bno.json()["CHANNEL"]["CDN"]
rmd = res_bno.json()["CHANNEL"]["RMD"]
res_aid = requests.post(CHANNEL_API_URL, data={
"bid": username,
"bno": bno,
"pwd": "",
"quality": QUALITIES[0],
"type": "pwd"
}, timeout=5)
res_aid.close()
aid = res_aid.json()["CHANNEL"]["AID"]
params = {
"return_type": cdn,
"broad_key": "{broadcast}-flash-{quality}-hls".format(broadcast=bno, quality=QUALITIES[0])
}
res = requests.get(STREAM_INFO_URLS.format(rmd=rmd), params=params, timeout=5)
res.close()
self.raw_stream_url = res.json()["view_url"] + "?aid=" + aid
return True