python如何实现定时发送qq消息(python,开发技术)

时间:2024-05-04 11:36:33 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据内容(提醒时间、提醒对象、提醒内容)设置定时任务——>给特定qq好友发送消息。

1. 软件版本:

python如何实现定时发送qq消息

2.安装依赖环境

  • pymysql安装:pip install pymysql

  • qqbot安装:pip install qqbot

3.数据库操作

数据库操作非常简单,跟Java类似,自己去菜鸟教程看一下基础语法就好了。

#coding:utf-8importpymysql#导入pymysql模块db=pymysql.connect("localhost","root","root","info_db")#数据库链接信息cursor=db.cursor()#插入任务definsertSchedule(schedule):insertsql="insertintodutyschedule_tb(worktime,name)values(%s,%s)"try:#这种查询语句可以防止sql注入cursor.execute(insertsql,(schedule['worktime'],schedule['name']))db.commit()exceptException:db.rollback()raiseException#删除任务defdeleteSchedule():deletesql=""try:cursor.execute(deletesql)db.commit()exceptException:db.rollback()defupdateSchedule(user):updatesql=""try:cursor.execute(updatesql)db.commit()exceptException:db.rollback()#获取下一个任务deffindScheduleByNewTime():selectsql="SELECT*FROMdutyschedule_tbwhereNOW()<=date_format(worktime,'%Y-%m-%d%H:%i:%S')ORDERBYworktimeASC;"try:cursor.execute(selectsql)results=cursor.fetchone()schedule={}schedule['worktime']=results[1]schedule['name']=results[2]schedule['content']=results[3]returnscheduleexceptException:returnNone

4.配置qqbot登陆信息

也可以不配置,不配置的话就是每次扫码登陆,但这在Linux系统下不好用,我按说明将配置改成了每次将登陆二维码发到固定qq邮箱。qqbot模块在GitHub上,大家可以去看一下模块说明:qqbot
配置文件默认在用户目录下的.qqbot-tmp/v2.3.conf,linux下类似

{#QQBot的配置文件#使用qqbot-usomebody启动程序时,依次加载:#根配置->默认配置->用户somebody的配置->命令行参数配置#使用qqbot启动程序时,依次加载:#根配置->默认配置->命令行参数配置"fantasy":{#这是自己创建的用户自定义配置,可以在启动qqbot启动时选择加载哪个配置文件#QQBot-term(HTTP-API)服务器端口号(该服务器监听IP为127.0.0.1)#设置为0则不会开启本服务器(此时qq命令和HTTP-API接口都无法使用)。"termServerPort":8188,#二维码http服务器ip,请设置为公网ip或空字符串"httpServerIP":"",#二维码http服务器端口号"httpServerPort":8189,#自动登录的QQ号"qq":"你的qq",#接收二维码图片的邮箱账号"mailAccount":"你的邮箱",#该邮箱的IMAP/SMTP服务授权码,一般在邮箱设置中有"mailAuthCode":"你的授权码",#是否以文本模式显示二维码"cmdQrcode":False,#显示/关闭调试信息"debug":False,#QQBot掉线后自动重启"restartOnOffline":True,#在后台运行qqbot(daemon模式)"daemon":False,#完成全部联系人列表获取之后才启动QQBot"startAfterFetch":False,#插件目录"pluginPath":".",#启动时需加载的插件"plugins":[],#插件的配置(由用户自定义)"pluginsConf":{},},#用户somebody的配置,这是默认配置"somebody":{#这里的基本内容跟上面一样,就不贴出来了,太长了占地方},#可以在默认配置中配置所有用户都通用的设置"默认配置":{"qq":"","pluginPath":"","plugins":['qqbot.plugins.sampleslots','qqbot.plugins.schedrestart',],"pluginsConf":{'qqbot.plugins.schedrestart':'8:00',}},##注意:根配置是固定的,用户无法修改(在本文件中修改根配置不会生效)#"根配置":{#"termServerPort":8188,#"httpServerIP":"",#"httpServerPort":8189,#"qq":"",#"mailAccount":"",#"mailAuthCode":"",#"cmdQrcode":False,#"debug":False,#"restartOnOffline":False,#"daemon":False,#"startAfterFetch":False,#"pluginPath":"",#"plugins":[],#"pluginsConf":{}#},}

5. 自定义功能

fromqqbotimport_botasbot#登陆qq,使用配置文件为fantasybot.Login(['-u','fantasy'])#自定义函数,用来进一步封装qqbot接口#获取所有好友列表defgetBuddyByName(nickname):returnbot.List('buddy',nickname)#获取所有群列表defgetGroupByName(groupname):returnbot.List('group',groupname)#给备注(没用备注就是昵称)为nickname的好友发送content消息defsendToNickname(nickname,content):user=getBuddyByName(nickname)ifuser:bot.SendTo(user[0],content)else:print("未找到联系人:"+nickname)

6.入口主程序

#coding:utf-8importtimeimportschedimportdatetimefromDao.DutyscheduleDaoimport*fromUtils.QQInterfaceimport*#sched是python的定时任务模块schedule=sched.scheduler(time.time,time.sleep)#从数据库获取第一个任务newschedule=findScheduleByNewTime()#返回距下次任务还有多少秒defgetSeconds():#申明全局变量globalnewschedulenewschedule=findScheduleByNewTime()ifnewschedule:return(newschedule['worktime']-datetime.datetime.now()).total_seconds()else:print("所有任务执行完毕,退出程序……")exit()#发消息函数defSendTo():globalnewschedulesendToNickname(newschedule['name'],newschedule['content'])#中间函数,用于循环运行所有数据库未执行事件defperform():SendTo()#睡眠5秒,不然可能会重复发送消息time.sleep(5)sleepSecond=getSeconds()print("下次任务执行时间:"+str(newschedule['worktime']))#这次任务执行完后添加新任务schedule.enter(sleepSecond,1,perform,())defrun():#1.获取数据库最近将执行任务的时间及姓名#2.计算执行任务的时间与现在时间的差值(单位:秒)sleepSecond=getSeconds()print("下次通知:"+str(newschedule['worktime']))#3.加入定时处理函数schedule.enter(sleepSecond,1,perform,())#4.执行定时任务schedule.run()if__name__=='__main__':run()

7.其它

数据库结构:

dropdatabaseifexistsinfo_db;createdatabaseinfo_dbdefaultcharactersetutf8;useinfo_db;createtabledutyschedule_tb(idint(11)auto_incrementprimarykey,worktimetimestampnotnull,namevarchar(10)notnull,contentvarchar(100)notnull)engine=InnoDBauto_increment=1defaultcharset=utf8;

以上就是循环发送qq消息的代码,以下是项目目录结构,其中一些没有出现的文件是自己测试所用,可以不用关心:

python如何实现定时发送qq消息

效果图:

python如何实现定时发送qq消息

python如何实现定时发送qq消息

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:python如何实现定时发送qq消息的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18