Open ben7th opened 9 years ago
chat_lines
room_id # 房间号
manager # 管理员名字
text # 正文
username # 发言者用户名
userlevel# 发言者等级
talk_time# 发言时间 DateTime 类型
chat_type # chat | welcome | forbid | yuwan
welcome 类型需要的字段
room_id # 房间号
username # 发言者用户名
userlevel# 发言者等级
talk_time# 发言时间 DateTime 类型
chat_type # welcome
yuwan 类型需要的字段
room_id # 房间号
username # 发言者用户名
userlevel# 发言者等级
talk_time# 发言时间 DateTime 类型
chat_type # yuwan
forbid 类型需要的字段
room_id # 房间号
manager # 管理员名字
username # 发言者用户名
talk_time# 发言时间 DateTime 类型
chat_type # forbid
chat 类型需要的字段
room_id # 房间号
text # 正文
username # 发言者用户名
talk_time# 发言时间 DateTime 类型
chat_type # chat
提交一个或多个聊天记录(四种类型)
url
/api/chat_lines
method
post
params
params[:chat_lines] => {
"0" => {
room_id => xxx,
:manager => xxx,
:text => xxx,
:username => xxx,
:userlevel => xxx,
:talk_time => 1422951502123,# Time.at(1422951502123/1000) => 2015-02-03 16:18:22 +0800
:chat_type => "forbid"
},
"1" => {
....
}
}
需要针对普通类型的聊天去索引其中的 text 字段,以便于进行全文搜索
为了进一步对斗鱼直播的直播过程进行分析统计,需要对斗鱼直播的聊天信息进行持久化存储,并进行一定的分析统计。
斗鱼的聊天室对话,目前分为四种类型。分别如下:
普通对话信息。DOM结构如下
针对普通对话信息,需要记录【发言者用户名】【发言内容】【发言时间】
到访欢迎信息。DOM结构如下
针对到访欢迎信息,需要记录【到访人用户名】【到访人等级】【发言时间】
封禁广播信息。DOM结构如下
针对封禁广播信息,需要记录【被封禁人用户名】【操作管理员用户名】【发言时间】
赠送鱼丸信息。DOM结构如下
针对赠送鱼丸信息,需要记录【赠送人用户名】【赠送人目前等级】【发言时间】,鱼丸数量目前只可能是100
以上所有信息,目前已经有很好的网页前端解析,设计持久化存储时,可以不必很照顾前端,按照更适合后台存储,更有利于后台程序编写和性能的方式去设计。
以下的粗体字部分是在分析需求,并设计实现方法时,需重点关注的点
目前采集斗鱼聊天室信息的方式是,开着网页并在网页中运行 js 脚本,js 脚本会对网页DOM做出分析,并提取对话内容。(这些目前都已经实现了)
现在需要设计一个持久化存储的服务,并给出调用方法,由 js 脚本调用,把对话信息按照规定的方式发给这个持久化存储的服务。
所以这个服务需要设计出持久化存储的方式,然后给出规定的调用方法(HTTP API)。由 js 脚本向其发送请求来记录斗鱼聊天室的聊天内容。
持久化记录聊天记录后,后续需要对其进行一定的分析统计。目前能想到的分析统计方式大概包含以下这些(需求分析时可以进一步补充)
设计持久化存储时,需要结合具体的统计形式进行考虑,以便于程序实现
其他发散:
目前要实现的聊天信息记录分析统计主要运用于斗鱼直播。如果能做到充分解耦的话,也可以设计出更为通用的针对更多来源的聊天记录的分析工具(如QQ群,微信群等)。因为所有的聊天记录分析统计是有一些共性的。
目前只是探讨这种可能性,暂时先不做过于多的通用性考虑。如果斗鱼这边做出来的统计形式效果好,我们再进一步尝试把它通用化。