81 lines
3.3 KiB
Python
81 lines
3.3 KiB
Python
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())
|