今天想试下python与微信的结合,做一个在群里自动汇报的机器人。当然啦,今天只是初步试下怎么使用wxpy,是上网找的一篇文章看了看。完成了一个获取列表中的好友性别,然后使用pyecharts库绘制出了一个饼状图。
安装好pyecharts和wxpy的库。安装wxpy的库没有什么坑,直接pip install 就行了。我是在安装pyecharts的时候遇到的问题。
一开始我也是直接pip install pyecharts,没想到命令行报错
Command "python setup.py egg_info" failed with error code 1 in C:\Users\***\AppData\Local\Temp\pip-install-ifi00t1_\javascripthon\
这就很懵了。网上查下资料,也是五花八门。我最后的解决方式如下:
python 中可以使用.whl文件的方式安装模块,先下载.whl的文件,然后用命令行安装这个文件。
pyecharts.whl下载地址
下载完后,把这个下载好的.whl文件放到C:/Users/***的路径下,然后用命令行
pip install pyecharts-0.1.9.4-py2.py3-none-any.whl
安装成功!
首先登录自己的微信。(原先写作“登陆”,刚刚上网冲浪发现应该写作“登录”)
在Github上面发现叫这个为“微信机器人”,robot。行吧,就叫他机器人吧
from wxpy import *
bot = Bot()
Unbelievable ! 就这两行就能够实现登录自己的微信了!具体操作就是会存储一张二维码图片,然后让你扫码,在手机微信上确认登录网页版微信就行了。
但是很快你就会发现,每次测试的时候都要重新扫码好麻烦哦:(
那就要对这个做个处理,就是在定义微信机器人的时候给他加个参数
bot = Bot(console_qr=True, cache_path=True)
这样可以启用缓存,保持自己的登录状态。
然后就可以给自己或者文件传输助手发送信息。但是在给自己发送信息的时候有点特别,需要先添加自己为好友
# 在 Web 微信中把自己加为好友
bot.self.add()
bot.self.accept()
# 发送消息给自己
bot.self.send('能收到吗?')
发消息的时候就是要先获取发送的对象,当然,给自己或者文件传输助手发送消息的时候就不用。
# 给机器人自己发送消息
bot.self.send('Hello World!')
# 给文件传输助手发送消息
bot.file_helper.send('Hello World!')
# 查找昵称为'乙醚。'的好友
my_friend = bot.friends().search(u'乙醚。')[0]
#
# 发送文本
my_friend.send('Hello, WeChat!')
# 发送图片
my_friend.send_image('my_picture.png')
# 发送视频
my_friend.send_video('my_video.mov')
# 发送文件
my_friend.send_file('my_file.zip')
# 以动态的方式发送图片
my_friend.send('@img@my_picture.png')
动态的方式发送图片的意思就是函数名没有指定你要发送的是什么文件,在参数里面以@的形式告诉函数。
friends = bot.friends(update = False)
获取好友列表用这一句就够了,返回的就是一个list。
然后对于列表中的每一个好友,都获取他们的性别。sex=1的话就是男性,sex=2的话就是女性,严谨一点还要加上其他,因为有些朋友是没有填写性别的。
这里咧,获取的好友列表中还包括了自己,所以如果说“统计的是朋友的男女比例”也不是很严谨,但是影响也不是很大。
绘制饼状图的时候要定义有几个属性需要绘制,然后给每个属性一个值。属性需要一个list,值也需要一个list来存储。
然后定义饼状图的名字,以及名字的位置。
最后用add()函数将属性list,值list加入,然后设置一些值。最后函数render()就可以保存,render的参数就是保存的文件名称。一般都是保存为HTML文件,看的时候用浏览器打开。
保存的HTML文件就是在你的py文件的同级目录下。第一次打开这个HTML文件的时候我都惊了!原来python绘制统计图这么厉害呀。其实这个会动的!会动的!
from wxpy import *
from pyecharts import Pie
bot = Bot(console_qr=True, cache_path=True)
friends = bot.friends(update = False)
male = female = other = 0
for i in friends[1:]:
sex = i.sex
if (sex == 1):
male += 1
elif (sex == 2):
female +=1
else:
other += 1
total = len(friends)
attr = ["男性","女性","其他"]
vl = [float(male),float(female),float(other)]
pie = Pie("微信好友性别分布",title_pos='center')
pie.add("description",attr,vl,radius = [40,75],label_text_color = None,is_label_show = True,legend_orient='vertical',legend_pos='left')
pie.render("sex.html")