From 74ffdb4d4043884472bafea57c7d8ad1043d515e Mon Sep 17 00:00:00 2001 From: ihmily <961532186@qq.com> Date: Wed, 6 Dec 2023 01:20:57 +0800 Subject: [PATCH] Add bigo live record --- README.md | 11 +++++++++-- config/config.ini | 9 +++++---- main.py | 17 ++++++++++++----- spider.py | 42 ++++++++++++++++++++++++++++++++++++++---- 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 532be5a..65c608d 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [x] YY - [x] B站 - [x] 小红书 +- [x] bigo - [ ] 更多平台正在更新中 @@ -58,7 +59,7 @@ - 当同时在录制多个直播时,最好线程数设置大一些,否则可能出现其中一个直播录制出错。当然设置的过大也没用,要同时考虑自身电脑的配置,如CPU内核数、网络带宽等限制。 - 如果想直接使用打包好的录制软件,进入[Releases](https://github.com/ihmily/DouyinLiveRecorder/releases) 下载最新发布的 zip压缩包即可,有些电脑可能会报毒,直接忽略即可。 - 如果要长时间挂着软件循环监测直播,最好循环时间设置长一点,避免因请求频繁导致被官方封禁IP 。 -- 最后,欢迎大家提交PR +- 最后,欢迎大家提交fork和PR   @@ -90,6 +91,9 @@ https://live.bilibili.com/320 小红书: https://www.xiaohongshu.com/hina/livestream/568980065082002402?appuid=5f3f478a00000000010005b3&apptime= + +bigo: +https://www.bigo.tv/cn/716418802 ``` Tiktok目前只支持PC网页端地址(我没下载app),其他平台 app端直播间分享地址和网页端长地址都能正常进行录制(抖音尽量用长链接,避免因短链接转换失效导致不能正常录制)。 @@ -98,7 +102,7 @@ Tiktok目前只支持PC网页端地址(我没下载app),其他平台 app 解析接口: -该解析接口仅供演示,并且只包含抖音、快手、虎牙直播的解析,其他平台如有需要请自行添加,源码在这里 [DouyinLiveRecorder/api](https://github.com/ihmily/DouyinLiveRecorder/tree/main/api) +该解析接口 ~~仅供演示~~(演示接口暂时停止),并且只包含抖音、快手、虎牙直播的解析,其他平台如有需要请自行添加,源码在这里 [DouyinLiveRecorder/api](https://github.com/ihmily/DouyinLiveRecorder/tree/main/api) ```HTTP GET https://hmily.vip/api/jx/live/?url= @@ -130,6 +134,9 @@ GET https://hmily.vip/api/jx/live/convert.php?url=https://v.douyin.com/iQLgKSj/ ## ⏳提交日志 +- 20231206 + - 新增bigo直播录制 + - 20231203 - 新增小红书直播录制(全网首发),目前小红书官方没有切换清晰度功能,因此直播录制也只有默认画质 - 小红书录制暂时无法循环监测,每次主播开启直播,都要重新获取一次链接 diff --git a/config/config.ini b/config/config.ini index b802027..67bcee0 100644 --- a/config/config.ini +++ b/config/config.ini @@ -24,9 +24,10 @@ ts录制完成后自动增加生成m4a格式 = 否 [Cookie] 抖音cookie(录制抖音必须要有) = ttwid=1%7CB1qls3GdnZhUov9o2NxOMxxYS2ff6OSvEWbv0ytbES4%7C1680522049%7C280d802d6d478e3e78d0c807f7c487e7ffec0ae4e5fdd6a0fe74c3c6af149511; my_rd=1; passport_csrf_token=3ab34460fa656183fccfb904b16ff742; passport_csrf_token_default=3ab34460fa656183fccfb904b16ff742; d_ticket=9f562383ac0547d0b561904513229d76c9c21; n_mh=hvnJEQ4Q5eiH74-84kTFUyv4VK8xtSrpRZG1AhCeFNI; store-region=cn-fj; store-region-src=uid; LOGIN_STATUS=1; __security_server_data_status=1; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; pwa2=%223%7C0%7C3%7C0%22; download_guide=%223%2F20230729%2F0%22; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.6%7D; strategyABtestKey=%221690824679.923%22; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1536%2C%5C%22screen_height%5C%22%3A864%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A8%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A10%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A150%7D%22; VIDEO_FILTER_MEMO_SELECT=%7B%22expireTime%22%3A1691443863751%2C%22type%22%3Anull%7D; home_can_add_dy_2_desktop=%221%22; __live_version__=%221.1.1.2169%22; device_web_cpu_core=8; device_web_memory_size=8; xgplayer_user_id=346045893336; csrf_session_id=2e00356b5cd8544d17a0e66484946f28; odin_tt=724eb4dd23bc6ffaed9a1571ac4c757ef597768a70c75fef695b95845b7ffcd8b1524278c2ac31c2587996d058e03414595f0a4e856c53bd0d5e5f56dc6d82e24004dc77773e6b83ced6f80f1bb70627; __ac_nonce=064caded4009deafd8b89; __ac_signature=_02B4Z6wo00f01HLUuwwAAIDBh6tRkVLvBQBy9L-AAHiHf7; ttcid=2e9619ebbb8449eaa3d5a42d8ce88ec835; webcast_leading_last_show_time=1691016922379; webcast_leading_total_show_times=1; webcast_local_quality=sd; live_can_add_dy_2_desktop=%221%22; msToken=1JDHnVPw_9yTvzIrwb7cQj8dCMNOoesXbA_IooV8cezcOdpe4pzusZE7NB7tZn9TBXPr0ylxmv-KMs5rqbNUBHP4P7VBFUu0ZAht_BEylqrLpzgt3y5ne_38hXDOX8o=; msToken=jV_yeN1IQKUd9PlNtpL7k5vthGKcHo0dEh_QPUQhr8G3cuYv-Jbb4NnIxGDmhVOkZOCSihNpA2kvYtHiTW25XNNX_yrsv5FN8O6zm3qmCIXcEe0LywLn7oBO2gITEeg=; tt_scid=mYfqpfbDjqXrIGJuQ7q-DlQJfUSG51qG.KUdzztuGP83OjuVLXnQHjsz-BRHRJu4e986 快手cookie = -tiktok_cookie = +Tiktok_cookie = 虎牙cookie = 斗鱼cookie = -yy_cookie = -b站cookie = - +YY_cookie = +B站cookie = +小红书cookie = +bigo_cookie = diff --git a/main.py b/main.py index 7a5fb68..d63a621 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ Author: Hmily GitHub: https://github.com/ihmily Date: 2023-07-17 23:52:05 -Update: 2023-12-03 20:46:00 +Update: 2023-12-06 00:31:48 Copyright (c) 2023 by Hmily, All Rights Reserved. Function: Record live stream video. """ @@ -31,7 +31,8 @@ from spider import ( get_douyu_stream_data, get_yy_stream_data, get_bilibili_stream_data, - get_xhs_stream_url + get_xhs_stream_url, + get_bigo_stream_url ) from web_rid import ( @@ -45,8 +46,8 @@ from utils import ( from msg_push import dingtalk, xizhi # 版本号 -version = "v2.0.3" -platforms = "抖音|Tiktok|快手|虎牙|斗鱼|YY|B站|小红书" +version = "v2.0.4" +platforms = "抖音|Tiktok|快手|虎牙|斗鱼|YY|B站|小红书|bigo" # --------------------------全局变量------------------------------------- recording = set() unrecording = set() @@ -591,6 +592,10 @@ def start_record(url_tuple, count_variable=-1): with semaphore: port_info = get_xhs_stream_url(record_url, xhs_cookie) + elif record_url.find("https://www.bigo.tv/cn/") > -1: + with semaphore: + port_info = get_bigo_stream_url(record_url, bigo_cookie) + anchor_name:str= port_info.get("anchor_name", '') if not anchor_name: @@ -1119,6 +1124,7 @@ while True: yy_cookie = read_config_value(config, 'Cookie', 'YY_cookie', '') bili_cookie = read_config_value(config, 'Cookie', 'B站cookie', '') xhs_cookie = read_config_value(config, 'Cookie', '小红书cookie', '') + bigo_cookie = read_config_value(config, 'Cookie', 'bigo_cookie', '') if len(video_save_type) > 0: if video_save_type.upper().lower() == "FLV".lower(): @@ -1191,7 +1197,8 @@ while True: 'www.douyu.com', 'www.yy.com', 'live.bilibili.com', - 'www.xiaohongshu.com' + 'www.xiaohongshu.com', + 'www.bigo.tv' ] if url_host in host_list: new_line = (url, split_line[1]) diff --git a/spider.py b/spider.py index 0da5b82..4294159 100644 --- a/spider.py +++ b/spider.py @@ -4,7 +4,7 @@ Author: Hmily GitHub:https://github.com/ihmily Date: 2023-07-15 23:15:00 -Update: 2023-12-03 20:48:35 +Update: 2023-12-06 01:09:56 Copyright (c) 2023 by Hmily, All Rights Reserved. Function: Get live stream data. """ @@ -345,7 +345,7 @@ def get_xhs_stream_url(url: str, cookies: Union[str, None] = None) -> Dict[str, if cookies: headers['Cookie'] = cookies - room_id = url.split('?')[0].rsplit('/',maxsplit=1)[1] + room_id = url.split('?')[0].rsplit('/', maxsplit=1)[1] appuid = re.search('appuid=(.*?)&', url).group(1) url = f'https://www.xiaohongshu.com/api/sns/red/live/app/v1/ecology/outside/share_info?room_id={room_id}' req = urllib.request.Request(url, headers=headers) @@ -368,6 +368,40 @@ def get_xhs_stream_url(url: str, cookies: Union[str, None] = None) -> Dict[str, return result +@trace_error_decorator +def get_bigo_stream_url(url: str, cookies: Union[str, None] = None) -> Dict[str, Any]: + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0', + 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + 'Referer': 'https://www.bigo.tv/', + } + if cookies: + headers['Cookie'] = cookies + + room_id = re.search('www.bigo.tv/cn/(\d+)', url).group(1) + data = {'siteId': room_id} # roomId + url = 'https://ta.bigo.tv/official_website/studio/getInternalStudioInfo' + data = urllib.parse.urlencode(data).encode('utf-8') + req = urllib.request.Request(url, data=data,headers=headers) + response = opener.open(req, timeout=15) + json_str = response.read().decode('utf-8') + json_data = json.loads(json_str) + anchor_name = json_data['data']['nick_name'] + live_status = json_data['data']['alive'] + result = { + "anchor_name": anchor_name, + "is_live": False, + } + + if live_status == 1: + m3u8_url = json_data['data']['hls_src'] + result['m3u8_url'] = m3u8_url + result['is_live'] = True + result['record_url'] = m3u8_url + return result + + if __name__ == '__main__': # 尽量用自己的cookie,以避免默认的不可用导致无法获取数据 url = "https://live.douyin.com/745964462470" # 抖音直播 @@ -380,7 +414,7 @@ if __name__ == '__main__': # url = 'https://live.bilibili.com/21593109' # b站直播 # 小红书直播 # url = 'https://www.xiaohongshu.com/hina/livestream/568980065082002402?appuid=5f3f478a00000000010005b3&apptime=' - + # url = 'https://www.bigo.tv/cn/716418802' # bigo直播 print(get_douyin_stream_data(url)) # print(get_tiktok_stream_data(url,'http://127.0.0.1:7890')) @@ -391,4 +425,4 @@ if __name__ == '__main__': # print(get_yy_stream_data(url)) # print(get_bilibili_stream_data(url)) # print(get_xhs_stream_url(url)) - + # print(get_bigo_stream_url(url))