danmu-sim/refs/不登陆弹幕备份.py

81 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import asyncio
import requests
import websockets
import time
import json
from datetime import datetime
# 构建API请求链接
room_id = "17066184578990"
timestamp = int(time.time() * 1000)
api_url = f"https://live-api.immomo.com/open/m/room/profile?roomid={room_id}&momoid=&src=m50011&web_uid=11126216061Xazx3TgC&_= {timestamp}"
# 发起API请求
response = requests.get(api_url)
data = response.json()
ws_token = data["data"].get("ws_token", "")
umomoid = data["data"]["momoid"]
async def connect():
uri = "wss://live-ws.immomo.com/ws/im"
async with websockets.connect(uri) as websocket:
print(f"链接websocket:[{uri}] 完成")
momoid = umomoid
roomid = room_id
token = f"{ws_token}"
data = '{{"msg_id":1,"client_time":{0},"type":"Sauth","data":{{"momoid":"{1}","roomid":"{2}","token":"{3}","barType":"NORMAL"}}}}'.format(
timestamp, momoid, roomid, token)
print(data)
await websocket.send(data)
print("Send Hello")
while True:
try:
response = await websocket.recv()
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#print(f"[{current_time}] 收到原始消息 => " + response)
try:
json_data = json.loads(response)
#print(f"[{current_time}] 收到JSON消息 => ", json_data)
message_type = json_data['groups'][0]['units'][0]['type']
if message_type == "Message":
nick = json_data['groups'][0]['nick']
text = json_data['groups'][0]['units'][0]['Msg.Message.data']['text']
print(f"[{current_time}] {nick} : {text}")
elif message_type == "EnterRoom":
text = json_data['groups'][0]['units'][0]['Set.EnterRoom.data']['text']
print(f"[{current_time}] 有新人: {text}")
elif message_type == "BiliBili":
nick = json_data['groups'][0]['nick']
text = json_data['groups'][0]['units'][0]['Pay.BiliBili.data']['text']
print(f"[{current_time}] {nick} : {text}")
elif message_type == "GiftV3":
nick = json_data['groups'][0]['nick']
text = json_data['groups'][0]['units'][0]['GiftV3.giftV3']['text']
product_id = json_data['groups'][0]['units'][0]['GiftV3.giftV3']['productId']
print(f"[{current_time}] 用户: {nick} 送出礼物,内容为: {text}产品ID为: {product_id}")
#else:
# 其他消息类型的处理
#print(f"[{current_time}] 收到未处理的消息类型: {message_type}")
except KeyError as e:
print(f"[{current_time}] JSON数据中缺少必要的键:", e)
except json.JSONDecodeError as e:
print(f"[{current_time}] 无法解析为JSON格式: ", e)
except websockets.exceptions.ConnectionClosedError:
print(f"[{current_time}] 与服务器断开链接")
break
async def main():
await connect()
asyncio.run(main())