笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据助跑每一个人,欢迎直筒们关注我的公众号,大家一起讨论数据中的那些有趣的事情。

我的公众号为:livandata

python因为其自身的设计优越性,可以方便的操作各种软件平台,微信作为我们平时不可或缺的部分逐渐的凸显他的重要性,但是作为一个日常交互平台,微信当中的数据存在着非常重要的价值,那么,如何利用这部分数据,如何用代码实现微信操作,日益显现出重要性,本篇文章主要是整理微信中常用的一些技巧,希望有些用处:

1、统计微信中的男女比例:

主要是用了wxpy与pyecharts,wxpy是为了链接微信,pyecharts主要是进行图像处理。

from wxpy import *
from pyecharts import Pie
#定义一个微信机器人
bot = Bot(cache_path = True)
#获取更新好友列表
friends = bot.friends(update=False)
male = female = other = 0
#[1:]是因为整个好友列表里面自己是在第一个,排除掉
for i in friends[1:]:sex = i.sexif sex == 1:male += 1elif sex == 2:female += 1else:other += 1
#计算总数
total = len(friends[1:])
print(total)
#下面为分析
attr = ["男性","女性","其他"]
v1 = [float(male),float(female),float(other)]
pie = Pie("饼图-圆环图示例", title_pos='center')
pie.add("", attr, v1, radius=[40, 75], label_text_color=None, is_label_show=True,legend_orient='vertical', legend_pos='left')
pie.render("sex.html")

运行结果为:

2、查看好友地区分布:

通过程序运行,可以对信息进行图形化处理。

#!/usr/bin/env python
# _*_ UTF-8 _*_
from wxpy import *
from pyecharts import Map
#因为获取的列表城市都没有带市字,而pyecharts需要带个市字
b = '市'
def s(x):return x+b
#因为我好友里面除了广东的外和其他的,剩下非广东的寥寥无几,所以只提取广东的
bot = Bot(cache_path = True)
friends = bot.friends(update=False).search(province = '山东')
citys = []
for f in friends :city = f.citycitys.append(city)
r = map(s,citys)
cityss = list(r)
#为城市计数
a = {}
for i in cityss:a[i] = cityss.count(i)
print(a)
#把字典进行有序拆分为2个列表
attrs = []
values = []
for value, attr in a.items():values.append(attr)attrs.append(value)
#开始绘图
map = Map("山东地图示例", width=1200, height=600)
map.add("", attrs, values, maptype='山东', is_visualmap=False, visual_text_color='#000')
map.render("city.html")

运行结果为:

map的参考资料为:

https://blog.csdn.net/m0_37360684/article/details/84873019

https://blog.csdn.net/m0_37360684/article/details/84874640

地图不显示问题:

https://blog.csdn.net/xiamoyanyulrq/article/details/80025105

3、查看好友签名并做词云图:

#!/usr/bin/env python
# _*_ UTF-8 _*_from wxpy import *
import re
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import PIL.Image as Imagebot = Bot(cache_path = True)
friends = bot.friends(update=False)
male = female = other = 0#提取好友签名,并去掉span,class,emoji,emoji1f3c3等的字段
signatures = []
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)signatures.append(signature)
# 拼接字符串
text = "".join(signatures)
# jieba分词
wordlist_jieba = jieba.cut(text, cut_all=True)
wl_space_split = " ".join(wordlist_jieba)# wordcloud词云
my_wordcloud = WordCloud(background_color="white",max_words=2000,max_font_size=1000,random_state=42,font_path='./simsun.ttc').generate(wl_space_split)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

分析了一下我的好友签名,结果为:

难以想象,我的朋友圈是有多正能量。

4、给好友发送信息:

这段代码可以定时循环的向你的好友发送信息,也可以批量发送

#!/usr/bin/env python
# _*_ UTF-8 _*_
import wxpy,time
def get_next():new_text = "you were hacked by me,give me money"return new_textdef Dingshi():'''找到好友并发送信息'''try:# 打开微信,读取cooker信息cache_path=True。bot = wxpy.Bot(cache_path=True)# 从好友中找到要发送的具体的那个人my_friend = bot.friends().search(u'愤怒***')[0]print(my_friend)# 在登录后调用获取获取发送信息函数a = get_next()print(a)# 发送信息my_friend.send(a)except:pass
if __name__ == '__main__':for i in range(10):time.sleep(10)Dingshi()

5、微信自动回复功能:

