完善 python 和 node Demo
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
from typing import Dict, Any, Optional
|
||||
from entities import (
|
||||
MsgUser, FansClubInfo, Msg, LikeMsg, MemberMessage, UserSeqMsg,
|
||||
Gender, GiftMsg, FansclubMsg, ShareMessage, RoomAnchorInfo, ShareType
|
||||
)
|
||||
|
||||
# 消息解析器
|
||||
class MessageParser:
|
||||
@staticmethod
|
||||
def parse_user(user_data: Dict[str, Any]) -> MsgUser:
|
||||
"""解析用户数据"""
|
||||
user = MsgUser()
|
||||
if not user_data:
|
||||
return user
|
||||
|
||||
user.Id = user_data.get("Id", 0)
|
||||
user.IsAdmin = user_data.get("IsAdmin", False)
|
||||
user.IsAnchor = user_data.get("IsAnchor", False)
|
||||
user.ShortId = user_data.get("ShortId", 0)
|
||||
user.DisplayId = user_data.get("DisplayId", "")
|
||||
user.Nickname = user_data.get("Nickname", "匿名用户")
|
||||
user.Level = user_data.get("Level", 0)
|
||||
user.PayLevel = user_data.get("PayLevel", 0)
|
||||
user.Gender = Gender(user_data.get("Gender", 0))
|
||||
user.HeadImgUrl = user_data.get("HeadImgUrl", "")
|
||||
user.SecUid = user_data.get("SecUid", "")
|
||||
user.FollowerCount = user_data.get("FollowerCount", 0)
|
||||
user.FollowStatus = user_data.get("FollowStatus", 0)
|
||||
user.FollowingCount = user_data.get("FollowingCount", 0)
|
||||
|
||||
# 解析粉丝团信息
|
||||
if "FansClub" in user_data and user_data["FansClub"]:
|
||||
fans_club_data = user_data["FansClub"]
|
||||
user.FansClub = FansClubInfo(
|
||||
ClubName=fans_club_data.get("ClubName", ""),
|
||||
Level=fans_club_data.get("Level", 0)
|
||||
)
|
||||
|
||||
return user
|
||||
|
||||
@staticmethod
|
||||
def parse_anchor_info(owner_data: Dict[str, Any]) -> Optional[RoomAnchorInfo]:
|
||||
"""解析主播信息"""
|
||||
if not owner_data:
|
||||
return None
|
||||
|
||||
owner = RoomAnchorInfo()
|
||||
owner.UserId = owner_data.get("UserId", "")
|
||||
owner.SecUid = owner_data.get("SecUid", "")
|
||||
owner.Nickname = owner_data.get("Nickname", "")
|
||||
owner.HeadUrl = owner_data.get("HeadUrl", "")
|
||||
owner.FollowStatus = owner_data.get("FollowStatus", 0)
|
||||
|
||||
return owner
|
||||
|
||||
@staticmethod
|
||||
def parse_common_msg_fields(data: Dict[str, Any], msg: Msg) -> Msg:
|
||||
"""解析通用消息字段"""
|
||||
msg.MsgId = data.get("MsgId", 0)
|
||||
msg.Content = data.get("Content", "")
|
||||
msg.RoomId = data.get("RoomId", "")
|
||||
msg.WebRoomId = data.get("WebRoomId", "")
|
||||
msg.RoomTitle = data.get("RoomTitle", "")
|
||||
msg.IsAnonymous = data.get("IsAnonymous", False)
|
||||
msg.Appid = data.get("Appid", "")
|
||||
|
||||
# 解析用户数据
|
||||
if "User" in data and data["User"]:
|
||||
msg.User = MessageParser.parse_user(data["User"])
|
||||
|
||||
# 解析主播数据,优先使用正确拼写的"Owner"
|
||||
if "Owner" in data and data["Owner"]:
|
||||
msg.Owner = MessageParser.parse_anchor_info(data["Owner"])
|
||||
# 如果没有"Owner"字段才考虑拼写错误的"Onwer"字段,并且确保不是字符串
|
||||
elif "Onwer" in data and data["Onwer"] and not isinstance(data["Onwer"], str):
|
||||
msg.Owner = MessageParser.parse_anchor_info(data["Onwer"])
|
||||
|
||||
return msg
|
||||
|
||||
@staticmethod
|
||||
def parse_danmaku(data: Dict[str, Any]) -> Msg:
|
||||
"""解析弹幕消息"""
|
||||
msg = Msg()
|
||||
return MessageParser.parse_common_msg_fields(data, msg)
|
||||
|
||||
@staticmethod
|
||||
def parse_like(data: Dict[str, Any]) -> LikeMsg:
|
||||
"""解析点赞消息"""
|
||||
like_msg = LikeMsg()
|
||||
MessageParser.parse_common_msg_fields(data, like_msg)
|
||||
like_msg.Count = data.get("Count", 0)
|
||||
like_msg.Total = data.get("Total", 0)
|
||||
return like_msg
|
||||
|
||||
@staticmethod
|
||||
def parse_member(data: Dict[str, Any]) -> MemberMessage:
|
||||
"""解析进入直播间消息"""
|
||||
member_msg = MemberMessage()
|
||||
MessageParser.parse_common_msg_fields(data, member_msg)
|
||||
member_msg.CurrentCount = data.get("CurrentCount", 0)
|
||||
member_msg.EnterTipType = data.get("EnterTipType", 0)
|
||||
return member_msg
|
||||
|
||||
@staticmethod
|
||||
def parse_gift(data: Dict[str, Any]) -> GiftMsg:
|
||||
"""解析礼物消息"""
|
||||
gift_msg = GiftMsg()
|
||||
MessageParser.parse_common_msg_fields(data, gift_msg)
|
||||
gift_msg.GiftId = data.get("GiftId", 0)
|
||||
gift_msg.GiftName = data.get("GiftName", "")
|
||||
gift_msg.GroupId = data.get("GroupId", 0)
|
||||
gift_msg.GiftCount = data.get("GiftCount", 0)
|
||||
gift_msg.RepeatCount = data.get("RepeatCount", 0)
|
||||
gift_msg.DiamondCount = data.get("DiamondCount", 0)
|
||||
gift_msg.GiftValue = data.get("GiftValue", 0) # 兼容原有代码
|
||||
gift_msg.Combo = data.get("Combo", False)
|
||||
gift_msg.ImgUrl = data.get("ImgUrl", "")
|
||||
|
||||
# 解析接收礼物的用户
|
||||
if "ToUser" in data and data["ToUser"]:
|
||||
gift_msg.ToUser = MessageParser.parse_user(data["ToUser"])
|
||||
|
||||
return gift_msg
|
||||
|
||||
@staticmethod
|
||||
def parse_statistics(data: Dict[str, Any]) -> UserSeqMsg:
|
||||
"""解析直播间统计消息"""
|
||||
stats_msg = UserSeqMsg()
|
||||
MessageParser.parse_common_msg_fields(data, stats_msg)
|
||||
stats_msg.OnlineUserCount = data.get("OnlineUserCount", 0)
|
||||
stats_msg.TotalUserCount = data.get("TotalUserCount", 0)
|
||||
stats_msg.TotalUserCountStr = data.get("TotalUserCountStr", "0")
|
||||
stats_msg.OnlineUserCountStr = data.get("OnlineUserCountStr", "0")
|
||||
return stats_msg
|
||||
|
||||
@staticmethod
|
||||
def parse_fansclub(data: Dict[str, Any]) -> FansclubMsg:
|
||||
"""解析粉丝团消息"""
|
||||
fansclub_msg = FansclubMsg()
|
||||
MessageParser.parse_common_msg_fields(data, fansclub_msg)
|
||||
fansclub_msg.Type = data.get("Type", 0)
|
||||
fansclub_msg.Level = data.get("Level", 0)
|
||||
fansclub_msg.FansClubName = data.get("FansClubName", "")
|
||||
return fansclub_msg
|
||||
|
||||
@staticmethod
|
||||
def parse_share(data: Dict[str, Any]) -> ShareMessage:
|
||||
"""解析直播间分享消息"""
|
||||
share_msg = ShareMessage()
|
||||
MessageParser.parse_common_msg_fields(data, share_msg)
|
||||
share_msg.ShareType = ShareType(data.get("ShareType", 0))
|
||||
return share_msg
|
||||
|
||||
@staticmethod
|
||||
def parse_follow(data: Dict[str, Any]) -> Msg:
|
||||
"""解析关注消息"""
|
||||
follow_msg = Msg()
|
||||
return MessageParser.parse_common_msg_fields(data, follow_msg)
|
||||
Reference in New Issue
Block a user