大家好,今天来为大家解答树莓派实战:微信机器人(itchat实现)这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
需要
痒痒简介
itchat是一个开源的微信个人账户接口。用不到三十行代码,就可以完成一个可以处理所有信息的微信机器人。 github地址:https://github.com/littlecodersh/ItChat
你一定很好奇其中的原理。其实可以用一句话来概括:itchat本质上是一个微信网页版客户端,实现了微信网页版的协议/语义,通过http进行通信。具体源码可以在组件包中的文件中找到。
下面逐点介绍如何实现有趣的功能。
功能实现
1.自动回复
2.人工智能聊天
有了第1步的基础,要实现AI聊天,还需要引入另外一个AI本地库或者在线API。使用在线API更简单,只需要控制参数传递和解析响应即可。作者使用了一个名为青云客的API,免费使用(简单试用的前提下不用于商业用途)。带有关键字命令的AI对话相当不错。如果是自由对话,很有可能前言和后话不符。
# 调用AI聊天接口,只有一个文本参数def ai_chat(msg): url='http://api.qingyunke.com/api.php?key=freeappid=0msg=%s' % msg response=requests.get( url) return response.json()['content'].replace('{br}', '\n') # 响应中的换行符为{br},替换为微信识别的\n换行符
3.定期发送天气预报
有了步骤2的基础,要获取天气预报信息,只需要在AI聊天请求中传递某个地方的天气即可,比如:上海天气、北京天气。当然,您还可以通过爬取天气预报网页上的字段来获取更详细的天气预报信息,这里不再讨论。要定期发布天气预报,必须解决两个关键问题。
一是如何执行计划任务。这里使用Python库apscheduler。当然,你也可以编写一个Python脚本,然后通过操作系统的crontab在指定的时间执行该脚本,但是还有一种更优雅的方式,可以在Python主程序内启动定时任务。可以使用Python库apscheduler来实现定时任务的调度,类似于Java的ScheduledThreadPool。
二是如何向指定群组发送消息。 itchat 已经提供了一个方便的API 来根据群组名称搜索特定群组。
from apscheduler.schedulers.blocking import BlockingScheduler# 向群发送天气预报信息def Weather_report(): msg=ai_chat('上海天气') # 获取所有群聊itchat.get_chatrooms(update=True) # 根据条件搜索具体信息群组名称Group chatrooms=itchat.search_chatrooms(name='这里改为实际的群组名称') chatroom=itchat.update_chatroom(chatrooms[0]['UserName']) # 发送消息到指定群组itchat.send_msg( msg=msg,toUserName=chatroom['UserName'])if __name__=='__main__': itchat.auto_login(hotReload=True) # itchat启动后是否被屏蔽,这里改成No(默认是yes),即可相当于itchat在新启动的线程中Run,不会阻塞主程序itchat.run(blockThread=False) # Scheduler=BlockingScheduler() # 指定每天早上9点调用weather_report函数Scheduler.add_job(weather_report, 'cron', day_of_week=' *', 小时=9, 分钟=0, 秒=0) Scheduler.start()
4.控制相机,拍摄照片和视频来看看你的家
Raspberry Pi 4B具有2个USB 3.0高速接口和2个USB 2.0接口。只需其中一个需要连接USB 摄像头。一般2.0接口就够了,3.0接口是给外接硬盘预留的。如果你想通过摄像头看到你的家,需要解决的关键问题是,使用什么摄像软件?使用什么视频聊天软件?
照片
您可以使用fswebcam 拍照。您可以指定或不指定图像分辨率。默认分辨率较低。安装: sudo apt install fswebcam
img_file='%d.jpg' % timestamp # 调用fswebcam拍照os.system('fswebcam %s' % img_file) # 将照片发送给自己的文件传输助手,因为发送照片给自己通常会失败itchat.send_image(img_file) , toUserName='文件助手')
开始视频
笔者尝试了几种常见的免费视频聊天软件,但都无法支持。主要原因是树莓派采用ARM CPU架构,主流软件基本只在amd64和x86 CPU架构下发布。例如,QQ、Skype、Jitsi Meet网页版无法发起视频聊天。最终作者找到了一个比较完美的解决方案,那就是使用linphone:
开始视频:在树莓派上安装并打开linphone程序,在手机上安装并打开linphone应用程序。这样,通过微信,树莓派上的linphone就可以发起视频通话,手机也可以接听电话。
挂断视频:需要通过微信机器人主动退出树莓派上的linphone,否则无法继续发起视频。下载最新的linphone可能无法正常工作。您必须使用sudo apt install linphone 来安装旧的稳定版本。
# 先退出linphone(如果当前正在运行),然后启动linphone os.system('linphonecsh exit; linphonecsh init -V -c .linphonerc') time.sleep(1) # 使用linphone 命令行进行视频通话os.system('linphonecsh generic'call替换为实际的linphone账号,需要注册'')
完整代码
以下是原贴者写的几个实际例子,并附有评论。完整代码已上传至github:https://github.com/topcoding/wechat_robot 除了上面提到的几个功能的实现外,还增加了健身打卡、睡眠打卡的功能。如今,微信机器人的功能越来越多。
# -*-coding: utf-8 -*-import itchatimport sqlite3import osimport timeimport requestsfrom apscheduler.schedulers.blocking import BlockingSchedulerPUNCH_TYPE_WORKOUT=1PUNCH_TYPE_SLEEP=2ai_chat_switch=TrueAI_CHATROOM_WHITELIST=['替换为实际组名称']def save_db(p unch_type,owner,timestamp=无): conn=sqlite3.connect('punch-card.db')cursor=conn.cursor()如果时间戳为None:punch_time=(int)(time.time())else:punch_time=时间戳cursor.execute('insert)进入打孔卡(打孔类型,所有者,更新的_at)值(d,'s',d)'(打孔类型,所有者,打孔时间))conn.commit()conn.close()@itchat.msg_register(itchat.content) .TEXT)def text_reply(msg): print(msg) timestamp=(int) (time.time()) global ai_chat_switch if msg.text=='健身签到': save_db(PUNCH_TYPE_WORKOUT, msg.User.NickName, timestamp) itchat.send('你好%s,您已在%s健身成功签到' % (msg.User.NickName, time.strftime('%Y-%m-%d %H:%M:%S', time . localtime())), toUserName='filehelper') elif msg.text=='睡眠时钟': save_db(PUNCH_TYPE_SLEEP, msg.User.NickName, timestamp) itchat.send('%s, 您好,您是% s 睡眠签入成功' % (msg.User.NickName, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())), toUserName='filehelper')埃利夫消息。 text=='拍照': img_file='%d.jpg' % 时间戳os.system('fswebcam %s' % img_file) itchat.send_image(img_file, toUserName='filehelper') elif msg.text=='看一下Home ': os.system('linphonecsh exit; linphonecsh init -V -c .linphonerc') time.sleep(1) os.system('linphonecsh generic 'call 替换为实际的linphone 账号,需要注册'') elif msg .text=='挂断视频': os.system('linphonecsh exit') elif msg.text=='群聊': ai_chat_switch=True elif msg.text=='群聊取消': ai_chat_switch=False else: # 不执行任何操作pass@itchat.msg_register('Text', isGroupChat=True)def group_reply(msg): if ai_chat_switch and msg['isAt'] and msg['User']['NickName'] in AI_CHATROOM_WHITELIST: print(msg) return u'@%s\u2005%s' % (msg['ActualNickName'], ai_chat(msg))def ai_chat(msg): url='http://api.qingyunke.com/api.php?key=freeappid=0msg=%s' % msg response=requests.get(url) return response.json()['content'].replace('{br}', '\n')def Weather_report(): msg=ai_chat ('上海天气' ) itchat.get_chatrooms(update=True) chatrooms=itchat.search_chatrooms(name='替换为实际的群组名称') chatroom=itchat.update_chatroom(chatrooms[0]['用户名']) itchat.send_msg (msg=msg, toUserName=chatroom['UserName'])if __name__=='__main__': itchat.auto_login(hotReload=True) itchat.run(blockThread=False) 调度程序=BlockingScheduler() 调度程序.add_job(weather_report, ' cron', day_of_week='*', 小时=9, 分钟=0, 秒=0) Scheduler.start() Fold
更多示例
可以参考itchat提供的教程文档:https://github.com/littlecodersh/ItChat/tree/master/docs/tutorial
用户评论
终于看到有人讲树莓派的实际应用了!我就一直想搞个微信机器人玩玩,这篇文章介绍得很详细,我打算跟着教程手把手试试看。
有16位网友表示赞同!
itChat 的功能确实很强大,以前是用 Python 写的脚本来实现微信机器人,感觉效率太低了。看了这篇博文后,了解到可以用树莓派 + itchhat 实现更强大、更灵活的微信机器人,简直是福音啊!
有18位网友表示赞同!
个人觉得用树莓派搭建微信机器人的难度还是挺高的,需要有一定编程基础才能跟着教程进行操作。不过这篇文章写的确实不错,解释得比较清晰简洁。
有19位网友表示赞同!
这个微信机器人项目听着很有意思,我可以用来自动化一些日常的回复,比如问候、天气预报之类的。但我担心树莓派的性能能否支撑复杂的任务执行?
有20位网友表示赞同!
我平时就是喜欢折腾各种科技玩物,这篇文章正好让我心动!现在就着手学习一下Python和itChat的使用方法吧,相信自己也能构建一个优秀的微信机器人。
有12位网友表示赞同!
itchat 是个好工具,用来做微信接口控制非常方便。不过文章中提到的树莓派硬件配置似乎比较高,我手上设备可能不够强大,估计无法满足实际使用需求啊。
有17位网友表示赞同!
这篇文章真是太棒了!之前一直想开发微信机器人,但不知道从何下手,现在看了你的教程,总算有了方向和信心。谢谢分享!
有13位网友表示赞同!
说实话,我对树莓派的编程环境不是很感冒。它虽然便宜好用,但是一些软件功能上还是不够完善。感觉用其他平台搭建微信机器人可能更简单高效一些。
有12位网友表示赞同!
作者的写作风格比较清晰,将复杂的知识点讲解得通俗易懂。我觉得这篇文章对初入 Python 和 树莓派领域的开发者来说很有帮助。
有19位网友表示赞同!
微信机器人这个项目确实有很多实用价值,比如可以用来管理客户沟通、进行自动化营销等。但这篇文章我只提到了基本的itChat使用方法,缺乏一些实战案例和应用场景的讲解,希望作者能后续补充完善.
有11位网友表示赞同!
我很喜欢树莓派这种轻量级的硬件平台,它不仅价格亲民,而且学习成本也比较低。这篇博文介绍了它在微信机器人方面的应用场景,让我重新看到了它的潜力。
有17位网友表示赞同!
这篇文章介绍的 itChat 库确实很强大,可以灵活地控制微信接口,实现各种自定义功能。不过我有些担心使用树莓派搭建微信机器人的安全性问题,需要仔细考虑防范网络攻击等方面的措施。
有5位网友表示赞同!
我一直想尝试用 Python 做一些自动化工作,现在看了这篇文章,觉得搭建微信机器人是一个很好的切入点。打算周末抽出时间来学习一下 itChat 和 树莓派的编程知识。
有16位网友表示赞同!
我更倾向于使用云服务来搭建微信机器人,这样更加方便部署和维护成本也比较理想。然而,这篇博文介绍的树莓派方案确实很有创意,可以作为一种离线运行的备用选择。
有18位网友表示赞同!
这篇文章写得很详细,从环境搭建到机器人的开发都进行了清晰的讲解。对我这种刚入门的人来说非常有用!
有18位网友表示赞同!
感觉这篇文章的内容只局限于 itChat 的基本功能介绍,缺乏对一些更高级应用场景的探讨。希望能看到更多实战案例和解决方案分享。
有9位网友表示赞同!
树莓派 +itchat 开发微信机器人听起来很酷炫! 我一直想尝试一下,现在有了这个教程,我立刻就开始行动了!
有11位网友表示赞同!
对Python编程基础不强的人来说,这篇博文可能有些难度。我希望作者可以提供更基础的入门教程,帮助更多人学习搭建微信机器人。
有17位网友表示赞同!
很期待看到更多精彩的树莓派应用案例!
有15位网友表示赞同!