首页 >> 大全

使用Itchat模块和图灵机器人API实现个人微信的自动回复

2023-10-04 大全 20 作者:考证青年

一、引言

在现代社交媒体的时代,自动化回复和发送消息的机器人变得越来越流行。这些机器人可以节省时间和精力,帮助我们管理和处理大量的信息。基于+图灵机器人编写一个命名为“小林机器人”程序,接入微信托管,自动回复好友指定群聊的消息。

二、功能

1、实现回复好友和指定群聊的消息,可以发送表情包和图灵api返回的文本内容信息。

2、实现推送早报网、360资讯、科技日报的热点新闻信息。

三、准备工作

在开始编写代码之前,我们需要安装所需的库。请确保您已经安装了以下库:

项目有个缺陷是只有老的微信号(2017之前注册)才能登陆,新的微信号则不能登录;确保本人微信号能登上网页版才能使用库。

pip install itchat

pip install requests

import requests,re,time,json,os,random
import itchat
from bs4 import BeautifulSoup as bs
from itchat.content import *
from apscheduler.schedulers.blocking import BlockingScheduler
from queue import Queue
from datetime import datetime
import time

四、 定义一个Boot类

_使用Itchat模块和图灵机器人API实现个人微信的自动回复_使用Itchat模块和图灵机器人API实现个人微信的自动回复

主要作用是管理小林机器人的功能。在这个类中,我们将实现自动登录、消息处理和定时任务等功能。以下是"Boot"类的基本结构:

#小林机器人向群里/好友返回的数据
def reply_group_friend_msg(func):# 装饰器class Boot:def __init__(self):# 初始化配置信息def response_url(self, url, verify=True):# 发送get请求网页数据def put_emj(self):# 将表情包目录文件全部放进队列def grab_mrzb_data(self):# 获取到早报网最新热点消息def parse_cale(self):# 解析时间日期格式def grab_weiyu(self):# 抓取精美语录信息def grab_readhub_data(self):# 获取到科技日报消息def grab_zixun_data(self):# 获取到360资讯最新热点消息@reply_group_friend_msgdef xiaolin_return_data(self, text, user, f_g_list):# 小林机器人实时返回数据def group_text_reply(self, msg):# 处理群聊文本/表情包消息def friend_text_reply(self, msg):# 处理好友文本/表情包消息def clear_itchat_pkl(self):# 登录时检查默认删除itchat.pkl文件(小林机器人缓存的数据)def run(self):# 运行小林机器人

@sg是一个装饰器,用来处理群聊和好友发送消息

def reply_group_friend_msg(func):# 接受调用语句的实参,在下面传递给被装饰函数(原函数)def make_decorater(*args,**kwargs):  # 如果在这里return,则下面的代码无法执行,所以引用并在下面返回test_func = func(*args,**kwargs)  '''因为被装饰函数里有return,所以需要给调用语句(test(2))一个返回,又因为test_func = func(*args,**kwargs)已经调用了被装饰函数,这里就不用带()调用了,区别在于运行顺序的不同。'''return test_func  return make_decorater

推送早报网最新热点消息功能

发送get请求早报网网页源代码,用解析字符串,并生成解析结果对象,调用(),使用CSS类选择器''查找所有具有该类的元素,提取页面每一条的标题以及对应的url,保存到self.['']字典里

    '''解析早报网网页数据'''def parse_mrzb(self):# 发送GET请求并获取响应对象parse_result = self.response_url(self.variety_config_info['url'][4],False)# 使用CSS类选择器'_blank'查找所有具有该类的target元素content = parse_result.find_all('a', {'target': {'_blank'}})for data in content: # 遍历提取到的早报数据# 使用正则表达式提取早报的标题和对应的url的数据get_url_title = re.findall(r'', str(data))if get_url_title != []: # 排除为空列表的数据self.variety_config_info['mrzb_title'][get_url_title[0][1]] = get_url_title[0][0]

因为推送的消息是今日的,所以在self.['']查找今日的标题和url,再次发送get请求,拿到今日标题的全部热点信息。

取self.['']第一个键值

list(self.variety_config_info['mrzb_title'].values())[0]

拿到全部热点消息,并处理格式,再将标头消息(时间日期+祝福语),热点消息拼接成一串新的字符串。

标头消息格式

使用Itchat模块和图灵机器人API实现个人微信的自动回复_使用Itchat模块和图灵机器人API实现个人微信的自动回复_

self.variety_config_info['field'][2] + get_date + self.variety_config_info['field'][1]
'''
每天一分 知晓天下事!6月27日,农历五月初十,星期二,工作愉快,幸福生活!
'''

