自动获取群员名称并用群员名称生成词云图,生成QQ好友列表昵称词云图

 Lan   2020-06-01 11:36   438 人阅读  2 条评论

利用昨天的QQ群获取的bkn值来获取指定qq群的群员昵称,然后生成词云图,也可以根据自己的好友列表的昵称生成词云图。

$$I4YGX$AD@`_PMT0HE[ND5.jpg

这个就直接上代码了:

import re

import requests
from matplotlib import pyplot as plt
from wordcloud import WordCloud


# 根据skey获取bkn值
def get_bkn(skey):
    e = skey
    t = 5381
    n = 0
    o = len(e)
    # www.lanol.cn By:Lan
    while n < o:
        t += (t << 5) + ord(e[n])
        n += 1
    return t & 2147483647


# 获取好友列表昵称
def getfriendlist(bkn):
    url = 'https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list'
    data = {
        'bkn': bkn,
    }
    Html = requests.post(url=url, headers=headers, data=data).json()
    result = html['result']
    ids = []
    names = []
    for i in result:
        ids.append(i)
    for i in range(1, len(ids)):
        a = result[str(ids[i])]
        mems = a['mems']
        for j in mems:
            names.append(j['name'])
    return str(names)


# 获取群友名称
def getgrouplist(bkn, groupid):
    url = 'https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
    nicks = []
    data = {
        'gc': groupid,
        'st': '0',
        'end': '20',
        'sort': '0',
        'bkn': bkn,
    }
    html = requests.post(url=url, headers=headers, data=data).json()
    nums = html['count']
    for i in range(0, nums, 40):
        data = {
            'gc': groupid,
            'st': i,
            'end': i + 40,
            'sort': '0',
            'bkn': bkn,
        }
        html = requests.post(url=url, headers=headers, data=data).json()
        mems = html['mems']  # From: www.lanol.cn Author:Lan
        for i in mems:
            nicks.append(i['nick'])
    return str(nicks)


def getresult(words):
    words = str(words).replace('nbsp', '').replace('\'', '').replace('u3000', '').replace('u202d', '').replace(
        'amp', '')
    font = 'msyh.ttc'
    # From:www.lanol.cn Author:Lan
    wc = WordCloud(font_path=font,  # 如果是中文必须要添加这个,否则会显示成框框
                   background_color='white',
                   width=1800,
                   height=1080,
                   ).generate(words)
    wc.to_file('a.png')
    plt.imshow(wc)
    plt.axis('off')
    input("结果已生成在代码目录下的a.png,\n欢迎来我博客转一转www.lanol.cn\n回车后退出")
    plt.show()


if __name__ == '__main__':
    cookie = input("请输入QQ登陆的Cookie值:")
    headers = {
        'cookie': cookie
    }
    bkn = get_bkn(re.findall('; skey=(.*?);', cookie)[0])
    a = input('1,生成好友列表词云图\n2,生成群友昵称词云图\n>>>')
    if a == '1':
        getresult(getfriendlist(bkn))
    elif a == '2':
        groupid = input("请输入群号:")
        getresult(getgrouplist(bkn, groupid))
    else:
        input("当前功能不存在")

这个一些细节部分根据自己需要然后优化修改一下就行了。

生成的结果图片在软件目录的a.png(自己可以获取群名称,我就懒得改了)

cookie获取方法下次再水一篇帖子。

使用教程:

因为刚刚有人评论不会使用,所以就来一个使用教程吧。

首先呢,你需要有一个Python环境,然后需要安装wordcloud模块,request模块以及matplotlib模块

然后再新建一个py文件,将上面的代码全部复制到py文件中,然后运行即可。

Cookie获取方法:

进入这个网站:https://qun.qq.com/member.html

登陆之后,刷新,点击F12,点击XHR,再点击这里面的随便一条记录

image.png

找到Cookie,然后将后面的内容全部复制,如图我的这个就是pgv_pvi开始一直复制到2034也就是结尾,这个就是Cookie值

image.png

本文地址:https://www.lanol.cn/post/254.html
版权声明:本文为原创文章,版权归 Lan 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

 评论列表

  1. 访客
    访客  @回复

    还是不会用

    • Lan
      Lan 2020-06-01 15:03:40  回复

      @访客哦哦,我再把教程写一下,然后我看看能不能打包一下