笔者这几天,简单看了一下Python里的wxpy模块后,搭配Matplotlib模块撰写的一个wxpy基本使用方法教程,也研究了一些比较好玩的东西,主要利用了wxpy对微信进行一系列的自动化 *** 作。
比如利用wxpy登录微信、给微信文件助手发送消息、给单个微信好友发送消息、微信消息群发(谨慎使用)以及微信聊天机器的搭建使用过程。
你以为wxpy只能这样?No,最后笔者利用wxpy获取了我的微信好友的数量、性别、城市、省份、昵称及个性签名,和关注的微信公众号昵称、公众号简介信息。
搭配Matplotlib进行了一系列数据的可视化,中间参杂着笔者的一些东倒西歪的文字分析,从这些,我解读出了一个真实的我(文末正解)。
小编在此谢谢大家的观看!Python很容易学!所以小编有弄一个交流,互问互答,资源共享的交流学习基地,如果你也是Python的学习者或者大牛都欢迎你来!㪊:548+377+875!一起 学习共同进步!
wxpy基本介绍与安装1.wxpy基本介绍
wxpy基于itchat,使用了Web微信的通讯协议,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。实现了微信登录、收发消息、搜索好友、数据统计、微信公众号、微信好友、微信群基本信息获取等功能。
可用来实现各种微信个人号的自动化 *** 作。
方法一:直接安装
pip install wxpy
方法二:豆瓣源安装(推荐)
pip install -i https://pypi.douban.com/simple/ wxpy
实践出真知
1.给自己的文件传输助手发消息
from wxpy import *# 初始化一个机器人对象bot = Bot(cache_path=True)# 向文件传输助手发送消息bot.file_helper.send("hello,I'm XksA!")
BOT类基本参数介绍:
cache_path – 设置当前会话的缓存路径,并开启缓存功能;为 None (默认) 则不开启缓存功能。 开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 设为 True 时,使用默认的缓存路径 ‘wxpy.pkl’。qr_path – 保存二维码的路径console_qr – 在终端中显示登陆二维码
运行后d出一个二维码图片,用微信扫码登录即可,再回来看手机消息。
微信文件传输助手
特别提醒:使用的微信账号不能为新注册的账号,不然会报错Keyerror:'pass_ticket'。
2.给指定朋友发送消息
# 初始化一个机器人对象# cache_path缓存路径,给定值为第一次登录生成的缓存文件路径bot = Bot(cache_path="H:PyCodingWxpy_testwxpy.pkl")# 查找朋友"极简XksA"my_frIEnd = bot.frIEnds().search('极简XksA')[0]# 发送消息my_frIEnd.send('hello 极简XksA!')'''除此之外还有可以发送一下内容,自己动手尝试吧发送图片my_frIEnd.send_image('hello.png')发送视频my_frIEnd.send_vIDeo('hello.mp4')发送文件my_frIEnd.send_file('hello.rar')'''
运行结果:
单独好友
3.群发消息(今早醒来突发奇想,给每人发个早安!)
import time# 初始化一个机器人对象# cache_path为登录状态缓存路径,给定值为第一次登录生成的缓存文件路径bot = Bot(cache_path="H:PyCodingWxpy_testwxpy.pkl")# 群发消息(谨慎使用,哈哈哈)my_frIEnds = bot.frIEnds(update=False)my_frIEnds.pop(0) # 去除列表第一个元素(自己)for i in range(120): frIEnd = my_frIEnds[i] frIEnd.send('Good morning,the early bird catches the worm!(早上好,早起的鸟儿有虫吃!)') time.sleep(2) frIEnd.send('不用回复,生活中一起加油!')
运行效果:
群发消息效果图
4.获取自己的微信好友数、活跃微信群数、关注微信公众号数
# 获取所有好友[返回列表包含Chats对象(你的所有好友,包括自己)]t0 = bot.frIEnds(update=False)# 查看自己好友数(除开自己)print("我的好友数:"+str(len(t0)-1))# 获取所有微信群[返回列表包含Groups对象]t1 = bot.groups(update=False)# 查看微信群数(活跃的)print("我的微信群聊数:"+str(len(t1)))# 获取所有关注的微信公众号[返回列表包含Chats对象]t2 = bot.mps(update=False)# 查看关注的微信公众号数print("我关注的微信公众号数:"+str(len(t2)))
运行结果:
# 注:如果直接把t0、t1、t2打印出就是对应得名称(不同类型,自己可以试一下)我的好友数:242我的微信群聊数:6我关注的微信公众号数:125
5.个人聊天机器人搭建(基于自己的)
(1)自己的聊天机器人
# 查找聊天对象my_frIEnd = bot.frIEnds().search('极简XksA')[0]my_frIEnd.send('hello 极简XksA!')# 自动回复# 如果想对所有好友实现机器人回复把参数 my_frIEnd 改成 chats = [FrIEnd]@bot.register(my_frIEnd)def my_friednd_message(msg): print('[接收]' + str(msg)) if msg.type != 'Text': # 除文字外其他消息回复内容 ret = '你给我看了什么![拜托]' elif "你来自哪里" in str(msg): # 特定问题回答 ret = "我来自极简XksA" else: # 文字消息自动回答 ret = '我爱你' print('[发送]' + str(ret)) return ret# 进入交互式的 Python 命令行界面,并堵塞当前线程embed()
(2)聊天效果图
基于自己的聊天机器人
6.个人聊天机器人搭建(基于图灵机器人的)
(1)事前准备
点击这里注册图灵机器人账号,然后创建一个机器人,即可获得属于你的图灵机器人API。
图灵机器人API获取
(2) 创建属于自己的聊天机器人
方法一:使用Tuling类,简单实现# 登录缓存路径,第一次设置为True# 生成缓存文件wxpy.pkl后,为该文件路径bot = Bot(cache_path="H:PyCodingWxpy_testwxpy.pkl") tuling = Tuling(API_key='你的图灵接口API')print('极简机器人已经启动')# 我的小号,测试需谨慎my_friednd = bot.frIEnds().search('极简XksA')[0]# 如果想对所有好友实现机器人回复把参数my_frIEnd改成chats = [FrIEnd]# 使用图灵机器人自动与指定好友聊天@bot.register(my_frIEnd)def reply_my_frIEnd(msg): tuling.do_reply(msg)# 进入交互式的 Python 命令行界面,并堵塞当前线程embed()方法二:自己手动发送POST请求,有点麻烦哈哈哈~
def auto_ai(text): url = "http://www.tuling123.com/openAPI/API" API_key = "你的图灵接口API" payload = { "key": API_key,"info": text,"userID": "老表" } r = requests.post(url,data=Json.dumps(payload)) result = Json.loads(r.content) return "[极简机器人] " + result["text"]bot = Bot(cache_path="H:PyCodingWxpy_testwxpy.pkl") print('极简机器人已经启动')# 我的小号,测试需谨慎my_friednd = bot.frIEnds().search('极简XksA')[0]# 如果想对所有好友实现机器人回复把参数my_frIEnd改成chats = [FrIEnd]@bot.register(my_friednd)def my_friednd_message(msg): print('[接收]' + str(msg)) if msg.type != 'Text': ret = '你给我看了什么![拜托]' else: ret = auto_ai(msg.text) print('[发送]' + str(ret)) return ret# 进入交互式的 Python 命令行界面,并堵塞当前线程embed()
(3)聊天效果图
基本测试,图灵机器人可以实现查询天气、车票、翻译、基本聊天等功能,比我们自己写的强,哈哈哈。
个人聊天效果图
7.来点有趣的
(1)获取微信好友性别、位置分布数据
'''author : 极简XksAdata : 2018.8.26goal : 获取微信好友性别、分布、微信昵称,可视化分析'''from wxpy import *# 初始化一个机器人对象# cache_path缓存路径,给定值为第一次登录生成的缓存文件路径bot = Bot(cache_path="H:PyCodingWxpy_testwxpy.pkl")#获取好友列表(包括自己)my_frIEnds = bot.frIEnds(update=False)'''stats_text 函数:帮助我们简单统计微信好友基本信息简单的统计结果的文本 :param total: 总体数量 :param sex: 性别分布 :param top_provinces: 省份分布 :param top_citIEs: 城市分布 :return: 统计结果文本'''print(my_frIEnds.stats_text())
运行结果:
老表 共有 245 位微信好友男性: 140 (57.1%)女性: 79 (32.2%)top 10 省份湖北: 88 (35.92%)广东: 16 (6.53%)北京: 12 (4.90%)湖南: 5 (2.04%)上海: 5 (2.04%)浙江: 4 (1.63%)河南: 4 (1.63%)安徽: 3 (1.22%)山东: 3 (1.22%)福建: 3 (1.22%)top 10 城市荆州: 25 (10.20%)武汉: 22 (8.98%)黄石: 21 (8.57%)海淀: 5 (2.04%)广州: 5 (2.04%)深圳: 4 (1.63%)黄冈: 4 (1.63%)杭州: 3 (1.22%)长沙: 3 (1.22%)昌平: 3 (1.22%)
(2)利用Matplotlib进行数据可视化
1)性别占比饼图
from pylab import *mpl.rcParams['Font.sans-serif'] = ['SimHei']# 上面两行代码解决matplotlib绘图不能显示中文问题import matplotlib.pyplot as pltlabels = ['男性','女性','其他']sizes = [57.1,32.2,10.7]explode = (0,0.1,0)fig1,ax1 = plt.subplots()ax1.pIE(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)# 纵横相等,画成一个圆ax1.axis('equal')plt.legend()plt.show()
效果图:
性别占比饼图
我的天啊(自绘),我的微信好友居然是男性居多,嘿嘿,也正常,笔者从不沾花惹草,当然女生也不是特别少嘿,包含了家人朋友还有一些社会人嘿。
2)城市分布条形图
import numpy as npimport matplotlib.pyplot as pltn_groups = 10# 城市分布数量权值city_weight = (10.2,8.98,8.57,2.04,1.63,1.22,1.22)fig,ax = plt.subplots()index = np.arange(n_groups)bar_wIDth = 0.35opacity = 0.4error_config = {'ecolor': '0.3'}rects1 = ax.bar(index,city_weight,bar_wIDth,Alpha=opacity,color='b',error_kw=error_config,label='城市')ax.set_xlabel('城市名称')ax.set_ylabel('数据占比(%)')ax.set_Title('好友城市top10')ax.set_xticks(index + bar_wIDth / 2)ax.set_xticklabels(('荆州','武汉','黄石','海淀','广州','深圳','黄冈','杭州','长沙','昌平'))ax.legend()fig.tight_layout()plt.show()
效果图:
城市发布图
从图中容易看出X先生好友多在荆州,那猜猜X先生是哪里的人?没错,就是荆州人嘿,你的好友里是不是也是家乡人最多呢?(突然地想家!)
3)好友省份分布图
from pyecharts import Map# matplotlib的方法比较麻烦,显示起来还没pyecharts 好,就用了pyecharts value = [359.2,65.3,49.0,20.4,16.3,12.2,12.2]attr = [ "湖北","广东","北京","湖南","上海","浙江","河南","安徽","山东","福建" ]map = Map("好友分布省份top10",wIDth=600,height=400)map.add( "",attr,value,maptype="china",is_visualmap=True,visual_text_color="#000",)map.render()
效果图:
好友省份分布图
是不是很直接明了,我的好友基本在我国中南部,你知道你的好友分布吗?我在长江中下游,这里有水有山,有花有草,有乐园。
4)获取好友微信昵称和个性签名,词云分析
bot = Bot(cache_path="H:PyCodingWxpy_testwxpy.pkl")#获取好友列表(包括自己)my_frIEnds = bot.frIEnds(update=False)# 微信昵称nick_name = ''# 微信个性签名wx_signature = ''for frIEnd in my_frIEnds: # 微信昵称:Nickname nick_name = nick_name + frIEnd.raw['Nickname'] # 个性签名:Signature wx_signature = wx_signature + frIEnd.raw['Signature']nick_name = jIEbaclearText(nick_name)wx_signature = jIEbaclearText(wx_signature)make_wordcloud(nick_name,1)make_wordcloud(wx_signature,2)
效果图:
微信好友昵称
我的微信好友昵称,有点复杂,搞淘宝的,浩浩,石头,还有创业的,当然最醒目的是老师,都说老师是园丁,谢谢您养育了我们(突发其感)。
微信好友个性签名
我发现他们可以练成一段话:我们所有的人生,就是平凡的自己最伟大,遇见一个美好的自己,一生不止生活,加油。。。
5)获取关注微信公众号名称和基本简介,词云分析
# 获取微信公众号名称wx_public_name = ''# 公众号简介wx_pn_signature = ''# 获取微信公众号列表my_wx_pn = bot.mps(update=False)for wx_pn in my_wx_pn: wx_public_name = wx_public_name + wx_pn.raw['Nickname'] wx_pn_signature = wx_pn_signature + wx_pn.raw['Signature']wx_public_name = jIEbaclearText(wx_public_name)make_wordcloud(wx_public_name,3)wx_pn_signature = jIEbaclearText(wx_pn_signature)make_wordcloud(wx_pn_signature,4)
效果图:
关注微信公众号昵称词云图
看出什么蹊跷没?你问我爱你有多深,你看看Python就知道了哈哈!
公众号简介词云图
后言基本可以看出我关注的都是积极向上的嘿,Java、Python、英语、数据、爬虫…...
总结,从上面的数据可视化结果,我推测出这样的我:X先生,微信昵称老表,性别男,坐标地址湖北荆州,好友中男性居多,说明事业心重,女性也不少,说明女人缘也不错,微信好友个性签名基本积极向上。
有生活,有奋斗,有喜欢,所关注微信公众号,大多是技术相关的。专注于Python,也有时候三心二意玩Java,应该是一名大学生,还关注有大学官方公众号.....哈哈哈(以上纯属笔者自卖自夸,好像还蛮有道理的嘿!)
总结以上是内存溢出为你收集整理的如何用 Python 测出你和微信好友的亲密程度?马上揭秘!全部内容,希望文章能够帮你解决如何用 Python 测出你和微信好友的亲密程度?马上揭秘!所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)