Python 微信机器人
1、安装支持
# wxpy
# pyecharts
# Pillow
# echarts-china-*
# echarts-cities-*
# echarts-countries-*
# 以上软件包都要进行安装,名称变成蓝色表示安装成功
2、微信登录
# 安装 wxpy 包
# 初始化微信登录 导入微信机器人包
import wxpy
wxpy.Bot()
# 建立登录缓存,完成二维码登录, cache_path建立wxpy.pkl缓存文件
wxpy.Bot(cache_path=True)
print("登录成功")
print("即将退出程序")
# 保持微信登录状态
wxpy.embed()
3、机器人对象
# 将wxpy中所有变量进行导入
from wxpy import *
bot = Bot(cache_path=True)
# 返回值为登录该账号的用户
print(bot)
# 所有好友
friends = bot.friends()
# print(friends)
# 所有群组
groups = bot.groups()
# 自己
_self = friends[0]
print(_self)
# 性别
#_self.sex
print(_self.sex)
# 省份
# _self.province
print(_self.province)
# 指定分组
# 指定好友,指定分组都不能排除重名情况,所以search的结果为list类型
# 通常只有指定的第一个好友|分组,那么就是结果list的第0位
# 好友查询
bot.friends().search("好友名")[0]
# 群组查询
bot.groups().search("群组名")[0]
# 文件助手
bot.file_helper.send("给文件助手的信息回复")
# 保持登录状态
# embed()
4、注册装饰器
# 注册好友回复
@bot.register()
def friend_reply(msg):
# 信息内容
# msg.text
# 发送者
# msg.sender.name
return "回复的信息"
# 注册群回复
@bot.register(chats=bot.groups().search("群组名")[0])
def group_reply(msg):
# 判断消息是不是老板发送的
if msg.member.name == "群员名":
return "1"
指定好友自动回复
from wxpy import *
bot = Bot(cache_path=True)
frinend = bot.friends().search("Ranga")[0]
@bot.register()
def abc(msg):
name = msg.sender.name
print(name + ":" + msg.text)
print(msg.sender.name, frinend.name)
if name == frinend.name:
# 回复
return "自动回复: 您好! 有事请发红包"
embed()
5、性别分析
# 创建一个扇图对象
pie = pyecharts.Pie("性别统计")
# 添加数据:根据性别对数据进行分析
pie.add("性别统计",["男性","女性","其他"],[man,woman,other])
# 渲染html文件
pie.render("性别统计.html")
应用
from wxpy import *
from pyecharts import Pie
import webbrowser
bot = Bot(cache_path=True)
# 拿到所有的好友
friends = bot.friends()
# 统计每一个性别好友的个数
male = 0
female = 0
other = 0
# 好友个数
print("好友个数:", friends.__len__())
# 通过迭代器变量,判断性别,统计数据
for f in friends:
if f.sex == 1:
male += 1
elif f.sex == 2:
female += 1
else:
other += 1
# 设置扇图对象
pie = Pie("性别比例")
# 添加数据
pie.add("性别比例", ["野兽", "美女", "哇塞"], [male, female, other])
# 将对象渲染成可视化的html文件
pie.render("性别分析.html")
# 自动打开默认浏览器显示页面
webbrowser.open("性别分析.html")
6、区域分析
# 创建一个地图对象
map = pyecharts.Map("地域分布")
# 添加数据(是否使用视觉映射组件)
map.add("地域分布",mapdic.keys(),mapdic.values(),is_visualmap=True)
# 生成html文件
map.render("地域分布.html")
应用
from wxpy import *
from pyecharts import Map
import webbrowser
bot = Bot(cache_path=True)
# 拿到所有的好友
friends = bot.friends()
# 分析好友的地理位置(省份)
mapdic = {}
for f in friends:
# 拿到省份
province = f.province
# 数据字典中有没有改省份了
if f.province in mapdic:
# 有了,原数据基础上+1
mapdic[f.province] += 1
else:
# 没有,设置一个这样的key,且设置初始值为1
mapdic[f.province] = 1
# 创建一个地图对象
map = Map("地域分布")
# 添加数据(是否使用视觉映射组件)
map.add("地域分布",mapdic.keys(),mapdic.values(),is_visualmap=True)
# 生成html文件
map.render("地域分布.html")
webbrowser.open("地域分布.html")
7、设置图灵机器人回复
import json
import requests
def getmsg(t):
url = "http://openapi.tuling123.com/openapi/api?key=e2cce407c9684150bc733622f0b40150&info=" + t
# url 信息要先进行注册申请
# 请求接口 获取返回的内容
response = requests.get(url)
# 使用json模块将字符串转换为字典方便取值
dic = json.loads(response.content.decode("utf-8"))
return dic["text"]
@bot.register()
def receive(msg):
if msg.sender == bot.friends().search("指定好友名")[0]:
return getmsg(msg.text)
应用
from wxpy import *
import requests
import json
bot = Bot(cache_path=True)
friend = bot.friends().search("Ranga")[0]
def getmsg(t):
url = "http://openapi.tuling123.com/openapi/api?key=e2cce407c9684150bc733622f0b40150&info=" + t
# 请求接口 获取返回的内容
response = requests.get(url)
# 使用json模块将字符串转换为字典方便取值
dic = json.loads(response.content.decode("utf-8"))
# 机器人信息
print(dic["text"])
return dic["text"]
@bot.register()
def receive(msg):
# 好友信息
print(msg.text)
if msg.sender == friend:
return getmsg(msg.text)
embed()