美文网首页
NodeJs的一次实用(定时抓取数据)

NodeJs的一次实用(定时抓取数据)

作者: zhonglaoban | 来源:发表于2020-09-22 22:01 被阅读0次

    起因

    想定时抓取某个接口的数据,然后解析数据,通过邮件通知给我。

    用到的一些库

    1、https 用来发送网络请求
    2、node-schedule 用来实现定时任务
    3、nodemailer 用来发送邮件

    安装依赖

    npm install node-schedule
    
    npm install nodemailer
    

    发送请求

    function getInfo(url) {
        https.get(url, (res) => {
            res.setEncoding("utf8");
            let body = "";
            res.on("data", (data) => {
                body += data;
            });
            res.on("end", () => {
                console.log(body);
            });
        });
    }
    

    定时任务

    介绍一下简单用法

    1. 每天一点执行一次
      rule.hour =1;
    2. 每小时的一分钟执行一次
      rule.minute =1;
    3. 每分钟的一秒执行一次
      rule.second =1;
    4. 每10s执行一次
      rule.second = [0,10,20,30,40,50];
    5. 取消任务
      scheduleJob会返回一个job对象,调用job.cancel()可以取消任务。
    var rule = new schedule.RecurrenceRule(); 
    rule.minute = Math.ceil(Math.random()*60);
    
    function scheduleCronstyle() {
        //1小时内随机执行一次
        schedule.scheduleJob(rule, () => {
            console.log("scheduleCronstyle:" + new Date());
            getInfo(getUrl);
            rule.minute = Math.ceil(Math.random()*60);
        });
    };
    

    发送邮件

    我这里使用的QQ邮箱,使用第三方发送邮件需要打开授权,我这里开启的是POP3/IMAP,然后用授权码登录。授权方法->

    const transporter = nodemailer.createTransport({
        host: "smtp.qq.com",
        port: 465, // SMTP 端口
        secureConnection: true, // 使用了 SSL
        auth: {
            user: "xxx@qq.com",
            pass: "xxx", //授权码
        },
    });
    
    function sendEmail(time, left) {
        let mailOptions = {
            from: "<xxx@qq.com>",
            to: "xxx@qq.com",
            subject: "标题",
            text: "内容",
        };
        transporter.sendMail(mailOptions, function (error, info) {
            if (error) {
                console.log(error);
            } else {
                console.log("Email sent: " + info.response);
            }
        });
    }
    

    结果

    哈哈,还是比较成功的,达到了我预期的目标。

    注意事项

    邮件接收的延迟比较大,大概3分钟左右,耐心等候,另外我在QQ邮箱的发件箱里没看到已发送的邮件,可能不会显示。
    demo就不发了,比较简单,这几个模块组装起来就可以运行了。

    相关文章

      网友评论

          本文标题:NodeJs的一次实用(定时抓取数据)

          本文链接:https://www.haomeiwen.com/subject/sgygyktx.html