这一个项目整体的设计是:
1、使用puppeteer框架爬取2345天气网的城市天气情况
2、将爬取回来的天气数据编辑成短信发送给对应手机号
3、写一个小程序可以设置需要发送短信的用户信息(手机号、城市、发送时间等等)
4、添加定时发送模块,可以达到定时发送效果

点击关注订阅我哦

本篇文章实现第二步:将爬取回来的天气数据编辑成短信发送给对应手机号
我使用的是腾讯云的短信服务,登录进腾讯云找到短信服务

这个appid和appkey使我们需要使用的
然后我们去申请短信模板

这个签名需要用到的

这个模板id需要用到的
点击头像=》访问管理

这个 SecretId 和 SecretKey 使我们要用到的
然后我们先创建一个配置文件:config.json
{"secretId": "AKIDwPxylJ8jVXkhSxAXwEI0REqgGYbCuSIJ","secretKey": "H2X7WHyTihaqw1y8IGqCJCs0wc3OULvH","appid":"1400508412","appkey":"e683533463c3ddd35d4f748054fa4b11","smssign":"文之魅力"}
将上面获取的参数放进去
新建一个sms.js文件,用于封装短信相关操作,集成短信模块
// 短信模块// tencentcloud-sdk-nodejs是腾讯云提供的nodejs服务模块,需要安装一下使用const tencentcloud = require("tencentcloud-sdk-nodejs");const SmsClient = tencentcloud.sms.v20190711.Client;//配置读取jsonlet config = require('./config');//上下文配置const clientConfig = {credential: {secretId: config.secretId,secretKey: config.secretKey},region: "",profile: {httpProfile: {endpoint: "sms.tencentcloudapi.com",},},};// 上下文对象const client = new SmsClient(clientConfig);//短信发送工具类// phoneNumber是要发送到额手机号// templateId 是短信模板id// smsParams 是模板短信参数,数组格式module.exports = function (phoneNumber,templateId,smsParams){// 短信参数const params = {"PhoneNumberSet":phoneNumber,"TemplateID": templateId,"Sign": config.smssign,"TemplateParamSet": smsParams,"SmsSdkAppid": config.appid};return new Promise(function(resolve,reject){// 短信发送client.SendSms(params).then((data) => {resolve(data);},(err) => {reject(err);//发送失败});});}
还需要封装一个数据库模块,用户在小程序端设置的信息需要能插入的数据库中,我们短信发送也需要从数据库中去获取用户信息,这里我是使用过的自己的腾讯云服务器
创建db.js文件 =》 封装数据库模块
先npm install mysql安装一下数据库依赖,我用的mysql的数据库,如果你用的别的数据库那就装对应依赖即可
// 引入数据库依赖const mysql = require('mysql');// 数据库初始化方法// 数据库域名,端口号,账号,密码,库名建立l连接let smsDb = (sql, params) => {return new Promise((resolve, reject) => {let connection = mysql.createConnection({host: "数据库域名",port: '端口号',user: "用户名",password:"密码",database: "库名"})connection.connect(function(err){if(err){console.log('[query] - :' + err);reject(err)return;}});// connection.query("sql语句",数组,function(err,result){});// 下面代码方法中有三个参数,其中第一个是sql语句,就是对数据库的增删改查语句,嫌太长可以保存在变量中;// 第二个参数是前面sql语句中参数的值,如下:sql语句中的值用?代替,在后面的中括号中寻找答案。加问号,是一个预编译过程,反应速度更快,实际开发就写成问号那种形式。// 第三个函数是回调函数,在对数据库操作完后触发,它有两个参数。err用来监听操作是否有异常,而result表示本次对数据库操作返回的结果connection.query(sql, params, (err, result) => {if (err) {console.log('数据库操作异常:', err);reject(err)return}connection.end();resolve(result)})})}module.exports = {smsDb}
接下来尝试下短信能否发送成功
新建一个index.js文件,安装nodejs的express框架来跑服务
//引入并初始化express服务const express = require('express');const app = express();// 引入封装的爬虫模块const getWeather = require('./puppeteer');// 引入短信模块const sms = require('./sms');// 数据库模块const db = require('./db');// 延时函数let delay = (time) => {return new Promise(function(resolve) {setTimeout(resolve, time)});}app.use(express.json());app.use(express.static(__dirname + '/public'));let item = {phone: 15010342730,templateId: '929860'params: ['张小奎同学','良好','17度','30度','避免中暑','开开心心']}// 发送短信sms(['86' + item.phone], item.templateId, params).then(function(data){console.log('信息发送成功', data);}).catch(function(err){console.log('信息发送失败', err);})app.listen(8888,function(){console.log('短信服务启动,端口:8888')})
先简单尝试发送一个信息即可,直接将项目跑起来,对应手机号就能收到短信了

文章转载自这人间值得,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




