Py学习  »  Python

用Python完转微信

Python学习交流 • 6 年前 • 774 次点击  

1. 微信好友男女比例

想统计下自己微信里好友的性别比例,当然也是很简单,先获取好友列表,统计列表里性别计数


import itchat


# 先登录

itchat.login()


# 获取好友列表

friends = itchat.get_friends(update=True)[0:]


# 初始化计数器,有男有女,当然,有些人是不填的

male = female = other = 0


# 遍历这个列表,列表里第一位是自己,所以从"自己"之后开始计算

# 1表示男性,2女性

for i in friends[1:]:

    sex = i["Sex"]

    if sex == 1:

        male += 1

    elif sex == 2:

        female += 1

    else:

        other += 1


# 总数算上,好计算比例啊~

total = len(friends[1:])


# 好了,打印结果

print u"男性好友:%.2f%%" % (float(male) / total * 100)

print u"女性好友:%.2f%%" % (float(female) / total * 100)

print u"其他:%.2f%%" % (float(other) / total * 100)

好看看结果:

pip install echarts-python

展示比例一般使用百分比圆饼表吧


# 使用echarts,加上这段

from echarts import Echart, Legend, Pie


chart = Echart(u'%s的微信好友性别比例' % (friends[0]['NickName']), 'from WeChat')

chart.use(Pie('WeChat',

              [{'value': male, 'name': u'男性 %.2f%%' % (float(male) / total * 100)},

               {'value': female, 'name': u'女性 %.2f%%' % (float(female) / total * 100)},

               {'value': other, 'name': u'其他 %.2f%%' % (float(other) / total * 100)}],

              radius=["50%", "70%"]))

chart.use(Legend(["male", "female", "other"]))

del chart.json["xAxis"]

del chart.json["yAxis"]

chart.plot()

2. 好友个性签名词云

获取好友列表的时候,返回的json信息中还看到了有个性签名的信息,脑洞一开,把大家的个性签名都抓下来,看看高频词语,还做了个词云。


# coding:utf-8

import itchat


# 先登录

itchat.login()


# 获取好友列表

friends = itchat.get_friends(update=True)[0:]

for i in friends:

    # 获取个性签名

    signature = i["Signature"]

print signature

先全部抓取下来 

打印之后你会发现,有大量的span,class,emoji,emoji1f3c3等的字段,因为个性签名中使用了表情符号,这些字段都是要过滤掉的,写个正则和replace方法过滤掉


for i in friends:

# 获取个性签名

    signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")

# 正则匹配过滤掉emoji表情,例如emoji1f3c3等

    rep = re.compile("1f\d.+")

    signature = rep.sub("", signature)

    print signature

接来下用jieba分词,然后制作成词云,首先要安装jieba和wordcloud库


pip install jieba

pip install wordcloud

代码:


 # wordcloud词云
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import os
import numpy as np
import PIL.Image as Image


d = os.path.dirname(__file__)
alice_coloring = np.array(Image.open(os.path.join(d, "wechat.jpg")))
my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
                         max_font_size=40, random_state=42,
                         font_path='/Usersbastian/Library/Fonts/Arial Unicode.ttf')\
    .generate(wl_space_split)

image_colors = ImageColorGenerator(alice_coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

# 保存图片 并发送到手机
my_wordcloud.to_file(os.path.join(d, "wechat_cloud.png"))
itchat.send_image("wechat_cloud.png", 'filehelper') 


3. 微信自动回复

接着来实现一个类似qq上的自动回复,原理就是接收到消息,就发消息回去,同时发一条给文件助手,就可以在文件助手中统一查看消息。

代码很简单,来看看

#coding=utf8

import itchat


# 自动回复

# 封装好的装饰器,当接收到的消息是Text,即文字消息

@itchat.msg_register('Text')

def text_reply(msg):

    # 当消息不是由自己发出的时候

    if not msg['FromUserName'] == myUserName:

        # 发送一条提示给文件助手

        itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %

                        (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])),

                         msg['User']['NickName'],

                         msg['Text']), 'filehelper')

        # 回复给好友

        return u'[自动回复]您好,我现在有事不在,一会再和您联系。\n已经收到您的的信息:%s\n' % (msg['Text'])


if __name__ == '__main__':

    itchat.auto_login()


    # 获取自己的UserName

    myUserName = itchat.get_friends(update=True)[0]["UserName"]

    itchat.run()


运行后会保持登录状态,开启自动回复模式,手机上查看:

当然,除了文字Text信息,还可以接收图片(表情包算图片),语音,名片,地理位置,分享和类型为Note的信息(就是有人提示类的消息,例如撤回消息),把装饰器写成下面形式即可接受,大家可以试试


感谢 大家
转发 关注




今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/hCwiGkYZkv
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3143
 
774 次点击