(bing图片)

python这两年热火朝天,依托其众多类库,基于python的应用层出不穷,也大大降低了非计算机专业人员的入门门槛,WeChat机器人自然不在话下!—— 聪明的瓦肯人

苦于有时候总是没空看WeChat消息,但是又不想冷落了亲朋好友,于是,我就想着拿我这点皮毛的python水平写一个简单的WeChat机器人,最好文字、图片、分享链接都可以处理。我左查右查,咦?github上有一个itchat(https://github.com/littlecodersh/ItChat)不错,充分发挥python优势,拿来主义,凑合着用吧!

我的博客一般不拿来做过程说明,只做结果展示,所以如果你是大佬,还请多多指教,如果你是小白,请看这里https://mp.weixin.qq.com/s/1Z9JQBodKUrG-zk48jYkLQ,这是我的个人微信公众号文章,里面有详细的打造过程,从安装python到注册图灵机器人,按照教程十有八九可以成功。还请多多转发,多多关注哟!

使用第三方类库打造自己的WeChat机器人,不是什么大工程项目,仅仅是小小的一段脚本程序,还请赏脸过目:

import itchat

import time

import requests

from itchat.content import *

KEY = '9978272a14e54******866104bb47135' # 你需要用自己的API号替换掉

LIST = []

MEDIA = []

start = 1

num = 0

def get_response(msg):

# 这里我们构造了要发送给服务器的数据

apiUrl = 'http://www.tuling123.com/openapi/api' # 这是API接口网址,不要变

data = {

'key' : KEY, # 这个KEY就是上面已经赋值的KEY,就这样不用改

'info' : msg, # 这是我们要发出去的消息,属于文本消息

'userid' : 'wechat-robot', # wechat-robot这个名字可以随便取,注意加引号

}

try:

r = requests.post(apiUrl, data=data).json()

# 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常

return r.get('text')

# 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常

# 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return

except:

# 将会返回一个None

return

def wechat():

@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING,PICTURE, RECORDING, ATTACHMENT, VIDEO])

def reply(msg):

nickName0 = itchat.search_friends()['NickName'] #自己的昵称

try:

nickName1 = itchat.search_friends(userName=msg['FromUserName'])['NickName'] #对方昵称,try...except...保证nickName1为空时不抛出异常

except:

return

global start #是全局变量得以修改

if nickName1 == nickName0 and msg.text == 'turn off': # 对话中出现turn off,则机器人关闭,当然这并不是终止程序运行

start = 0

msg.user.send('机器人已关闭!')

if nickName1 == nickName0 and msg.text == 'turn on': # 对话中出现turn on,则启动机器人

start = 1

msg.user.send('机器人已启动!')

def delay():

msg.user.send('等待回复...')

time.sleep(3)

if nickName1 != nickName0 and start == 1:

if msg['Type'] == TEXT or msg['Type'] == MAP or msg['Type'] == CARD or msg['Type'] == NOTE or msg['Type'] == SHARING or msg['Type'] == PICTURE or msg['Type'] == RECORDING or msg['Type'] == ATTACHMENT or msg['Type'] == VIDEO:

t0 = time.localtime()[5] #列表的第5个是秒

while msg.FromUserName not in LIST: #程序启动后,每与一个人联系,就将此人的名称保存在列表LIST中

t1 = time.localtime()[5]

if t1 - t0 > 10:

msg.user.send('等待超时,程序介入')

time.sleep(1)

msg.user.send('你好!我是微信机器人助手小夏同学,我的主人在2019年4月16日使用python与核心类库itchat及图灵机器人API开发了我,我在主人无法及时回复时介入对话并执行简单任务,我不会搜集任何信息,谢谢合作!')

LIST.append(msg.FromUserName) #保存在LIST中

break

time.sleep(2)

global num

if msg['Type'] == TEXT and num < 101:

num = num + 1

reply = get_response(msg['Text']) # 使用图灵机器人回答

defaultReply = '信息分类——%s: %s' % (msg.type, msg.text)

return reply or defaultReply #reply优先,异常时才是后者

if msg['Type'] == TEXT and num == 101:

delay()

msg.user.send('信息分类——%s: %s' % (msg.type, msg.text))

if msg['Type'] == MAP or msg['Type'] == CARD or msg['Type'] == NOTE or msg['Type'] == SHARING:

delay()

msg.user.send('信息分类——%s: %s' % (msg.type, msg.text))

if msg['Type'] == PICTURE or msg['Type'] == RECORDING or msg['Type'] == ATTACHMENT or msg['Type'] == VIDEO:

delay()

msg.user.send('信息分类——%s:%s' % (msg.type, msg.fileName))

# 上面是输出信息分类

if msg.type == MAP: # 地图位置信息

msg.user.send('哦,我的小宝贝,原来你在这里!')

if msg.type == CARD: # 名片信息

msg.user.send('哇哦,这位优秀的人士是?')

if msg.type == NOTE: # 当你被拉黑或是加了新朋友后对话框中出现的灰色提示语

msg.user.send('谢谢你的通知啦!')

if msg.type == SHARING: # 朋友分享

msg.user.send('你的分享可真不错!受益匪浅!')

if msg.type == PICTURE or msg.type == VIDEO: # 对方发送的图片与视频会被自动保存在程序文件所在的位置

MEDIA.append(msg.fileName)

msg.download(MEDIA[-1])

msg.user.send('你发送的图片视频将被我自动下载至当前路径')

if msg.type == RECORDING: # 语音信息

msg.user.send('虽然我听不懂你的话,但是我依然觉得你的声音是世界上最甜的!')

time.sleep(5)

