Python微信聊天机器人改进版攻略
项目概述
本项目是使用Python实现的微信聊天机器人,可以实现根据定时或触发条件抓取天气预报、励志语录等并向好友推送的功能。
技术方案
开发环境
- Python 3.x
- itchat:一个开源的微信个人号接口;
- BeautifulSoup:一个可以从HTML或XML文件中提取数据的Python库;
- requests:一个用于Python网络请求的第三方库;
- APScheduler:一个Python定时任务调度库。
实现思路
- 使用itchat库登录微信个人号;
- 接收微信消息,根据指令触发不同的功能;
- 使用requests、BeautifulSoup库抓取网络数据;
- 使用APScheduler库实现定时任务。
改进版实现流程
- 安装itchat、BeautifulSoup、requests、APScheduler库
pip install itchat
pip install BeautifulSoup4
pip install requests
pip install APScheduler
- 导入所需库
import itchat
import requests
from bs4 import BeautifulSoup
from apscheduler.schedulers.background import BackgroundScheduler
import time
import datetime
- 登录微信个人号
itchat.auto_login(hotReload=True) # 开启微信网页版登录
- 监听微信消息,根据指令触发不同的功能
@itchat.msg_register('Text') # 监听微信文本消息
def handle_text(msg):
from_user = msg['FromUserName'] # 发送消息的好友的UserName
to_user = msg['ToUserName'] # 接收消息的个人号的UserName
text = msg['Text'] # 收到的文本消息内容
cmd = text.split(' ')[0] # 截取第一个空格前的字符作为指令
if cmd == '天气':
send_weather(from_user, to_user)
elif cmd == '励志':
send_inspire(from_user, to_user)
else:
pass
- 抓取天气预报
def get_weather():
city = '南京' # 城市
url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + city
response = requests.get(url) # 发起请求
response.encoding = response.apparent_encoding # 设置编码
soup = BeautifulSoup(response.text, 'html.parser') # 解析HTML
today = soup.select_one('.today') # 获取当天天气信息
weather = today.select_one('.wea').get_text() # 天气现象
temperature = today.select_one('.tem').get_text() # 温度
return f'{city}天气:{weather},温度:{temperature}'
- 发送天气预报
def send_weather(from_user, to_user):
weather = get_weather()
itchat.send_msg(weather, toUserName=from_user)
itchat.send_msg(weather, toUserName=to_user)
- 抓取励志语录
def get_inspire():
url = 'http://www.lovehhy.net/Joke/Detail/QSBK/' # 糗事百科
response = requests.get(url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
jokes = soup.select('.content')[1:]
joke = jokes[0].get_text().strip() # 获取一则励志语录
return joke
- 发送励志语录
def send_inspire(from_user, to_user):
inspire = get_inspire()
itchat.send_msg(inspire, toUserName=from_user)
itchat.send_msg(inspire, toUserName=to_user)
- 实现定时任务
scheduler = BackgroundScheduler() # 定义定时任务调度器
@scheduler.scheduled_job('cron', hour=7) # 凌晨7点发送天气预报
def auto_send_weather():
friends = itchat.get_friends(update=True)[1:] # 获取好友列表
for friend in friends:
to_user = friend['UserName']
send_weather(to_user, to_user) # 将天气预报发送给自己和好友
@scheduler.scheduled_job('interval', minutes=30) # 每30分钟发送一则励志语录
def auto_send_inspire():
friends = itchat.get_friends(update=True)[1:]
for friend in friends:
to_user = friend['UserName']
send_inspire(to_user, to_user) # 发送给自己和好友
scheduler.start() # 启动任务
示例说明
示例1
假设现在我想要获取当前南京的天气预报,可以向微信聊天机器人发送“天气”指令。Python代码中的函数 send_weather(from_user, to_user)
实现了向发送消息的好友和个人号自身发送天气预报的功能。
发送如下文本消息:
天气
聊天机器人会回复您类似于如下的天气预报:
南京天气:多云,温度:11℃~22℃
示例2
聊天机器人还会每天自动向好友推送天气预报和励志语录。例如,假设在早上7点整,聊天机器人会自动向好友推送南京当天的天气预报:
2022-01-01 07:00:00,149 - apscheduler.scheduler - INFO - Running job "auto_send_weather (trigger: cron[hour='7'], next run at: 2022-01-01 07:00:00 CST)" (scheduled at 2022-01-01 07:00:00+08:00)
2022-01-01 07:00:00,195 - apscheduler.executors.default - INFO - Running job "auto_send_weather (trigger: cron[hour='7'], next run at: 2022-01-01 07:00:00 CST)" (scheduled at 2022-01-01 07:00:00+08:00)
又比如,假设每30分钟聊天机器人会向好友们发送一则励志语录。例如:
2022-01-01 08:30:00,189 - apscheduler.scheduler - INFO - Running job "auto_send_inspire (trigger: interval[0:30:00], next run at: 2022-01-01 09:00:00 CST)" (scheduled at 2022-01-01 08:30:00+08:00)
2022-01-01 08:30:00,195 - apscheduler.executors.default - INFO - Running job "auto_send_inspire (trigger: interval[0:30:00], next run at: 2022-01-01 09:00:00 CST)" (scheduled at 2022-01-01 08:30:00+08:00)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送) - Python技术站