前言:
Python爬虫和微信结合到一起会产生怎样的火花?原则上,肉眼可见的页面都是可以被爬虫爬取到的,无论是网页还是手机app,即使是微信也不例外,于是乎github上就有大神开源了这样一个库—itchat:littlecodersh/ItChatgithub.com
原理是利用爬虫技术和微信网页版的API接口来用Python模拟登陆网页版的微信,可以实现绝大部分网页版微信可以实现的功能!(具体原理详见:抓包及原理入门 - itchat)什么添加删除好友、查看好友头像图片、昵称、签名、消息转发.....都是不在话下,而且由于是软件执行,所以可以进行批量操作!于是乎可以批量群发消息,批量查看好友信息头像等等,也是无比方便!多说无益,itchat官网给出的教程非常清晰,大家可以直接跟着教程一步步尝试下,看看能实现哪些有趣的功能:项目简介 - itchatitchat.readthedocs.io
1 废话不多说: 11.jpg#_*_ coding:utf-8 _*_
#__author__='阳光流淌007'
import re
import time
import itchat
from itchat.content import *
@itchat.msg_register([TEXT])
def text_reply(msg):
friend = itchat.search_friends(userName=msg['FromUserName'])
replyContent = "收到您于%s发送的【%s】" % (time.strftime('%m-%d %H:%M',time.localtime()), msg['Type'])
if msg['Type'] == 'Text':
if re.search(r"快乐",msg['Content']):
replyContent += "【衷心感谢您的祝福,祝您:新年快乐???,开开心心[耶][耶][耶],身体健康[發][發][發],狗年大吉旺旺旺???】"
itchat.send('@img@%s' % '/Users/xxx/moneyGod.jpg',toUserName=msg['FromUserName'])
itchat.send("好友:【%s(昵称:%s)】于:【%s】发来消息: 【%s】" % (friend['NickName'], friend['RemarkName'], time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()), msg['Text']),toUserName='filehelper')
itchat.send(replyContent,toUserName=msg['FromUserName'])
print("于【%s】收到好友【%s(昵称:%s)】发来的【%s】: 【%s】" % (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()), friend['NickName'], friend['RemarkName'], msg['Type'], msg['Content']))
print("于【%s】回复:%s" % (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()), replyContent)+'\n')
itchat.auto_login(hotReload=True)
itchat.run()
程序运行效果如下:
image文件传输助手:
image电脑控制台:
image首先,说一下程序怎么玩:
程序运行,电脑会弹出一个二维码,模拟登陆网页版微信的二维码,需要手机扫描后确认登陆。登陆后就开启了自动回复功能,好友发送的消息,都会自动回复你自己设定好的回复,另外,当发送的消息中包含关键词“快乐”时,回复内容包含一条祝福语和一个财神拜年的图片。
在自动回复好友的同时,向你个人的【文件传输助手】发送一条同样的消息,用来备份。
下面详细说一下,这几行代码做了什么事:
重写itchat库里text_reply()方法,msg['FromUserName']是加密过后的好友微信昵称,类似这样:'FromUserName': '@69bce2e06abac6829501f3ed9c25583d',我们要用itchat.search_friends()方法获得好友的信息表(frined)
friend = itchat.search_friends(userName=msg['FromUserName'])
然后才方便查找好友微信昵称friend['NickName']和好友备注名friend['RemarkName']。
replyContent = "收到您于%s发送的【%s】" % (time.strftime('%m-%d %H:%M',time.localtime()), msg['Type'])
replyContent是String类的自定义回复内容,msg['Type']是消息类型,例子中只用到了Text类型,还有语音、图片、文件、名片、等类型(PICTURE, MAP, CARD, NOTE, SHARING, RECORDING, ATTACHMENT, VIDEO)详见itchat官网。
if msg['Type'] == 'Text':
...
规定如果收到的消息类型是文本Text且文字内容里包含“快乐”,则用itchat.send()发送一张财神爷拜年的图片过去。
itchat.send('@img@%s' % '/Users/xxx/moneyGod.jpg',toUserName=msg['FromUserName'])
否则就按照replyContent设置的内容正常回复。toUserName=msg['FromUserName']表示谁给你发了消息,你就回复给谁!
itchat.send(replyContent,toUserName=msg['FromUserName'])
回复好友消息的同时,给自己的【文件传输助手】发一份消息来做备份。toUserName='filehelper'表示消息接收对象是“文件传输助手”
(itchat.send("好友:【%s(昵称:%s)】于:【%s】发来消息: 【%s】" % (friend['NickName'], friend['RemarkName'], time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()), msg['Text']),toUserName='filehelper'))
为了方便在电脑控制台查看消息,你可以在text_reply()方法中加上:
#可以加上print(msg)打印整条消息字典
print("于【%s】收到好友【%s(昵称:%s)】发来的【%s】: 【%s】" % (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()), friend['NickName'], friend['RemarkName'], msg['Type'], msg['Content']))
print("于【%s】回复:%s" % (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()), replyContent)+'\n')
控制台输出如下:
image最后,通过如下命令登陆(hotReload=True),即使程序关闭,一定时间内重新开启也可以不用重新扫码。
itchat.auto_login(hotReload=True)
彩蛋:
下一篇文章:Python实现微信查天气+火车+飞机+快递!!!
对了,不只是集成了查询,还有简单实现了回复TDD/KTT(退订/开通自动回复)的功能,然后发过来的消息类型支持img、vedio、语音、文件下载到电脑备份。
网友评论