文章目录
- 前言
- 一、QQpusher介绍
- 1,简介
- 2,使用步骤
- 二、详细代码
- 项目介绍
- 主要代码部分介绍
- 源代码
- 总结
前言
本文主要使用的是
1,QQpusherAPI接口推送服务
2,Python requests 模块
消息推送主要使用QQpusher的接口,非常感谢!
提示:本文仅提供娱乐,学习使用。如有侵权请联系删除。
一、QQpusher介绍
1,简介
QQpusher是什么(引用官网)
QQPusher (QQ推送服务)是一个使用QQ号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到QQ上,无需安装额外的软件,即可做到息实时通知。 你可以使用QQPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。
简述
- 通过调用QQpusher的API接口向指定QQ发送信息;
2,使用步骤
- 到官网的后台页面扫描二维码登录-----官网地址
- 登录进去以后从页面里面获取Token (后面代码里面有用)
- 需要你需要发送的QQ号添加QQpusher为好友才能发送消息
- 扫描下面的二维码就是QQpusher的QQ,添加好友
- 可以进入到官网提供的演示测试地址
二、详细代码
项目介绍
- 功能一:就是在每天的7,13,17点发送消息到指定的下面五个小时的天气信息到指定的人的QQ
- 功能二:在晚上十点的时候发送第二天的天气情况到指定的QQ
主要代码部分介绍
QQ消息发送
def SendQQMsg(qq, msg, status=0):"""发送指定消息到指定qq 上:param status: 标记是否为第一次调用 以方便二次回调:param qq: QQ号:param msg: 发送的消息:return: 返回是否发送成功 0 1"""try:response = requests.get(Config.SendUrl.format(Config.Token, qq, msg))result = response.json()if status == 0 and result["code"] != 200:SendQQMsg(qq, msg, status=1)except Exception as e:tolog(str(e))
爬取天气信息
def getWeatherNight2(ToWhos):"""晚上获取明天的天气信息 接口3需要转换成msg的格式:param ToWhos: 发送人"""response = requests.get(Config.WeatherUrl3, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 "})results = re.compile("<ul>(.*?)</ul>", re.S).findall(response.text)[0]results = re.compile("<li .*?>(.*?)</li>", re.S).findall(results)weatherInfo = {}for result in results:if "明天天气" in result:weatherInfo["type"] = re.compile("<i>(.{1,3})</i>").findall(result)[0]weatherInfo["high"] = re.compile('<span class="tem-show">(\w{1,2})~(\w{1,2})°</span>').findall(result)[0]weatherInfo["fx"] = re.compile('<span class="wind-name">(.*?)</span>').findall(result)[0]for who in ToWhos:Msg = """---明天天气---天气:{}最高温度:{}最低温度:{}风力:{}{}""".format(weatherInfo["type"],weatherInfo["high"][0],weatherInfo["high"][1],weatherInfo["fx"],"{},记着明天带伞哦!".format(who["name"]) if "雨" in weatherInfo["type"] else "")SendQQMsg(who["qq"], Msg)def getWeatherNight(ToWhos, city=Config.DEFAULT_CITY):"""晚上获取明天的天气信息 接口2需要转换成msg的格式:param ToWhos: 发送人:param city: 接口的城市拼音"""response = requests.get(Config.WeatherUrl2.format(Config.WeatherCityCode[city]))weatherInfo = response.json()["data"]["forecast"][1]for who in ToWhos:Msg = """---明天天气---天气:{}最高温度:{}最低温度:{}风力:{}温馨提示:{}{}""".format(weatherInfo["type"],weatherInfo["high"],weatherInfo["low"],weatherInfo["fx"] + weatherInfo["fl"],weatherInfo["notice"], "{},记着明天带伞哦!".format(who["name"]) if "雨" in weatherInfo["type"] else "")SendQQMsg(who["qq"], Msg)def TheTimeWeather(ToWhos, city=Config.DEFAULT_CITY):"""接口1指定特定的时间发送:param ToWhos: 发送给谁个:param city: 接口的城市拼音:return: 当前时间后面五个小时的天气信息字符串"""try:responsehtml = requests.get(Config.WeatherUrl1[0], headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 "})indexhtml = responsehtml.textatag = re.compile('<a href="//www.weaoo.com/{}.*?.html" title=".*?天气一周查询">.*?天气</a>'.format(city)).findall(indexhtml)[0]infourl = re.compile('<a href="(.*?)" title=".*?天气一周查询">.*?天气</a>').findall(atag)[0]inforeponse = requests.get("http:" + infourl, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 "})inforeponse.encoding = "utf-8"infohtml = inforeponse.texttimeweathers = re.compile('<h2 class="lborder">合肥24小时天气预报</h2>(.*?)</ul>', re.S).findall(infohtml)[0].replace("\n", "")timewts = re.compile('<li><span>(..)点</span><span><i class="wi .*?"></i></span><span>(.{1,3})</span><span>(.*?)</span><span title="(.*?)" class="aqi-bg-1">(.*?)</span></li>').findall(timeweathers)fiveHoursWeatherMsg = []Tips = ""# 获取当前时间 小时nowHour = time.localtime(time.time()).tm_hourfor hour in range(nowHour, nowHour + 5):if hour >= 24:hour = hour - 23for timewt in timewts:if int(timewt[0]) == hour:fiveHoursWeatherMsg.append("{0[0]}点,{0[1]},{0[2]},{0[3]}".format(timewt[:-1]))if Tips == "" and "雨" in timewt[1]:Tips = "{}点有雨,记得带伞".format(timewt[0])for who in ToWhos:Msg = """---接下来五个小时天气---{0[0]}{0[1]}{0[2]}{0[3]}{0[4]}{1},{2}""".format(fiveHoursWeatherMsg, who["name"], Tips)SendQQMsg(who["qq"], Msg)except Exception as e:tolog(str(e))SendQQMsg("358694798", str(e))
创建定时任务
def createTheTimeProcess(date):"""创建一个线程指定时间发生消息(特定时间发送):param date: 指定的时间 小时:return:"""now = time.localtime(time.time())# 获取时间差StepTime = int(time.mktime(time.strptime('{}-{}-{} {}:00:00'.format(now.tm_year, now.tm_mon, now.tm_mday, date),'%Y-%m-%d %H:%M:%S'))) - int(time.time())process = Timer(StepTime, sendTheTime)process.start()tolog("[{}]:设置了一个{}({})秒后的日程。".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), StepTime, date))def createNightTimeProcess(date=22):"""创建一个线程指定时间发生消息(晚上发送 默认22点):param date: 指定的时间 小时:return:"""now = time.localtime(time.time())# 获取时间差StepTime = int(time.mktime(time.strptime('{}-{}-{} {}:00:00'.format(now.tm_year, now.tm_mon, now.tm_mday, date),'%Y-%m-%d %H:%M:%S'))) - int(time.time())t4 = Timer(StepTime, sendNight)t4.start()tolog("[{}]:设置了一个{}({})秒后的日程。".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), StepTime, date))
主调程序
def mains():# 消息启动通知sendStart()tolog("程序开始......")# 先根据当前程序的启动时间判断 然后启动接下来时间的消息推送now = time.localtime(time.time())nowH = now.tm_hourif 1 < nowH < 22:tolog("即将设置今天接下来的定时任务。")if nowH < 7:createTheTimeProcess(7)createTheTimeProcess(13)createTheTimeProcess(17)createNightTimeProcess()elif nowH < 13:createTheTimeProcess(13)createTheTimeProcess(17)createNightTimeProcess()elif nowH < 17:createTheTimeProcess(17)createNightTimeProcess()else:# createNightTimeProcess(18)createNightTimeProcess()while True:nowH = time.localtime(time.time()).tm_hournowM = time.localtime(time.time()).tm_min# 判断时间是否为新一天的开始 如果是 开启今天的消息推送if nowH == 0 and nowM == 1:tolog("开始今天的定时任务!")createTheTimeProcess(7)createTheTimeProcess(13)createTheTimeProcess(17)createNightTimeProcess()# 每四十秒执行一次以防止每分钟只可以执行一次time.sleep(40)
源代码
Github地址
总结
到此就结束了,可以给你的女盆友操作一下了!学生作品,不喜勿喷!