msg.user.send('如果你无聊,可以和我聊天呀,嘻嘻嘻嘻!')

@itchat.msg_register(FRIENDS)

def add_friend(msg): # 自动允许添加新朋友

msg.user.verify()

msg.user.send('你好!Nice to meet you!')

@itchat.msg_register(TEXT, isGroupChat=True)

def text_reply(msg): # 群聊中被人@

if msg.isAt:

msg.user.send(u'@%s\u2005I received: 神马问题?' % #itchat中@的固定格式

msg.actualNickName)

while True:

wechat()

itchat.auto_login(hotReload=True)

itchat.run(True) # itchat启动

这里的代码比较乱,WeChat里的代码比较整齐,建议从那里复制。或者去我的github页面克隆吧(github链接在底部),或者直接点击这个链接https://github.com/xjc-jim/wechat_robot.git!再不济,下载下面的代码文件吧(这似乎是最简单的,但是由于一些限制,只能是.doc文件,哈哈哈哈哈)。

WeChat测试结果还是比较骚的,来看看:

图(1)

图(2)

图(3)

图(4)

当程序启动后,每一个联系人第一次与机器人对话后,机器人都会自报家门,如图(2),只报一次,它会将联系人的名字记录到LIST中保存起来,只要程序不关闭就会始终记得,当程序重启后又会重新自报家门。图(4)中的turn off并不是真正地关闭程序,只是改变了判断条件,使得程序无法进入应答循环,假装在休眠。

警告:本教程所做机器人只可用于日常交流学习,不可用于非法用途,否则后果自负。

注意:频繁登陆,可能会引起腾讯注意,甚至被封号。

提示:如果你有任何疑问可以在下面提问,也可以微信发消息,或者邮箱联系,站长愿意帮助。—— 聪明的瓦肯人

python可以做机器人吗_零基础如何用Python写一个简单的WeChat机器人?(内附代码)...相关推荐

  1. 零基础轻松学python pdf 小码哥_零基础轻松学Python

    零基础轻松学Python电子书 Python之父Guido van Rossum力荐的Python门书.本书以通俗易懂的语言.好玩有趣的案例让读者轻轻松松.循序渐地从零始掌握Python 3 编程.本 ...

  2. python中面向对象空间时间_零基础老男孩学Python|面向对象之类的空间问题

    一. 类的空间问题 1.1 何处可以添加对象属性class A: def __init__(self,name): self.name = name def func(self,sex): self. ...

  3. FPGA零基础学习:基于FPGA的二进制转BCD设计(附代码)

    FPGA零基础学习:基于FPGA的二进制转BCD设计(附代码) 本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的"傻瓜式"讲 ...

  4. Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

    Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录

  5. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  6. 如何学好python基础_零基础如何学好Python开发?

    作为一个零基础小白想学好Python开发应该先确定明确目标.做好学习Python系统规划.选择适合的开发工具.进阶提升学习规划.多练多看加深对Python程序的理解,想入门一门编程语言就需要不断的进行 ...

  7. 零基础学python 视频_零基础入门学习PYTHON(第2版)(微课视频版)

    小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松.愉快中学会Python! 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过生动 ...

  8. python多久能找到工作_零基础自学Python多久可以找工作?

    零基础自学Python多久可以找工作?零基础自学3个月很难找到工作.如果全职学习Python的话,学习6个的时间,不一定能达到找到工作的水平,掌握项目经验还需要更久,达到企业需要的岗位要求还需要多练习 ...

  9. 如何零基础学习python语言_零基础如何入门Python语言?有哪些学习建议?

    众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...

最新文章

  1. 红外遥感设计报告论文+电路原理图
  2. 简析 .NET Core 构成体系
  3. 【Spark Summit EU 2016】使用Spark和StreamSets构建数据通道
  4. The Power of Ten – Rules for Developing Safety Critical Code
  5. [算法笔记]-环形链表Ⅱ-解题方法
  6. 汇编语言(十四)之判断字符串是否包含数字
  7. Jquery提交form表单
  8. python 获取cpu使用率_如何在python中获取过去10分钟的cpu使用率
  9. ntext字段的替换处理示例--全表替换(作者:邹建)
  10. Spring中使用集成MongoDB Client启动时报错:rc: 48
  11. 二分求浮点数的平方根
  12. mac 常用的开发工具
  13. 极域电子书包课堂管理系统怎么控屏_极域电子教室控屏时,怎么解除?
  14. css如何实现div背景透明
  15. 利用VLMCSD部署本地KMS服务器(Windows + CentOS7)
  16. Ardupilot笔记:Rover auto模式下的执行流程
  17. Codingame平台“CHUCK NORRIS”的实现
  18. 三相桥式全控整流电路simulink仿真_变频器为什么要整流?整流的原理是什么?...
  19. [CF505E]Mr. Kitayuta vs. Bamboos/[海军国际项目办公室]迷途竹林
  20. 【一起去北碚玩吧】->【我们从北碚回来了】

热门文章

  1. iOS设计模式四部曲(二) 结构型模式 内附Demo
  2. 一分钟整明白web前端和Java后端的就业前景
  3. IOS小知识点5之内存警告、循环引用、交叉引用
  4. 利用Deskpool 搭建 桌面云教室
  5. C语言深度剖析——关键字sizeof、整型数据存储深入、数据类型取值范围深入
  6. 【STM32 .Net MF开发板学习-12】跳动的音符(PWM合成)
  7. Veracrypt加密,配合WD Security西数移动硬盘加密
  8. 关于 - TypeError: dict.get() takes no keyword arguments
  9. Chapter2 Creating and Destroying Objects
  10. 《C++标准库》学习笔记 — STL —流