定时向QQ推送天气消息

news/2024/11/20 23:31:24/

文章目录

  • 前言
  • 一、QQpusher介绍
    • 1,简介
    • 2,使用步骤
  • 二、详细代码
    • 项目介绍
    • 主要代码部分介绍
    • 源代码
  • 总结


前言

本文主要使用的是
1,QQpusherAPI接口推送服务
2,Python requests 模块

消息推送主要使用QQpusher的接口,非常感谢!


提示:本文仅提供娱乐,学习使用。如有侵权请联系删除。

一、QQpusher介绍

1,简介

QQpusher是什么(引用官网)

       QQPusher (QQ推送服务)是一个使用QQ号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到QQ上,无需安装额外的软件,即可做到息实时通知。 你可以使用QQPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。

简述

  • 通过调用QQpusher的API接口向指定QQ发送信息;

2,使用步骤

  1. 到官网的后台页面扫描二维码登录-----官网地址
  2. 登录进去以后从页面里面获取Token (后面代码里面有用)
  3. 需要你需要发送的QQ号添加QQpusher为好友才能发送消息
  4. 扫描下面的二维码就是QQpusher的QQ,添加好友
    在这里插入图片描述
  5. 可以进入到官网提供的演示测试地址

二、详细代码

项目介绍

  • 功能一:就是在每天的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地址

总结

到此就结束了,可以给你的女盆友操作一下了!
学生作品,不喜勿喷!

http://www.ppmy.cn/news/803562.html

相关文章

java给qq发消息_QQ发送消息

我们做一个小程序,简单实现QQ发送消息的功能。 先定义一个消息类,里面有消息的属性(来自哪里,发送到哪,消息内容)。然后定义一个测试类测试我们的运行结果,输出发送消息的内容。测试类里面需要一个Map来存放每一个QQ号码和与之对应的消息队列List。 消息类: package com.…

基于AdminLTE的消息管理器

介绍 本文介绍在AdminLTE组件下集成消息管理&#xff0c;该消息管理器包含收件箱、发件箱、回收站、新增消息、附件上传、收件人维护等功能。 其中附件上传组件是基于Bootstrap-fileinput组件封装的&#xff0c;详细使用可参考我的文章&#xff1a;Bootstrap-fileinput组件封装…

一站式的消息管理器

一站式的消息管理器 在网络应用中&#xff0c;消息处理是必不可少的&#xff0c;该文章主要简单介绍一款简单的消息管理器的实现&#xff0c;其具备以下功能&#xff1a; 提供多种消息序列化和反序列化方式&#xff0c;目前支持JDK、ProtoStuff以及JSON&#xff0c;提供其他自…

QQ消息发送器

闲来无聊之作品&#xff0c;愿与大家探讨交流&#xff0c;共同进步&#xff01; //取QQ版本信息函数 function ReadQQRegInf: boolean;Var regRegistry : TRegistry; begin result : True; regRegistry : TRegistry.Create; try try regRegistry.RootKey : HKEY_LO…

如何解决PostgreSQL执行语句长时间卡着不动,不报错也不执行的问题?

1 问题现象 执行SQL语句&#xff0c;卡着不动&#xff0c;不成功也不执行&#xff0c;就像挂住了一样。 truncate table simple; 2 原因分析 一般来说&#xff0c;语句呈现卡着的状态&#xff0c;主要会是两种原因比较多&#xff0c; 原因1&#xff1a;SQL语句是一个耗时操…

java获取qq_QQ中,获取消息

首先创建一个Message类,先设置三个属性,发送方、接收方、消息内容,代表所有的属性。 Message: Messagepackage com.dr.QQ; public class Message {private String from; private String to; private String content; public String getFrom() {return from; } public void …

游戏.消息管理器

/**************************************************WinMain.cpp堆栈式的函数管理器http://blog.csdn.net/chinayaosir**************************************************///0.头文件#include <windows.h>#include <stdio.h>//1.管理器类定义class cProcessMan…

QQ管理器

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient;namespace QQ信息管理系统 {class UserManager{public void Login(){int count 0;do{string strUserName string.Empty;//初始化管…