Python也能聊微信
最近研究微信API,发现个非常好用的python库:wxpy。wxpy基于itchat,使用了 Web 微信的通讯协议,实现了微信登录、收发消息、搜索好友、数据统计等功能。
这里我们就来介绍一下这个库,并在最后实现一个聊天机器人。
准备工作
安装非常简单,从官方源下载安装
pip install -U wxpy
或者从豆瓣源安装
pip install -U wxpy -i "https://pypi.doubanio.com/simple/"
模块初探
安装完成后,我们来试下几个基本的功能
1. 扫码登录微信
from wxpy import *
bot = Bot()
运行上面的程序,会弹出二维码,用手机微信扫一扫即可实现登录。
但上面的程序有一个缺点,每次运行都要扫二维码。不过wxpy非常贴心地提供了缓存的选项,如下
bot = Bot(cache_path=True)
这样把登录信息保存下来,就不用每次都扫二维码了。
2. 发送消息
bot.file_helper.send("hello")
这里的file_helper就是微信的文件传输助手,我们给文件传输助手发送一条消息,可以在手机端收到如下的消息
3. 接受消息
我们实现一个收到消息自动回复的功能。
@bot.register()
def print_message(msg):print(msg.text)return msg.text# 进入Python命令行,让程序保持运行
embed()
强哥打开自己的公众号管理平台,在后端向自己发送消息,就可以收到如下的消息回复
4. 搜索好友及微信群
我们来实现一个搜索公司群、定位老板并转发老板消息的功能
from wxpy import *bot = Bot(cache_path=True)# 定位公司群
company_group = bot.groups().search('公司微信群')[0]# 定位老板
boss = company_group.search('老板大名')[0]# 将老板的消息转发到文件传输助手
@bot.register(company_group)
def forward_boss_message(msg):if msg.member == boss:msg.forward(bot.file_helper, prefix='老板发言')# 堵塞线程
embed()
对于老板喜欢在群里面喊话的同学来说,这是一个福音,以后再也不用担心错失老板的重要信息了~~
数据统计
wxpy的好友统计功能非常好用,可以很方便地统计好友的地理位置分布和性别分布。
下面的代码中,强哥统计了下自己的好友的分布情况,并打印出人数最多的10个地区。
from wxpy import *bot = Bot(cache_path=True)
friends_stat = bot.friends().stats()friend_loc = [] # 每一个元素是一个二元列表,分别存储地区和人数信息
for province, count in friends_stat["province"].iteritems():if province != "": friend_loc.append([province, count])# 对人数倒序排序
friend_loc.sort(key=lambda x: x[1], reverse=True)# 打印人数最多的10个地区
for item in friend_loc[:10]:print item[0], item[1]
统计出来的地区分布数据画成图表如下
强哥身在上海,大多数的好友也来自上海,上面的图表也如实地反应了这一情况。
统计性别分布的代码如下
for sex, count in friends_stat["sex"].iteritems():# 1代表MALE, 2代表FEMALEif sex == 1:print "MALE %d" % countelif sex == 2:print "FEMALE %d" % count
把性别分布的数据生成图表如下
聊天机器人
有了上面功能简介部分的基础,我们来实现一个聊天机器人。
聊天机器人基于图灵机器人。图灵机器人可以在图灵机器人-中文语境下智能度最高的机器人大脑注册账号,并创建机器人。需记下api key,调用图灵API的时候会用到。
# -*- coding: utf-8 -*-
import json
import requests
from wxpy import *# 调用图灵机器人API,发送消息并获得机器人的回复
def auto_reply(text):url = "http://www.tuling123.com/openapi/api"api_key = "你的api key"payload = {"key": api_key,"info": text,"userid": "123456"}r = requests.post(url, data=json.dumps(payload))result = json.loads(r.content)return "[tuling] " + result["text"]bot = Bot(console_qr=True, cache_path=True)@bot.register(mp)
def forward_message(msg):return auto_reply(msg.text)embed()
运行上面的程序,发送消息给自己,可以看到如下的对话
机器人太逗了,上来就要红包,还把我当男朋友了~
Python也能聊微信相关推荐
- python实现自动化抢微信红包功能_【Python】用Python实现微信自动化抢红包,再也不用担心抢不到红包了...
1. 概述 刚刚收到了两个消息,一个好消息,一个坏消息. 先说好消息,好消息就是微信群里有人要发红包,开心~ 不过转念一想,前几次的红包一个都没抢到,这次???不由自主的叹了一口气 - 过了一会,内心 ...
- 用python做头像_教你用python下载和拼接微信好友头像图片
相信微信大家是用得再多也不过了.那么,对于python+微信,又能玩出什么新的花样呢?下面就给大家带来一个好玩的东西.用python下载所有的微信好友的头像,然后拼接成一张大图.这样,大家就可以转载到 ...
- 搜索python设计题的微信公众号_appium+python自动化42-微信公众号 (可能以后会遇到也遇到切换不了webview的问题 记录再此 还没试)...
前言 本篇介绍如何在微信公众号上自动化测试,以操作我的个人公众号:yoyoketang为例,没关注的,先微信关注了,再跟着操作 环境准备: python 3.6 appium 1.7以上版本 微信6. ...
- python实现微信hook_GitHub - gemgin/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...
wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...
- python实现微信hook_GitHub - redtips/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...
wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...
- python实现微信hook_GitHub - zhouxionger/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...
wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...
- python hook微信_GitHub - 15993248973/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...
wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...
- hook微信 python_GitHub - zkqiang/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...
wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...
- Python实现定时在微信群发送消息
Python实现定时在微信群发送消息 为了大家不忘记打卡,用Python写了个脚本每天上下班前自动在微信群发送打卡 此脚本使用itchat.datetime.time.schedule模块实现,具体使 ...
最新文章
- HDU1533(最小权完美匹配)
- VS2010 连接SQLSERVER数据库步骤
- cad插入块_CAD中怎么创建多重插入块?
- boost::hana::at用法的测试程序
- 【Leetcode | 顺序刷题】数学目录
- NTFS USN的Create和工具代码汇总
- 如何在MySQL随机选择记录
- bootstrap 模态窗口按钮位置_Bootstrap模态框(modal)垂直居中
- 力扣题目系列:746. 使用最小花费爬楼梯 -- 一道动态规划入门题
- Duplicate key
- Python爬取全国或特定城市百度地图慧眼、百度迁徙迁入迁出大数据
- C++中10的N次方如何表示
- iOS: pch 如何添加项目中
- 16光8电全千兆宽温工业交换机16千兆光8千兆网口机架式网管型工业级以太网交换机
- 站长天下:buyren网上购物论坛的发展
- 青少年CTFmisc 简简单单的题目
- PCL入门系列 —— StatisticalOutlierRemoval 点云统计滤波
- 嵌入式软件工程师就业方向有哪些呢?
- 用gd扩展调用imagegrabscreen截图,完全黑屏!允许服务与桌面交互没用!
- 记一次GLIB2.14升级GLIB2.18的记录以及其中的步骤原理
热门文章
- python发微信提醒天气冷了注意保暖_提醒人注意保暖的句子 天气冷了注意保暖句子...
- 叉包舍 - PPPoE之常见拨号错误代码及处理
- 学习记录557@flowable流程回退与终止
- ERP工程师做什么?
- 03-body标签中相关标签-2
- 手机移动端web 禁止手机返回功能的最好方法,虽然很变态,但是很有效.
- 工作三年的Java程序员应该达到什么水平?
- u盘锁定计算机,u盘锁电脑的方法介绍【图解】
- MySQL 之 扩展例子
- python barrier_Python多线程Barrier(障碍对象) 雷子