你优化后,更新一版代码
时间: 2024-01-03 20:03:56 浏览: 31
好的,这里提供一份优化后的代码,主要进行了如下改进:
1. 使用 Python 的定时器(`schedule` 模块)来实现定时获取直播间最新消息,避免过度消耗资源。
2. 在处理 WebSocket 消息时,先判断消息类型,避免出现解析错误。
3. 将获取最近消息和定时获取消息的代码块封装成函数,提高代码可读性和复用性。
4. 增加异常处理和错误提示,使代码更加健壮。
```
import time
import json
import requests
import websocket
import schedule
# 抖音直播间ID
room_id = '123456'
# 获取直播间消息接口
message_url = f'https://live.douyin.com/{room_id}/messages'
# WebSocket地址
ws_url = f'wss://douyusvc-hlh-web.douyucdn.cn/websocket/room/{room_id}'
# 连接websocket
ws = websocket.WebSocketApp(ws_url)
# 处理websocket消息
def on_message(ws, message):
try:
data = json.loads(message)
if 'data' in data and 'messages' in data['data']:
messages = data['data']['messages']
for message in messages:
content = message['content']
uid = message['uid']
print(f'用户{uid}: {content}')
except Exception as e:
print(f'处理WebSocket消息时出错: {e}')
# 获取最近消息
def get_recent_messages():
try:
response = requests.get(message_url)
data = json.loads(response.text)
messages = data['data']['messages']
for message in messages:
content = message['content']
uid = message['uid']
print(f'用户{uid}: {content}')
except Exception as e:
print(f'获取最近消息时出错: {e}')
# 定时获取直播间最新消息
def get_latest_messages():
try:
response = requests.get(message_url)
data = json.loads(response.text)
messages = data['data']['messages']
for message in messages:
content = message['content']
uid = message['uid']
print(f'用户{uid}: {content}')
except Exception as e:
print(f'定时获取消息时出错: {e}')
# 每隔1秒钟获取一次最新消息
schedule.every(1).seconds.do(get_latest_messages)
# 启动websocket
ws.on_message = on_message
ws.run_forever()
# 启动定时器
while True:
schedule.run_pending()
time.sleep(1)
```
需要注意的是,这段代码同样需要遵守抖音相关规定和法律法规,以免违反相关条款和法律法规。