原文 偷懒省略了一些细节。有争议再解释讨论吧。
自从有了 itchat 这个神器之后,一直在考虑能做些什么东西。 先后做了发送撤回消息的 bot 和推荐 spotify 音乐的 bot,到头来,所有的聊天记录都静静地躺在我的 redis 里面,需要利用起来也十分麻烦。 于是最近,我突然想到,既然 ELK 能用来可视化 log,那何尝不能用来可视化一下微信的聊天记录呢。
ELK 全家桶。
Redis,用来通过在 itchat 中 pub,在 logstash 中 sub 来获取微信聊天内容。
Itchat。基于 web 微信的第三方 SDK。
首先自然需要写个 Itchat 的脚本来获取群消息。例子看文档已经足够。
接下来假设我们获取到一个类似
message = {"msg_from": "gyorou", "msg_content": "fuck the world"}
的消息内容。我们需要把 message 传递给 logstash,再由 logstash 写入 elasticsearch。
我想到的方法是使用 Redis 的 pubsub 方法。
先把 message dump 成 string 的形式,交给 redis publish 出去。
import json
import redis
import itchat
# 省略
redis = redis.client(...)
message = json.dumps(message)
redis.publish('wechat_message', message)
为了接收 publish 的 message,logstash 应该有如下的输入配置。
input {
redis {
data_type => "channel"
codec => "json"
key => "wechat_message"
}
}
注意点是需要codec => "json"
这一项,因为,我们 publish 的是一个 string,我们要需要将其按照 json 的格式解析出来>里面的内容。
接下来,配置 logstash 的输出。
output {
elasticsearch {
index => "from_my_wechat"
doucument_type => "chatlog"
}
}
以上两项分别对应 elasticsearch 的 index 和 type。这样我们可以通过localhost:9200/from_my_wechat/chatlog
的形式访
问和操作被索引的聊天内容。
最后打开 kibana,把我们的索引项目称from_my_wechat
填进去就大功告成了。
随便点开图标一览,画两个图呗,比如统计一下谁特么发言最多这种。
以上。
1
ke1e 2017-06-23 00:35:10 +08:00 via Android
推荐 index 使用 time based 命名,只是推荐
|
2
xujialiang 2017-06-23 00:51:40 +08:00
嗯。。。我是用 Docker 跑的,然后 elk 是记录 Docker 的日志,这样全都有了。。自己在 kibana 上做 filter
|
3
SharkIng 2017-06-23 07:43:42 +08:00 via iPhone
有没有可能不用 Redis ?
|
4
gyorou OP @ke1e 这个是之前写的,现在用了微信的 messeage id 命名,每次取消的时候找出相同的 message 还可以标注一下改 message 已经取消这种。
|
6
misaka19000 2017-06-23 08:41:40 +08:00 via Android
这个数据量有点小吧。。
|
7
crayygy 2017-06-23 08:52:22 +08:00 via iPhone
挺有兴趣的,改天研究一下 hhh 多谢
|
9
gyorou OP |
10
SharkIng 2017-06-23 09:53:59 +08:00
@gyorou #9 主要 logstash 也是占资源的,Elasticsearch 已经很占资源了.. 小搞一下玩玩也不想花太多钱
(我可能是被我司的 ELK 的开销吓到了,哈哈) |
13
aksoft 2017-06-24 09:26:38 +08:00
微信聊天记录?
|
14
bingchengcool 2017-06-27 11:00:45 +08:00
能否通过分词词性分析,找出热门话题~
|
15
gyorou OP @bingchengcool 那当然是可以的了。
|