如果需要添加条件,则可以在两个方法中添加:

#!/usr/bin/env python
# _*_ UTF-8 _*_import itchat
from itchat.content import *# 如果对方发的是文字,则我们给对方回复以下的东西
@itchat.msg_register([TEXT])
def text_reply(msg):itchat.send(('那我就祝你狗年大吉大利,新的一年事事顺心'),msg['FromUserName'])# 如果对方发送的是图片,音频,视频和分享的东西我们都做出以下回复。
@itchat.msg_register([PICTURE, RECORDING, VIDEO, SHARING])
def other_reply(msg):itchat.send(('那我就祝你狗年大吉大利,新的一年事事顺心'),msg['FromUserName'])itchat.auto_login(hotReload=True)
itchat.run()

6、交互机器人:

一般在使用微信时会存在自动回复,以及与机器人的交互等功能,主要是调用了微信的机器人。

from wxpy import *
import csv
# 自动添加好友的条件
addfriend_request = '加好友'
# 定义管理员微信名(必须是机器人的好友)
# ps:raw_content字段需要自己手动更改微信名,微信号
admin_request_name = '胥京波'
#定义管理员微信号(必须是机器人的好友)
admin_request_num = 'wxjb_710517539'
invite_text = "Helo!回复'功能 + 数字'获取对应功能\n1.我要加群\n2.我要加入协会\n3.我要购买鞋子\n4.了解我们\n5.我需要帮助\n例如:要获取我要加群的功能时回复\n\n功能1"  #任意回复获取的菜单
#定义要查找群的名字
group_name = '17中南轮滑协会萌新裙'
#菜单选项1 定义加群的条件
menu_1 = '功能1'
#菜单选项2
menu_2 = '功能2'
#菜单选项3
menu_3 = '功能3'
#菜单选项4
menu_4 = '功能4'
#菜单选项5
menu_5 = '功能5'
#表格1
csv_1 = 'test.csv'bot = Bot(cache_path = True)
#启用聊天对象的puis属性
bot.enable_puid()
#小i机器人接口
xiaoi = XiaoI('PQunMu3c66bM', 'FrQl1oi1YzpDSULeAIit')
adminer = bot.friends(update=True).search(admin_request_name)[0]
my_group = bot.groups(update=True).search(group_name)[0]
group_admin = my_group.members.search(admin_request_name)[0]#不可变集合
admin_puids = frozenset(['XX', 'YY'])
admins = list(map(lambda x: bot.friends().search(puid=x), admin_puids))def invite(user):# sorted用于排序,lambda x:x.name用于群名排序groups = sorted(bot.groups(update=True).search(group_name),key=lambda x: x.name)if len(groups) > 0:for group in groups:if len(group.members) == 500:continueif user in group:# 经过format格式化的内容传递到{}content = "您已经加入了{} [微笑]".format(group.nick_name)user.send(content)else:group.add_members(user, use_invitation=True)returnelse:# 当前群的名字后面+1next_topic = group_tmpl.format(re.search(r'\d+', s).group() + 1)new_group = bot.create_group(admins, topic=next_topic)#以上3句代码的解释为:利用for if else语句进行判断,如果从查找的群名里面找不到对应的群就自动创建一个新群并添加进去else:print('Invite Failed')#写表函数
def table(user, text):#提取用户的文本,把有用的写入表里msg_text = texttables = msg_text.split('\n')table_name = tables[1].split(':')[1]table_stu_num = tables[2].split(':')[1]table_phone_num = tables[3].split(':')[1]table_department = tables[4].split(':')[1]table_list = [table_name,table_stu_num,table_phone_num,table_department,'等待缴费']user.send('请稍等,后台处理中')# 检查表里是否有登记的学号with open(csv_1, 'r') as f:fr_csv = csv.reader(f)for row in fr_csv:if table_stu_num in row:user.send('报名失败,该学号已经登记过了')breakelse:# 写入表with open(csv_1, 'a') as f:fw_csv = csv.writer(f)fw_csv.writerow(table_list)# 查看是否写入成功with open(csv_1, 'r') as f:fr_csv = csv.reader(f)for row in fr_csv:if table_stu_num in row:user.send('报名成功,请回复‘支付宝’或者‘微信’进行支付')breakelse:user.send('报名失败,请重新报名或者联系管理员')#查询表函数
def check(user, text):check_text = text.split(':')[1]with open(csv_1, 'r') as f:fr_csv = csv.reader(f)for row in fr_csv:if check_text in row:user.send('登记信息如下,如有疑问请联系管理员')user.send('学号:'+row[1]+"\n缴费情况:"+row[-1])breakelse:user.send('暂无学号登记记录')# 注册好友请求类消息
@bot.register(msg_types=FRIENDS,enabled=True)
# 自动接受验证信息中包含 'wxpy' 的好友请求
def auto_accept_friends(msg):# 判断好友请求中的验证文本if addfriend_request in msg.text.lower():# 接受好友 (msg.card 为该请求的用户对象)new_friend = bot.accept_friend(msg.card)# 或 new_friend = msg.card.accept()# 向新的好友发送消息new_friend.send('机器人自动接受了你的请求,你可以任意回复获取功能菜单,若机器人没回复菜单则表明机器人尚未工作,请等待')#注册自动回复好友消息
@bot.register(Friend, msg_types=TEXT)
def exist_friends(msg):if menu_1 in msg.text.lower():invite(msg.sender)elif menu_2 in msg.text.lower():content_2_1 = "请复制下面的模板回复\nps:部门可以多填,如果是技术部和Hockey就填写 部门:技术部、Hockey\n填写示例:\n姓名:小明\n学号:111111111\n电话:18888888888\n部门:技术部"content_2_2 = "报名表\n姓名:\n学号:\n电话:\n部门:"msg.sender.send(content_2_1)msg.sender.send(content_2_2)elif menu_3 in msg.text.lower():# 跟报名的功能差不多就不写了。。。return '购买鞋子功能测试中'elif menu_4 in msg.text.lower():msg.sender.send('关注公众号可以了解更多')msg.sender.send_raw_msg(# 名片的原始消息类型raw_type=42,# 注意 `username` 在这里应为微信 ID,且被发送的名片必须为自己的好友raw_content='<msg username="zdnflunhua" nickname="中大南方RNF"/>')elif menu_5 in msg.text.lower():# 最初设想是返回从公众号获取的素材,结果没有相对应的Api。只能返回图片,# 语音,或者文本了,不过这个就一行代码的事,就不写了return '我要帮助功能测试中'elif '报名表' in msg.text.lower():table(msg.sender, msg.text)elif '支付宝' in msg.text.lower():msg.sender.send('请进入支付宝扫描二维码支付,备注姓名,电话\n支付完成后请第二天回复“查询:+学生号“查询情况\n示例:\n查询:111111111')msg.sender.send('二维码生成中')msg.sender.send_image('zfb.png')elif '微信' in msg.text.lower():msg.sender.send('请进入微信扫描二维码支付,备注姓名,电话\n支付完成后请第二天回复“查询:+学生号“查询情况\n示例:\n查询:111111111')msg.sender.send('二维码生成中')msg.sender.send_image('wx.png')elif '查询' in msg.text:check(msg.sender, msg.text)elif '管理员' in msg.text:msg.sender.send('请添加名片联系管理员')msg.sender.send_raw_msg(# 名片的原始消息类型raw_type=42,# 注意 `username` 在这里应为微信 ID,且被发送的名片必须为自己的好友raw_content='<msg username="bc9526" nickname="陈思煜"/>')else:return invite_text#处理管理员信息
@bot.register(adminer, msg_types=TEXT)
def adminer(msg):if '备份' in msg.text:msg.sender.send_file('test.csv')else:return "请检查命令是否输入正确"#群聊管理
@bot.register(my_group, msg_types=TEXT)
def group(msg):if msg.is_at :if '踢出' in msg.text:if msg.member == group_admin :for member_name in msg.text.split('@')[2:]:print(member_name)re_name = my_group.members.search(member_name)[0].remove()print(re_name)msg.sender.send("已经移出:"+member_name)else:return "你不是管理员不能进行踢人操作"else:xiaoi.do_reply(msg)
bot.join()

