当微信一步步走进人们的生活,大家慢慢离不开它,好了不写作文了! 今天是对wxpy库常用方法的概述,包括自动回复,自动接受好友请求,转发,监听,防撤回等功能的实现,并对微信好友进行可视化分析!
(资料图)
先用实现数据可视化部分来开开胃吧 下图是对于各城市好友的分布人数情况
首先我们需要获取微信好友的分布情况
bot = Bot(cache_path=True,login_callback=None)#设置下次自动登录,方便测试friends = bot.friends(update=True)#获取所有微信好友friend_data = []for friend in friends1: friend_data1.append(friend.city)#将微信好友的所在城市加入列表for i in friend_data: if i == "": friend_data.remove(i)for j in friend_data: if j == "Others": friend_data.remove(j)#和下面的del都是为了移除不在中国范围内或是未定义的地名便于使用绘制地图print(friend_data)a = {}for i in friend_data: a[i] = friend_data.count(i)print(a)del a[""]del a["London"]del a["Sydney"]del a["Adelaide"]# 把字典进行有序拆分为2个列表attrs = []values = []for value, attr in a.items(): values.append(attr) attrs.append(value)#获取好友所在每个城市及其人数
下图是做的使用pyecharts 的geo模块制作的地图,中国好友分布地图以及浙江好友分布地图同样都是可交互图表
friends1 = bot.friends(update=False).search(province = "浙江")#获取在浙江的好友
操作方法同上,获取浙江好友所在的城市,并将人数与城市分别放在列表中
这是中国分布地图 接下来进入主题是对wxpy库用法的操作
p = bot.friends().stats_text()#获取自身好友分布的简要概况print(p)print("*"*10)l = bot.friends().search(sex = FEMALE)#获取好友中性别为女的朋友print(l)print("*"*10)l1 = bot.friends().search(province = "浙江")#获取好友中省份为浙江的好友print(l1)print("*"*10)l2 = bot.friends().search(city = "大连")#好友中城市为大连的好友print(l2)print("*"*10)my_friend = bot.friends().search(u"萌!")[0]#查找特定名称的好友print(my_friend)print("*"*10)my_group = bot.groups(update=True).search(u"软件三班")[0]#查找群并获取群内好友print(my_group)for i in my_group: print(i)
结果如图 接下来是万众期待的聊天环节,试想你和女神在一个群里,而其他人太吵只想看她的信息怎么办,那就要在群聊中监听她,如果有人在群里@你或者所有人,但是消息却被顶上去了,这时候也需要转发
@bot.register(chats=Group)#设置聊天对象为群def for_msg(msg): if msg.is_at: msg.forward(bot.file_helper, prefix="陈彦祖发言")#这里是测试失误,来不及改,当有人@的时候就会转发到文件助手,这里前缀是陈彦祖发言,但是应该写成xxx@我,怎么改自己想要下课了赶时间! if msg.member == my_friend: msg.forward(bot.file_helper, prefix="萌!发言")#当群聊中的女神发言,就会将她的消息也转到文件助手
然后是防撤回功能
@bot.register(msg_types=NOTE)def system_msg(msg): raw = msg.raw#获取聊天信息 print(raw) print(raw["Status"]) if raw["Status"] == 4:#状态4代表撤回 revoke_msg_id = re.search("(.*?)", msg.raw["Content"]).group(1) print(revoke_msg_id) print(msg.bot.messages[::-1]) for old_msg_item in msg.bot.messages[::-1]:#获取最后一条信息并像文件助手转发(两者有不同id) print(old_msg_item) print(old_msg_item.id) if revoke_msg_id == str(old_msg_item.id): bot.file_helper.send("撤回了一条消息来自:{}".format(old_msg_item))
然后是自动添加好友请求,并随机打招呼
import randomplay1=["你好在的,加我直接转账就好了","你刚加的这个人比坤坤还努力","请问你是看中了我的美貌才加的我吗?","我是祖国的花朵,而你是祖国的荒草"]@bot.register(msg_types=FRIENDS)def auto_accept_friends(msg): new_friend = bot.accept_friend(msg.card) new_friend.send(random.choice(play1))
接着是对消息的回复功能,我直接添加了监控电脑的例子
@bot.register(chats=Friend)def friend_msg(msg): if msg.type == TEXT:#好友发送文本消息的情况执行以下 if msg.text == "监控":#如果文字为监控 cap = cv2.VideoCapture(0)#打开摄像头 ret, frame = cap.read() # show a frame # cv2.imshow("qcapture", frame) cv2.imwrite("photo.jpg",frame)#保存拍摄图片 print(msg.sender)#发送者 msg.sender.send_image("photo.jpg")#像发送者发送图片 if msg.type == PICTURE:#如果发送消息为图片格式 msg.get_file(save_path="yanzhi.jpg")#接受图片 yanzhi(msg.sender,"yanzhi.jpg")#这里是颜值检测功能,使用的是百度的api
效果如下 测试效果还是挺准的,有没有美颜差别也不大,大公司的api就是厉害 另外别忘了要加一个bot.join()可以一直调用者程序, 真的下课了没时间了,还有好多自己去百度微信文档!!!!!! 谢谢大家再见! 贴个之前基于图灵机器人自动回复聊天的代码吧
from wxpy import *import re#64abb42bcdbd4ac4ba9c43fd014d177a#3d7a22d0436f46e8a6676ae31e0e1cf6bot = Bot(cache_path=False)tuling_api_key = "64abb42bcdbd4ac4ba9c43fd014d177a"tuling = Tuling(api_key=tuling_api_key)def auto_reply(msg): return tuling.do_reply(msg)
现在图灵机器人要实名认证才能免费试用,我嫌麻烦就一直没认证,但是你们可以尝试 下课了再见!!!