'''早上报网今日最新热点新闻'''def grab_mrzb_data(self):self.parse_mrzb()today_new = self.response_url(list(self.variety_config_info['mrzb_title'].values())[0], False)get_text = today_new.find_all('article', {'class': {'article-content'}})get_date = today_new.find_all('meta', {'name': {'description'}})get_date = str(get_date[0])[15:31] + ','for title in get_text:result = re.findall(r'(.*?)', str(title))get_title = '\n'.join(result)tmp_flag = get_title.index('【')if '【' in get_title:get_title  = get_title[:tmp_flag] + '\n' + get_title[tmp_flag:]new_data_pack = self.variety_config_info['field'][2] + get_date + self.variety_config_info['field'][1] + get_title return new_data_pack

推送360资讯最新热点消息功能

发送get请求360资讯简报网页源代码,用解析字符串,并生成解析结果对象,调用(),使用CSS类选择器''查找所有具有该类的

元素,遍历所提取到的元素,进一步用re正则表达式的方法提取热点新闻标题对应的文本数据,添加到self.['']列表中。

    '''热点新闻'''def grab_zixun_data(self):self.paser_zixun_title() # 得到资讯网页上的标题和url# 发送请求并获取响应对象par_data_result = self.response_url(list(self.variety_config_info['get_zixun_title'].values())[0])# 使用CSS类选择器'post_body'查找所有具有该类的
元素very_new = par_data_result.find_all('div', {'class': {'post_body'}})# 遍历资讯最新所有的热点标题for new in very_new:# 使用正则表达式提取热点新闻标题对应的文本数据title_1 = re.findall(r'(.*?)
.*?
', str(new))title_2 = re.findall(r'
(.*?)
', str(new))for tit1 in title_1[3:11]: # 部分标题1self.variety_config_info['new_zixun_title'].append(tit1)for tit2 in title_2[2:5]: # 部分标题2self.variety_config_info['new_zixun_title'].append(tit2)for tit3 in title_2[6:10]: # 部分标题3self.variety_config_info['new_zixun_title'].append(tit3)get_zixun_all_title = self.handle_zixun_title(self.variety_config_info['new_zixun_title'], title_1)return get_zixun_all_title # 返回资讯今日所有的最新标题

推送科技日报消息功能

先构建完整的URL,指定要访问每日早报的网页,发送get请求网页源代码,使用CSS类选择器''查找所有具有该类的元素,遍历提取到所有元素的数据,将每一条热点新闻标题添加到elf.[''],处理标题格式,用jion方法拼接成一串新的字符串。

处理标头格式

    '''得到新历/农历格式信息'''def parse_cale(self):# 获取当前日期并格式化为指定的格式report_time = time.strftime("%m月%d日", time.localtime())week = self.variety_config_info['week'].get(datetime.today().isoweekday())par_data_result = self.response_url(self.variety_config_info['url'][2]) # 发送请求并获取响应对象# 使用CSS类选择器'wnrl_k_you_id_7'查找所有具有该类的id元素find_chi_cale = par_data_result.find_all('div', {'id': {'wnrl_k_you_id_7'}})# 使用正则表达式提取农历格式的文本数据month = re.findall(r'
(.*?)
', str(find_chi_cale))year = re.findall(r'
(.*?)
', str(find_chi_cale))chi_cale = ''.join(month) + ''.join(year) # 五月初七癸卯年 【兔年】 戊午月 癸丑日get_format = chi_cale[4:7] + chi_cale[:4] # 癸卯年五月初七# 标头信息head_info = '{0},{1},{2},{3},{4}'.format(self.variety_config_info['field'][0],str(report_time),get_format,str(week),self.variety_config_info['field'][1])return head_info # 返回标头信息

自定义微语,随机提取一条微语

num = random.randint(0,len(self.variety_config_info['get_weiyu']))
print(len(self.variety_config_info['get_weiyu']))
ana = '\n【微语】' + self.variety_config_info['get_weiyu'][num]

    '''每日科技早报'''def grab_readhub_data(self):self.get_readhub_title() # 得到readhub网页的每日早报所有标题信息head_info = self.parse_cale() # 得到日历格式# 遍历每日早报最新标题for index,title in enumerate(self.variety_config_info['get_readhub_title'],1):new = '{0}、{1};\n'.format(index,title) # 每一条标题格式# 将每一条标题格式添加到new_readhub_titleself.variety_config_info['new_readhub_title'].append(new) # 将self.variety_config_info['new_readhub_title']拼接成一个新字符串technology_new = ''.join(self.variety_config_info['new_readhub_title'])num = random.randint(0,len(self.variety_config_info['get_weiyu']))print(len(self.variety_config_info['get_weiyu']))ana = '\n【微语】' + self.variety_config_info['get_weiyu'][num]new_data_pack = str(head_info) + technology_new + ana # 标题信息+科技日报 return new_data_pack # 返回科技日报信息

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了