常用的命令即为上面的功能,如果后面有新的功能,会做相应的添加。

专题05-python操作微信(wxpy)相关推荐

  1. python操作微信自动发消息(微信聊天机器人)

    前言 最近在学习python,发现一个微信自动发消息的小demo感觉很有意思,试了一下,不成功,因为demo中用的是itchat这个库来操作微信,而这个库是通过微信网页版来操作微信的,现在微信网页版已 ...

  2. python操作微信手机端下载_【python】自动化连接和操作手机微信

    1. 环境配置 JDK Android SDK Appium MuMu 1.1. JDK 1.1.1. 下载安装 去华为云镜像下载JDK,我下载的版本是:jdk-8u181-windows-x64.e ...

  3. python 操作微信 群发_python 调用微信 发消息

    本篇文章讲述的是调用 python 的 wxpy 包自动发送微信消息. 相当于 登录 微信网页版. 具体代码方便复制,提供一份文字版代码 #!/usr/bin/env python3 # coding ...

  4. python操作微信电脑版_Python学习教程:教你用Python通过微信来控制电脑摄像头

    如果说强大的标准库奠定了Python发展的基石,丰富的第三方库则是python不断发展的保证.今天的Python学习教程就来通过itchart库来实现通过微信对电脑的一些操作. 1.安装库 安装itc ...

  5. python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例

    本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=UTF-8 import request ...

  6. python操作微信小程序云端数据库_微信小程序云开发之数据库操作

    本文实例为大家分享了微信小程序云开发之数据库操作的具体代码,供大家参考,具体内容如下 新建集合 1.打开云开发控制台,数据库 2.添加集合users 添加代码 onAdd: function () { ...

  7. python 操作微信闪电贷款_16、6个能够让Python程序快如闪电的小技巧

    计时专用函数 现在我们知道了需要关注哪里,那么我们可能只想要给运行缓慢的函数计时而不去管代码的其他部分.我们可以使用一个简单的装饰器来做到这点: def timeit_wrapper(func): @ ...

  8. python 操作微信订阅号(2022.7.1)

    基本配置 这个代码要丢到自己的云服务器里面 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' @time : 2022/7/1 @Author : L ...

  9. python 操作微信_利用 Python 实现微信半自动化操作

    本文首发于公众号:小夭同学,同步更新个人博客:故事胶片,转载请署名. 注意:须有一个可以登录网页版的微信号 可以在 微信网页版 登录一下查看 1.需求场景 很多管理大量微信社群的小伙伴都有这样的场景, ...

  10. python操作微信电脑版_python 通过微信发送消息控制电脑

    [Python] 纯文本查看 复制代码# coding=utf-8 import itchat from tkinter import * from tkinter import messagebox ...

最新文章

  1. mysql怎么设置计划任务_mysql设置定时任务
  2. Go基础之--数组和切片
  3. 如何修改CSDN博客的标题?
  4. 详解Django-auth-ldap 配置方法
  5. spring-boot-2.0.3应用篇 - shiro集成
  6. MongoDB使用经验总结
  7. Flutter RotatedBox旋转容器
  8. 【Matlab系列】MATLAB2014a/2018a高版本 videoinput读取摄像头解决方案
  9. MySQL 数据库性能优化之缓存参数优化
  10. 第七篇:VUE 使用 Echarts 画时钟钟表
  11. mysql多表联合查询 去重_MySQL多表联合查询
  12. android 打印图片乱码,Android 无线连接WiFi打印机打印图片全部乱码
  13. Allegro导出pdf的两种方式
  14. Java--集合框架--Map集合、 HashMap和Hashtable的区别、 Collections(集合工具类)
  15. 电脑软件测试英雄联盟,揭秘英雄联盟的自动化测试
  16. 开学倒计时,实验室里的这些准备工作你做完了吗?-LIMS2
  17. MATLAB相对声压分布彩图,矩形声化学反应器声场分布纵向共振研究
  18. 系统集成项目管理工程师_系统集成项目管理工程师,拿到证书可直接办理入户...
  19. Julia发布全功能调试器:4大新功能问世
  20. 2020.10.22--AI--立体图形制作、矛盾空间图形设计、3D文字

热门文章

  1. 秦岭NDVI动态格局
  2. 移动应用与云计算--第二届中国云计算大会有感
  3. 最新论文笔记(+15):Redactable Blockchain Protocols with Instant Redaction /IACR Cryptol.ePrint Arch 2021
  4. setheader是什么意思_XMLHTTP中setRequestHeader()简单分析
  5. 【免杀】————1、PHP一句话过狗、卫士、D盾等免杀思路
  6. 收购游戏手机厂商黑鲨背后,腾讯走了一步好棋?
  7. 【Mac使用技巧】Mac中文输入法打不出来句号
  8. GRE考试词汇平静类
  9. 视网膜数据集(3)STARE
  10. 百一测评网站切屏检测绕过