最近研究微信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也能聊微信相关推荐

  1. python实现自动化抢微信红包功能_【Python】用Python实现微信自动化抢红包,再也不用担心抢不到红包了...

    1. 概述 刚刚收到了两个消息,一个好消息,一个坏消息. 先说好消息,好消息就是微信群里有人要发红包,开心~ 不过转念一想,前几次的红包一个都没抢到,这次???不由自主的叹了一口气 - 过了一会,内心 ...

  2. 用python做头像_教你用python下载和拼接微信好友头像图片

    相信微信大家是用得再多也不过了.那么,对于python+微信,又能玩出什么新的花样呢?下面就给大家带来一个好玩的东西.用python下载所有的微信好友的头像,然后拼接成一张大图.这样,大家就可以转载到 ...

  3. 搜索python设计题的微信公众号_appium+python自动化42-微信公众号 (可能以后会遇到也遇到切换不了webview的问题 记录再此 还没试)...

    前言 本篇介绍如何在微信公众号上自动化测试,以操作我的个人公众号:yoyoketang为例,没关注的,先微信关注了,再跟着操作 环境准备: python 3.6 appium 1.7以上版本 微信6. ...

  4. python实现微信hook_GitHub - gemgin/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  5. python实现微信hook_GitHub - redtips/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  6. python实现微信hook_GitHub - zhouxionger/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  7. python hook微信_GitHub - 15993248973/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  8. hook微信 python_GitHub - zkqiang/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  9. Python实现定时在微信群发送消息

    Python实现定时在微信群发送消息 为了大家不忘记打卡,用Python写了个脚本每天上下班前自动在微信群发送打卡 此脚本使用itchat.datetime.time.schedule模块实现,具体使 ...

最新文章

  1. HDU1533(最小权完美匹配)
  2. VS2010 连接SQLSERVER数据库步骤
  3. cad插入块_CAD中怎么创建多重插入块?
  4. boost::hana::at用法的测试程序
  5. 【Leetcode | 顺序刷题】数学目录
  6. NTFS USN的Create和工具代码汇总
  7. 如何在MySQL随机选择记录
  8. bootstrap 模态窗口按钮位置_Bootstrap模态框(modal)垂直居中
  9. 力扣题目系列:746. 使用最小花费爬楼梯 -- 一道动态规划入门题
  10. Duplicate key
  11. Python爬取全国或特定城市百度地图慧眼、百度迁徙迁入迁出大数据
  12. C++中10的N次方如何表示
  13. iOS: pch 如何添加项目中
  14. 16光8电全千兆宽温工业交换机16千兆光8千兆网口机架式网管型工业级以太网交换机
  15. 站长天下:buyren网上购物论坛的发展
  16. 青少年CTFmisc 简简单单的题目
  17. PCL入门系列 —— StatisticalOutlierRemoval 点云统计滤波
  18. 嵌入式软件工程师就业方向有哪些呢?
  19. 用gd扩展调用imagegrabscreen截图,完全黑屏!允许服务与桌面交互没用!
  20. 记一次GLIB2.14升级GLIB2.18的记录以及其中的步骤原理

热门文章

  1. python发微信提醒天气冷了注意保暖_提醒人注意保暖的句子 天气冷了注意保暖句子...
  2. 叉包舍 - PPPoE之常见拨号错误代码及处理
  3. 学习记录557@flowable流程回退与终止
  4. ERP工程师做什么?
  5. 03-body标签中相关标签-2
  6. 手机移动端web 禁止手机返回功能的最好方法,虽然很变态,但是很有效.
  7. 工作三年的Java程序员应该达到什么水平?
  8. u盘锁定计算机,u盘锁电脑的方法介绍【图解】
  9. MySQL 之 扩展例子
  10. python barrier_Python多线程Barrier(障碍对象) 雷子