This commit is contained in:
eric
2026-03-28 17:16:38 -05:00
parent 37ab25911a
commit 46fb194a02
20 changed files with 962 additions and 331 deletions

152
main.py
View File

@@ -13,6 +13,8 @@ from __future__ import annotations
import asyncio
import os
from src.async_thread_loop import run_async_coro
import sys
import builtins
import subprocess
@@ -669,27 +671,27 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
platform = '抖音直播'
with semaphore:
if 'v.douyin.com' not in record_url and '/user/' not in record_url:
json_data = asyncio.run(spider.get_douyin_web_stream_data(
json_data = run_async_coro(spider.get_douyin_web_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=dy_cookie))
else:
json_data = asyncio.run(spider.get_douyin_app_stream_data(
json_data = run_async_coro(spider.get_douyin_app_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=dy_cookie))
port_info = asyncio.run(
port_info = run_async_coro(
stream.get_douyin_stream_url(json_data, record_quality, proxy_address))
elif record_url.find("https://www.tiktok.com/") > -1:
platform = 'TikTok直播'
with semaphore:
if global_proxy or proxy_address:
json_data = asyncio.run(spider.get_tiktok_stream_data(
json_data = run_async_coro(spider.get_tiktok_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=tiktok_cookie))
port_info = asyncio.run(
port_info = run_async_coro(
stream.get_tiktok_stream_url(json_data, record_quality, proxy_address))
else:
logger.error("错误信息: 网络异常请检查网络是否能正常访问TikTok平台")
@@ -697,23 +699,23 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("https://live.kuaishou.com/") > -1:
platform = '快手直播'
with semaphore:
json_data = asyncio.run(spider.get_kuaishou_stream_data(
json_data = run_async_coro(spider.get_kuaishou_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=ks_cookie))
port_info = asyncio.run(stream.get_kuaishou_stream_url(json_data, record_quality))
port_info = run_async_coro(stream.get_kuaishou_stream_url(json_data, record_quality))
elif record_url.find("https://www.huya.com/") > -1:
platform = '虎牙直播'
with semaphore:
if record_quality not in ['OD', 'BD', 'UHD']:
json_data = asyncio.run(spider.get_huya_stream_data(
json_data = run_async_coro(spider.get_huya_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=hy_cookie))
port_info = asyncio.run(stream.get_huya_stream_url(json_data, record_quality))
port_info = run_async_coro(stream.get_huya_stream_url(json_data, record_quality))
else:
port_info = asyncio.run(spider.get_huya_app_stream_url(
port_info = run_async_coro(spider.get_huya_app_stream_url(
url=record_url,
proxy_addr=proxy_address,
cookies=hy_cookie
@@ -722,52 +724,52 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("https://www.douyu.com/") > -1:
platform = '斗鱼直播'
with semaphore:
json_data = asyncio.run(spider.get_douyu_info_data(
json_data = run_async_coro(spider.get_douyu_info_data(
url=record_url, proxy_addr=proxy_address, cookies=douyu_cookie))
port_info = asyncio.run(stream.get_douyu_stream_url(
port_info = run_async_coro(stream.get_douyu_stream_url(
json_data, video_quality=record_quality, cookies=douyu_cookie, proxy_addr=proxy_address
))
elif record_url.find("https://www.yy.com/") > -1:
platform = 'YY直播'
with semaphore:
json_data = asyncio.run(spider.get_yy_stream_data(
json_data = run_async_coro(spider.get_yy_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=yy_cookie))
port_info = asyncio.run(stream.get_yy_stream_url(json_data))
port_info = run_async_coro(stream.get_yy_stream_url(json_data))
elif record_url.find("https://live.bilibili.com/") > -1:
platform = 'B站直播'
with semaphore:
json_data = asyncio.run(spider.get_bilibili_room_info(
json_data = run_async_coro(spider.get_bilibili_room_info(
url=record_url, proxy_addr=proxy_address, cookies=bili_cookie))
port_info = asyncio.run(stream.get_bilibili_stream_url(
port_info = run_async_coro(stream.get_bilibili_stream_url(
json_data, video_quality=record_quality, cookies=bili_cookie, proxy_addr=proxy_address))
elif record_url.find("http://xhslink.com/") > -1 or \
record_url.find("https://www.xiaohongshu.com/") > -1:
platform = '小红书直播'
with semaphore:
port_info = asyncio.run(spider.get_xhs_stream_url(
port_info = run_async_coro(spider.get_xhs_stream_url(
record_url, proxy_addr=proxy_address, cookies=xhs_cookie))
retry += 1
elif record_url.find("www.bigo.tv/") > -1 or record_url.find("slink.bigovideo.tv/") > -1:
platform = 'Bigo直播'
with semaphore:
port_info = asyncio.run(spider.get_bigo_stream_url(
port_info = run_async_coro(spider.get_bigo_stream_url(
record_url, proxy_addr=proxy_address, cookies=bigo_cookie))
elif record_url.find("https://app.blued.cn/") > -1:
platform = 'Blued直播'
with semaphore:
port_info = asyncio.run(spider.get_blued_stream_url(
port_info = run_async_coro(spider.get_blued_stream_url(
record_url, proxy_addr=proxy_address, cookies=blued_cookie))
elif record_url.find("sooplive.co.kr/") > -1 or record_url.find("sooplive.com/") > -1:
platform = 'SOOP'
with semaphore:
if global_proxy or proxy_address:
json_data = asyncio.run(spider.get_sooplive_stream_data(
json_data = run_async_coro(spider.get_sooplive_stream_data(
url=record_url, proxy_addr=proxy_address,
cookies=sooplive_cookie,
username=sooplive_username,
@@ -777,51 +779,51 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
utils.update_config(
config_file, 'Cookie', 'sooplive_cookie', json_data['new_cookies']
)
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
else:
logger.error("错误信息: 网络异常请检查本网络是否能正常访问SOOP平台")
elif record_url.find("cc.163.com/") > -1:
platform = '网易CC直播'
with semaphore:
json_data = asyncio.run(spider.get_netease_stream_data(
json_data = run_async_coro(spider.get_netease_stream_data(
url=record_url, cookies=netease_cookie))
port_info = asyncio.run(stream.get_netease_stream_url(json_data, record_quality))
port_info = run_async_coro(stream.get_netease_stream_url(json_data, record_quality))
elif record_url.find("qiandurebo.com/") > -1:
platform = '千度热播'
with semaphore:
port_info = asyncio.run(spider.get_qiandurebo_stream_data(
port_info = run_async_coro(spider.get_qiandurebo_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=qiandurebo_cookie))
elif record_url.find("www.pandalive.co.kr/") > -1:
platform = 'PandaTV'
with semaphore:
if global_proxy or proxy_address:
json_data = asyncio.run(spider.get_pandatv_stream_data(
json_data = run_async_coro(spider.get_pandatv_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=pandatv_cookie
))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
else:
logger.error("错误信息: 网络异常请检查本网络是否能正常访问PandaTV直播平台")
elif record_url.find("fm.missevan.com/") > -1:
platform = '猫耳FM直播'
with semaphore:
port_info = asyncio.run(spider.get_maoerfm_stream_url(
port_info = run_async_coro(spider.get_maoerfm_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=maoerfm_cookie))
elif record_url.find("www.winktv.co.kr/") > -1:
platform = 'WinkTV'
with semaphore:
if global_proxy or proxy_address:
json_data = asyncio.run(spider.get_winktv_stream_data(
json_data = run_async_coro(spider.get_winktv_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=winktv_cookie))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
else:
logger.error("错误信息: 网络异常请检查本网络是否能正常访问WinkTV直播平台")
@@ -829,7 +831,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
platform = 'FlexTV'
with semaphore:
if global_proxy or proxy_address:
json_data = asyncio.run(spider.get_flextv_stream_data(
json_data = run_async_coro(spider.get_flextv_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=flextv_cookie,
@@ -841,7 +843,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
config_file, 'Cookie', 'flextv_cookie', json_data['new_cookies']
)
if 'play_url_list' in json_data:
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
else:
port_info = json_data
else:
@@ -850,7 +852,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("look.163.com/") > -1:
platform = 'Look直播'
with semaphore:
port_info = asyncio.run(spider.get_looklive_stream_url(
port_info = run_async_coro(spider.get_looklive_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=look_cookie
))
@@ -858,7 +860,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
platform = 'PopkonTV'
with semaphore:
if global_proxy or proxy_address:
port_info = asyncio.run(spider.get_popkontv_stream_url(
port_info = run_async_coro(spider.get_popkontv_stream_url(
url=record_url,
proxy_addr=proxy_address,
access_token=popkontv_access_token,
@@ -878,7 +880,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("twitcasting.tv/") > -1:
platform = 'TwitCasting'
with semaphore:
json_data = asyncio.run(spider.get_twitcasting_stream_url(
json_data = run_async_coro(spider.get_twitcasting_stream_url(
url=record_url,
proxy_addr=proxy_address,
cookies=twitcasting_cookie,
@@ -886,7 +888,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
username=twitcasting_username,
password=twitcasting_password
))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=False))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=False))
if port_info and port_info.get('new_cookies'):
utils.update_config(
@@ -897,36 +899,36 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("live.baidu.com/") > -1:
platform = '百度直播'
with semaphore:
json_data = asyncio.run(spider.get_baidu_stream_data(
json_data = run_async_coro(spider.get_baidu_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=baidu_cookie))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality))
elif record_url.find("weibo.com/") > -1:
platform = '微博直播'
with semaphore:
json_data = asyncio.run(spider.get_weibo_stream_data(
json_data = run_async_coro(spider.get_weibo_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=weibo_cookie))
port_info = asyncio.run(stream.get_stream_url(
port_info = run_async_coro(stream.get_stream_url(
json_data, record_quality, hls_extra_key='m3u8_url'))
elif record_url.find("kugou.com/") > -1:
platform = '酷狗直播'
with semaphore:
port_info = asyncio.run(spider.get_kugou_stream_url(
port_info = run_async_coro(spider.get_kugou_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=kugou_cookie))
elif record_url.find("www.twitch.tv/") > -1:
platform = 'TwitchTV'
with semaphore:
if global_proxy or proxy_address:
json_data = asyncio.run(spider.get_twitchtv_stream_data(
json_data = run_async_coro(spider.get_twitchtv_stream_data(
url=record_url,
proxy_addr=proxy_address,
cookies=twitch_cookie
))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
else:
logger.error("错误信息: 网络异常请检查本网络是否能正常访问TwitchTV直播平台")
@@ -934,7 +936,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
if global_proxy or proxy_address:
platform = 'LiveMe'
with semaphore:
port_info = asyncio.run(spider.get_liveme_stream_url(
port_info = run_async_coro(spider.get_liveme_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=liveme_cookie))
else:
logger.error("错误信息: 网络异常请检查本网络是否能正常访问LiveMe直播平台")
@@ -942,113 +944,113 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("www.huajiao.com/") > -1:
platform = '花椒直播'
with semaphore:
port_info = asyncio.run(spider.get_huajiao_stream_url(
port_info = run_async_coro(spider.get_huajiao_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=huajiao_cookie))
elif record_url.find("7u66.com/") > -1:
platform = '流星直播'
with semaphore:
port_info = asyncio.run(spider.get_liuxing_stream_url(
port_info = run_async_coro(spider.get_liuxing_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=liuxing_cookie))
elif record_url.find("showroom-live.com/") > -1:
platform = 'ShowRoom'
with semaphore:
json_data = asyncio.run(spider.get_showroom_stream_data(
json_data = run_async_coro(spider.get_showroom_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=showroom_cookie))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
elif record_url.find("live.acfun.cn/") > -1 or record_url.find("m.acfun.cn/") > -1:
platform = 'Acfun'
with semaphore:
json_data = asyncio.run(spider.get_acfun_stream_data(
json_data = run_async_coro(spider.get_acfun_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=acfun_cookie))
port_info = asyncio.run(stream.get_stream_url(
port_info = run_async_coro(stream.get_stream_url(
json_data, record_quality, url_type='flv', flv_extra_key='url'))
elif record_url.find("live.tlclw.com/") > -1:
platform = '畅聊直播'
with semaphore:
port_info = asyncio.run(spider.get_changliao_stream_url(
port_info = run_async_coro(spider.get_changliao_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=changliao_cookie))
elif record_url.find("ybw1666.com/") > -1:
platform = '音播直播'
with semaphore:
port_info = asyncio.run(spider.get_yinbo_stream_url(
port_info = run_async_coro(spider.get_yinbo_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=yinbo_cookie))
elif record_url.find("www.inke.cn/") > -1:
platform = '映客直播'
with semaphore:
port_info = asyncio.run(spider.get_yingke_stream_url(
port_info = run_async_coro(spider.get_yingke_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=yingke_cookie))
elif record_url.find("www.zhihu.com/") > -1:
platform = '知乎直播'
with semaphore:
port_info = asyncio.run(spider.get_zhihu_stream_url(
port_info = run_async_coro(spider.get_zhihu_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=zhihu_cookie))
elif record_url.find("chzzk.naver.com/") > -1:
platform = 'CHZZK'
with semaphore:
json_data = asyncio.run(spider.get_chzzk_stream_data(
json_data = run_async_coro(spider.get_chzzk_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=chzzk_cookie))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
elif record_url.find("www.haixiutv.com/") > -1:
platform = '嗨秀直播'
with semaphore:
port_info = asyncio.run(spider.get_haixiu_stream_url(
port_info = run_async_coro(spider.get_haixiu_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=haixiu_cookie))
elif record_url.find("vvxqiu.com/") > -1:
platform = 'VV星球'
with semaphore:
port_info = asyncio.run(spider.get_vvxqiu_stream_url(
port_info = run_async_coro(spider.get_vvxqiu_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=vvxqiu_cookie))
elif record_url.find("17.live/") > -1:
platform = '17Live'
with semaphore:
port_info = asyncio.run(spider.get_17live_stream_url(
port_info = run_async_coro(spider.get_17live_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=yiqilive_cookie))
elif record_url.find("www.lang.live/") > -1:
platform = '浪Live'
with semaphore:
port_info = asyncio.run(spider.get_langlive_stream_url(
port_info = run_async_coro(spider.get_langlive_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=langlive_cookie))
elif record_url.find("m.pp.weimipopo.com/") > -1:
platform = '漂漂直播'
with semaphore:
port_info = asyncio.run(spider.get_pplive_stream_url(
port_info = run_async_coro(spider.get_pplive_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=pplive_cookie))
elif record_url.find(".6.cn/") > -1:
platform = '六间房直播'
with semaphore:
port_info = asyncio.run(spider.get_6room_stream_url(
port_info = run_async_coro(spider.get_6room_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=six_room_cookie))
elif record_url.find("lehaitv.com/") > -1:
platform = '乐嗨直播'
with semaphore:
port_info = asyncio.run(spider.get_haixiu_stream_url(
port_info = run_async_coro(spider.get_haixiu_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=lehaitv_cookie))
elif record_url.find("h.catshow168.com/") > -1:
platform = '花猫直播'
with semaphore:
port_info = asyncio.run(spider.get_pplive_stream_url(
port_info = run_async_coro(spider.get_pplive_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=huamao_cookie))
elif record_url.find("live.shopee") > -1 or record_url.find("shp.ee/") > -1:
platform = 'shopee'
with semaphore:
port_info = asyncio.run(spider.get_shopee_stream_url(
port_info = run_async_coro(spider.get_shopee_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=shopee_cookie))
if port_info.get('uid'):
new_record_url = record_url.split('?')[0] + '?' + str(port_info['uid'])
@@ -1056,16 +1058,16 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("www.youtube.com/") > -1 or record_url.find("youtu.be/") > -1:
platform = 'Youtube'
with semaphore:
json_data = asyncio.run(spider.get_youtube_stream_url(
json_data = run_async_coro(spider.get_youtube_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=youtube_cookie))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
elif record_url.find("tb.cn") > -1:
platform = '淘宝直播'
with semaphore:
json_data = asyncio.run(spider.get_taobao_stream_url(
json_data = run_async_coro(spider.get_taobao_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=taobao_cookie))
port_info = asyncio.run(stream.get_stream_url(
port_info = run_async_coro(stream.get_stream_url(
json_data, record_quality,
url_type='all', hls_extra_key='hlsUrl', flv_extra_key='flvUrl'
))
@@ -1073,7 +1075,7 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
elif record_url.find("3.cn") > -1 or record_url.find("m.jd.com") > -1:
platform = '京东直播'
with semaphore:
port_info = asyncio.run(spider.get_jd_stream_url(
port_info = run_async_coro(spider.get_jd_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=jd_cookie))
elif record_url.find("faceit.com/") > -1:
@@ -1081,34 +1083,34 @@ def start_record(url_data: tuple, count_variable: int = -1) -> None:
with semaphore:
if global_proxy or proxy_address:
with semaphore:
json_data = asyncio.run(spider.get_faceit_stream_data(
json_data = run_async_coro(spider.get_faceit_stream_data(
url=record_url, proxy_addr=proxy_address, cookies=faceit_cookie))
port_info = asyncio.run(stream.get_stream_url(json_data, record_quality, spec=True))
port_info = run_async_coro(stream.get_stream_url(json_data, record_quality, spec=True))
else:
logger.error("错误信息: 网络异常请检查本网络是否能正常访问faceit直播平台")
elif record_url.find("www.miguvideo.com") > -1 or record_url.find("m.miguvideo.com") > -1:
platform = '咪咕直播'
with semaphore:
port_info = asyncio.run(spider.get_migu_stream_url(
port_info = run_async_coro(spider.get_migu_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=migu_cookie))
elif record_url.find("show.lailianjie.com") > -1:
platform = '连接直播'
with semaphore:
port_info = asyncio.run(spider.get_lianjie_stream_url(
port_info = run_async_coro(spider.get_lianjie_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=lianjie_cookie))
elif record_url.find("www.imkktv.com") > -1:
platform = '来秀直播'
with semaphore:
port_info = asyncio.run(spider.get_laixiu_stream_url(
port_info = run_async_coro(spider.get_laixiu_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=laixiu_cookie))
elif record_url.find("www.picarto.tv") > -1:
platform = 'Picarto'
with semaphore:
port_info = asyncio.run(spider.get_picarto_stream_url(
port_info = run_async_coro(spider.get_picarto_stream_url(
url=record_url, proxy_addr=proxy_address, cookies=picarto_cookie))
elif record_url.find(".m3u8") > -1 or record_url.find(".flv") > -1: