python可以做机器人吗_零基础如何用Python写一个简单的WeChat机器人?(内附代码)...
(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机器人?(内附代码)...相关推荐
- 零基础轻松学python pdf 小码哥_零基础轻松学Python
零基础轻松学Python电子书 Python之父Guido van Rossum力荐的Python门书.本书以通俗易懂的语言.好玩有趣的案例让读者轻轻松松.循序渐地从零始掌握Python 3 编程.本 ...
- python中面向对象空间时间_零基础老男孩学Python|面向对象之类的空间问题
一. 类的空间问题 1.1 何处可以添加对象属性class A: def __init__(self,name): self.name = name def func(self,sex): self. ...
- FPGA零基础学习:基于FPGA的二进制转BCD设计(附代码)
FPGA零基础学习:基于FPGA的二进制转BCD设计(附代码) 本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的"傻瓜式"讲 ...
- Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)
Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录
- 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例
前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...
- 如何学好python基础_零基础如何学好Python开发?
作为一个零基础小白想学好Python开发应该先确定明确目标.做好学习Python系统规划.选择适合的开发工具.进阶提升学习规划.多练多看加深对Python程序的理解,想入门一门编程语言就需要不断的进行 ...
- 零基础学python 视频_零基础入门学习PYTHON(第2版)(微课视频版)
小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松.愉快中学会Python! 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过生动 ...
- python多久能找到工作_零基础自学Python多久可以找工作?
零基础自学Python多久可以找工作?零基础自学3个月很难找到工作.如果全职学习Python的话,学习6个的时间,不一定能达到找到工作的水平,掌握项目经验还需要更久,达到企业需要的岗位要求还需要多练习 ...
- 如何零基础学习python语言_零基础如何入门Python语言?有哪些学习建议?
众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...
最新文章
- 红外遥感设计报告论文+电路原理图
- 简析 .NET Core 构成体系
- 【Spark Summit EU 2016】使用Spark和StreamSets构建数据通道
- The Power of Ten – Rules for Developing Safety Critical Code
- [算法笔记]-环形链表Ⅱ-解题方法
- 汇编语言(十四)之判断字符串是否包含数字
- Jquery提交form表单
- python 获取cpu使用率_如何在python中获取过去10分钟的cpu使用率
- ntext字段的替换处理示例--全表替换(作者:邹建)
- Spring中使用集成MongoDB Client启动时报错:rc: 48
- 二分求浮点数的平方根
- mac 常用的开发工具
- 极域电子书包课堂管理系统怎么控屏_极域电子教室控屏时,怎么解除?
- css如何实现div背景透明
- 利用VLMCSD部署本地KMS服务器(Windows + CentOS7)
- Ardupilot笔记:Rover auto模式下的执行流程
- Codingame平台“CHUCK NORRIS”的实现
- 三相桥式全控整流电路simulink仿真_变频器为什么要整流?整流的原理是什么?...
- [CF505E]Mr. Kitayuta vs. Bamboos/[海军国际项目办公室]迷途竹林
- 【一起去北碚玩吧】->【我们从北碚回来了】
热门文章
- iOS设计模式四部曲(二) 结构型模式 内附Demo
- 一分钟整明白web前端和Java后端的就业前景
- IOS小知识点5之内存警告、循环引用、交叉引用
- 利用Deskpool 搭建 桌面云教室
- C语言深度剖析——关键字sizeof、整型数据存储深入、数据类型取值范围深入
- 【STM32 .Net MF开发板学习-12】跳动的音符(PWM合成)
- Veracrypt加密,配合WD Security西数移动硬盘加密
- 关于 - TypeError: dict.get() takes no keyword arguments
- Chapter2 Creating and Destroying Objects
- 《C++标准库》学习笔记 — STL —流