暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

爬取数据定时短信发送项目(二)

这人间值得 2022-03-17
527

这一个项目整体的设计是:

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;


      //配置读取json
      let 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论