这是我参与「第四届青训营」笔记创作活动的的第3天
项目目录
一、注册腾讯云
- 创建短信签名
- 创建短信正文模板
- 等待审核
- 发送短信(控制台/调用api)
短信正文模板示例:
二、nodejs发送请求即可发送短信验证码
- 首先引入需要用到的包:
- npm i qcloudsms_js
- npm i axios
- 新建config.json文件,用来装短信配置信息 config.json:
{
"appid": "",
"appkey": "",
"smssign": "爱尚姚个人网"//短信签名
}
3. 新建sms.js,用来写短信发送工具
sms.js:
//数据读取json
var config = require('./config');
const QcloudSms = require("qcloudsms_js");
//短信发送工具类
module.exports = function (phoneNumber, templateId, params) {
// 实例化QcloudSms
var qcloudsms = QcloudSms(config.appid, config.appkey);
var smsType = 0;
var ssender = qcloudsms.SmsSingleSender();
ssender.sendWithParam(86, phoneNumber, templateId, params, config.smssign, "", "", function (err, res, resData) {
if (err) {
console.log(err + '发送失败');
} else {
//所有短信全部认定发送成功
console.log(resData);
}
});
}
- 新建app.js,程序主入口 app.js:
//处理发送短信的配置
const sms = require('./sms')
//网络请求
const axios = require('axios')
//自行添加信息,会被随机放到模板变量温馨提示之后
var Lovewords = [
]
//装模板变量
var params = [4];
//发送人称呼
params[0] = ''
//发送人手机号
const phone = ''
//正文模板Id
const templateId = ''
//请求天气数据的函数
function send() {
//查询天气的地址
const address = ''//例如:重庆市渝北区
return new Promise((resolve) => {
axios
.get('https://restapi.amap.com/v3/geocode/geo', {
params: {
key: '', //自行申请
address,
},
})
.then((resX) => {
axios
.get('https://restapi.amap.com/v3/weather/weatherInfo', {//调用高德天气的api接口
params: {
key: '', //自行申请
city: +resX.data.geocodes[0].adcode,
extensions: "all" //base/all可选值,base为实时天气,all为预报天气
},
})
.then((res) => {
//天气
params[1] = res.data.forecasts[0].casts[0].dayweather
//温度
params[2] = res.data.forecasts[0].casts[0].nighttemp + '° ~ ' + res.data.forecasts[0].casts[0].daytemp + '°'
//随机数
let random = parseInt(Math.random() * Lovewords.length)
//随机情话
params[3] = Lovewords[random]
//发送短信
sms(phone, templateId, params)
console.log(params[1] + ' ' + params[2] + ' ' + params[3]);
})
})
})
}
//定时处理
function timeoutFunc(config) {
config.runNow && send()
const nowTime = new Date().getTime()
const timePoints = config.time.split(':').map(i => parseInt(i))
let recent = new Date().setHours(...timePoints)
recent >= nowTime || (recent += 24 * 3600000)
setTimeout(() => {
//调用请求天气数据的函数,请求成功后发送短信
send()
setInterval(send, config.interval * 86400000)
}, recent - nowTime)
}
// 3600000
const config = {//参数的说明
interval: 1, //间隔天数,间隔为整数
runNow: false, //是否立即运行
time: "5:20:00" //执行的时间点 时在0~23之间
}
timeoutFunc(config)
注意,查询天气的接口是用的高德提供的,key需要自行在高德开放平台申请
天气查询
天气查询API服务地址:
| URL | restapi.amap.com/v3/weather/… |
|---|---|
| 请求方式 | GET |
parameters代表的参数包括必填参数和可选参数。所有参数均使用和号字符(&)进行分隔。下面的列表枚举了这些参数及其使用规则。
-
请求参数 参数名 | 含义 | 规则说明 | 是否必须 | 缺省值 | | ---------- | -------- | ---------------------------------------------------------------------------- | ---- | ---- | | key | 请求服务权限标识 | 用户在高德地图官网申请web服务API类型KEY | 必填 | 无 | | city | 城市编码 | 输入城市的adcode,adcode信息可参考城市编码表 | 必填 | 无 | | extensions | 气象类型 | 可选值:base/allbase:返回实况天气all:返回预报天气 | 可选 | 无 | | output | 返回格式 | 可选值:JSON,XML | 可选 | JSON
-
返回结果参数说明
实况天气每小时更新多次,预报天气每天更新3次,分别在8、11、18点左右更新。由于天气数据的特殊性以及数据更新的持续性,无法确定精确的更新时间,请以接口返回数据的reporttime字段为准。天气结果对照表>>
| 名称 | 含义 | 规则说明 | ||
|---|---|---|---|---|
| status | 返回状态 | 值为0或11:成功;0:失败 | ||
| count | 返回结果总数目 | |||
| info | 返回的状态信息 | |||
| infocode | 返回状态说明,10000代表正确 | |||
| lives | 实况天气数据信息 | |||
| province | 省份名 | |||
| city | 城市名 | |||
| adcode | 区域编码 | |||
| weather | 天气现象(汉字描述) | |||
| temperature | 实时气温,单位:摄氏度 | |||
| winddirection | 风向描述 | |||
| windpower | 风力级别,单位:级 | |||
| humidity | 空气湿度 | |||
| reporttime | 数据发布的时间 | |||
| forecast | 预报天气信息数据 | |||
| city | 城市名称 | |||
| adcode | 城市编码 | |||
| province | 省份名称 | |||
| reporttime | 预报发布时间 | |||
| casts | 预报数据list结构,元素cast,按顺序为当天、第二天、第三天的预报数据 | |||
| date | 日期 | |||
| week | 星期几 | |||
| dayweather | 白天天气现象 | |||
| nightweather | 晚上天气现象 | |||
| daytemp | 白天温度 | |||
| nighttemp | 晚上温度 | |||
| daywind | 白天风向 | |||
| nightwind | 晚上风向 | |||
| daypower | 白天风力 | |||
| nightpower | 晚上风力 |
最终效果会在每天的 5:20 发送天气预报短信
如: