Fix bugs and update dependencies

This commit addresses several issues and updates dependencies related to the video recording and data fetching functionality:

- Fix a bug causing recording errors when switching video resolutions on Douyin.
- Update the Cookie for mobile authentication on the Kuaishou platform.
- Fix an error occurring during data retrieval from TikTok.
- Resolve recording issues caused by recent updates on Douyu.

Files affected:
- main.py: Bug fix related to video resolution switching on Douyin.
- spider.py:
	-Fix Tiktok code error that lead to do not get the stream data.
	-Update Kuaishou Cookie for mobile authentication.
	-Fix Douyu parse data.
This commit is contained in:
ihmily 2023-10-30 02:33:25 +08:00
parent 6f2ab1a9c8
commit ea87f98bb0
2 changed files with 45 additions and 45 deletions

79
main.py
View File

@ -2,9 +2,9 @@
"""
Author: Hmily
Github: https://github.com/ihmily
GitHub: https://github.com/ihmily
Date: 2023-07-17 23:52:05
Update: 2023-09-30 00:39:17
Update: 2023-10-30 02:31:35
Copyright (c) 2023 by Hmily, All Rights Reserved.
Function: Record live stream video.
"""
@ -26,7 +26,7 @@ from web_rid import *
from msg_push import *
# 版本号
version = "v2.0.1"
version = "v2.0.2"
platforms = "抖音|Tiktok|快手|虎牙|斗鱼|YY|B站"
# --------------------------log日志-------------------------------------
@ -264,23 +264,27 @@ def get_douyin_stream_url(json_data):
flv_url_list = stream_url['flv_pull_url']
m3u8_url_list = stream_url['hls_pull_url_map']
video_qualities = {
"原画": "FULL_HD1",
"蓝光": "FULL_HD1",
"超清": "HD1",
"高清": "SD1",
"标清": "SD2",
}
# video_qualities = {
# "原画": "FULL_HD1",
# "蓝光": "FULL_HD1",
# "超清": "HD1",
# "高清": "SD1",
# "标清": "SD2",
# }
quality_key = video_qualities.get(video_quality)
if quality_key:
m3u8_url = m3u8_url_list.get(quality_key)
flv_url = flv_url_list.get(quality_key)
quality_list = list(m3u8_url_list.keys())
while len(quality_list) < 4:
quality_list.append(quality_list[-1])
video_qualities = {"原画": 0, "蓝光": 0, "超清": 1, "高清": 2, "标清": 3}
quality_index = video_qualities.get(video_quality)
quality_key = quality_list[quality_index]
m3u8_url = m3u8_url_list.get(quality_key)
flv_url = flv_url_list.get(quality_key)
result['m3u8_url'] = m3u8_url
result['flv_url'] = flv_url
result['is_live'] = True
result['record_url'] = m3u8_url # 使用 m3u8 链接进行录制
result['m3u8_url'] = m3u8_url
result['flv_url'] = flv_url
result['is_live'] = True
result['record_url'] = m3u8_url # 使用 m3u8 链接进行录制
return result
@ -307,24 +311,18 @@ def get_tiktok_stream_url(json_data):
stream_data = live_room.get('liveRoom', {}).get('streamData', {}).get('pull_data', {}).get('stream_data', '{}')
stream_data = json.loads(stream_data).get('data', {})
video_qualities = {
"原画": "origin",
"蓝光": "origin",
"超清": "uhd",
"高清": "sd",
"标清": "ld",
}
quality_key = video_qualities.get(video_quality)
if quality_key:
video_quality_urls = get_video_quality_url(stream_data,quality_key)
result['flv_url'] = video_quality_urls['flv']
result['m3u8_url'] = video_quality_urls['hls']
result['is_live'] = True
if result['m3u8_url']:
result['record_url'] = video_quality_urls['hls']
else:
result['record_url'] = video_quality_urls['flv']
quality_list = list(stream_data.keys()) # ["origin","uhd","sd","ld"]
while len(quality_list) < 4:
quality_list.append(quality_list[-1])
video_qualities = {"原画": 0,"蓝光": 0,"超清": 1,"高清": 2,"标清": 3}
quality_index = video_qualities.get(video_quality)
quality_key = quality_list[quality_index]
video_quality_urls = get_video_quality_url(stream_data, quality_key)
result['flv_url'] = video_quality_urls['flv']
result['m3u8_url'] = video_quality_urls['hls']
result['is_live'] = True
result['record_url'] = result['flv_url'] if result['flv_url'] else result['m3u8_url']
result['record_url'] = re.sub("only_audio=1", "only_audio=0", result['record_url'])
return result
@ -444,10 +442,11 @@ def get_douyu_stream_url(json_data, cookies):
rid = str(room_info['rid'])
rate = video_quality_options.get(video_quality, '0') # 默认为原画
flv_data = get_douyu_stream_data(rid, rate, cookies)
flv_url = flv_data['data']['url']
result['flv_url'] = flv_url
result['is_live'] = True
result['record_url'] = flv_url # 斗鱼目前只能使用flv视频流录制
flv_url = flv_data['data'].get('url', None)
if flv_url:
result['flv_url'] = flv_url
result['is_live'] = True
result['record_url'] = flv_url # 斗鱼目前只能使用flv视频流录制
return result

View File

@ -2,9 +2,9 @@
"""
Author: Hmily
Github:https://github.com/ihmily
GitHub:https://github.com/ihmily
Date: 2023-07-15 23:15:00
Update: 2023-09-30 00:39:17
Update: 2023-10-30 01:58:23
Copyright (c) 2023 by Hmily, All Rights Reserved.
Function: Get live stream data.
"""
@ -72,7 +72,7 @@ def get_tiktok_stream_data(url, proxy_addr=None, cookies=None):
if cookies:
headers['Cookie'] = cookies
if not proxy_addr:
if proxy_addr:
proxies = {
'http': proxy_addr,
'https': proxy_addr
@ -123,7 +123,7 @@ def get_kuaishou_stream_data2(url, cookies=None):
'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',
'Referer': "https://www.kuaishou.com/short-video/3x224rwabjmuc9y?fid=1712760877&cc=share_copylink&followRefer=151&shareMethod=TOKEN&docId=9&kpn=KUAISHOU&subBiz=BROWSE_SLIDE_PHOTO&photoId=3x224rwabjmuc9y&shareId=17144298796566&shareToken=X-6FTMeYTsY97qYL&shareResourceType=PHOTO_OTHER&userId=3xtnuitaz2982eg&shareType=1&et=1_i/2000048330179867715_h3052&shareMode=APP&originShareId=17144298796566&appType=21&shareObjectId=5230086626478274600&shareUrlOpened=0&timestamp=1663833792288&utm_source=app_share&utm_medium=app_share&utm_campaign=app_share&location=app_share",
'content-type': 'application/json',
'Cookie': 'did=web_5653f81a4c4c41b6a0bc08e99df82009; didv=1696004011000',
'Cookie': 'did=web_e988652e11b545469633396abe85a89f; didv=1696004001000',
}
if cookies:
headers['Cookie'] = cookies
@ -206,7 +206,8 @@ def get_douyu_info_data(url):
response = opener.open(req, timeout=15)
html_str = response.read().decode('utf-8')
json_str = re.search('ssr_pageContext" type="application\/json">(.*?)<\/script>', html_str).group(1)
json_str = re.search('\<script id\=\"vike_pageContext\" type\=\"application\/json\"\>(.*?)<\/script>',
html_str).group(1)
json_data = json.loads(json_str)
return json_data