NodeJs的一次实用(定时抓取数据)
2020-09-22 本文已影响0人
zhonglaoban
起因
想定时抓取某个接口的数据,然后解析数据,通过邮件通知给我。
用到的一些库
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);
});
});
}
定时任务
介绍一下简单用法
- 每天一点执行一次
rule.hour =1; - 每小时的一分钟执行一次
rule.minute =1; - 每分钟的一秒执行一次
rule.second =1; - 每10s执行一次
rule.second = [0,10,20,30,40,50]; - 取消任务
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就不发了,比较简单,这几个模块组装起来就可以运行了。