当前位置: 首页 > 后端技术 > Node.js

10分钟,用Node.JS搭建恶劣天气实时预警系统!

时间:2023-04-03 20:32:49 Node.js

前段时间,中国发生了很多灾难。我们当时所在的郑州高新区停水停电。所以我决定创建一个完整的实时天气预警项目,主要使用Node.JS和第三方免费接口来聚合数据。api管理接口使用我们开发的apipost。没有特别先进的技术栈。帮助!1、免费天气预报接口网上有很多免费获取天气的API接口。我这里用的是聚合数据的接口,大厂的比较稳定。申请地址:https://www.juhe.cn/docs/api/...申请成功后,会在个人中心生成一个requestkey,发送接口时会用到。2、使用天气预报接口并生成程序代码根据聚合数据的使用说明,我们可以使用接口调试工具对接口进行调试。这里我们使用ApiPost进行测试。可以看到请求成功后的json格式如下:{"reason":"查询成功!","result":{"city":"郑州","realtime":{"temperature":"24","humidity":"100","info":"小雨","wid":"07","direct":"东北风","power":"2级","aqi":"32"},"future":[{"date":"2021-07-23","temperature":"23/28℃","weather":"小雨转多云","wid":{"day":"07","night":"02"},"direct":"东风转北风"},{"date":"2021-07-24","temperature":"24/31℃","weather":"小雨转多云","wid":{"day":"07","night":"01"},"direct":"东北风转东风"},{"日期":"2021-07-25","温度":"23/31℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"东风转东南风"},{"date":"2021-07-26","temperature":"24/31℃","weather":"小雨","wid":{"day":"07","night":"07"},"direct":"东北风"},{"date":"2021-07-27","temperature":"23/31℃","weather":"小雨转晴","wid":{"day":"07","night":"00"},"direct":"东北风转南风"}]},"error_code":0}至此,我们得到了天气接下来的7天资料第三步:在NodeJS中使用nodemailer发送邮件nodeJSnodemailer是用来发送邮件的,非常好用,安装后可以使用,命令如下:npminstallnodemailer下面是一个函数我写的是发送邮件,其中的邮箱账号和授权码可以到对应的邮箱服务商处获取。/***nodeJS发送邮件***/functionsendEmail(text){letnodemailer=require('nodemailer');lettransporter=nodemailer.createTransport({service:"126",//邮箱secure:true,//安全发送模式auth:{user:"be***er@126.com",//发件人邮箱pass:"MLQ***PYU"//授权码,从邮件服务商处获取,126邮箱访问地址为:https://help.mail.163.com/faq.do?m=list&categoryID=197}})让mailOptions={from:"be***er@126.com",//send发件人邮箱地址必须和上面的发件人邮箱地址一致。to:"3257132998@qq.com",//收件人邮箱,即实时接收天气预报的邮箱。subject:"天气实时监测系统",//邮件主题(标题)text:text//邮件请求}transporter.sendMail(mailOptions,(err,data)=>{if(err){console.log(err);res.json({status:400,msg:"发送失败...."})}else{console.log(data);res.json({status:200,msg:"邮件发送成功...."})}})}//测试发送邮件sendEmail('It'sraining')用上面的代码新建一个weather.js,可以通过nodeweather.js测试发送邮件。发送成功,邮件接收成功。第四步:在nodeJS中定时获取天气,发送到指定邮箱。点击ApiPost右上角的GenerateNodeJS(Request)code,生成在nodejs中请求聚合天气接口的程序代码。我们可以结合setInterval来实现上述需求。整个代码如下:/***nodeJSsendemail***/functionsendEmail(text){letnodemailer=require('nodemailer');lettransporter=nodemailer.createTransport({service:"126",//邮箱安全:true,//安全发送模式auth:{user:"be***er@126.com",//发件人邮箱密码:"MLQ***PYU"//授权码,在邮件服务商处获取,126邮箱的访问地址为:https://help.mail.163.com/faq.do?m=list&categoryID=197}})letmailOptions={from:"be***er@126.com",//发件人邮箱,与上面发件人邮箱保持一致即可to:"3257132998@qq.com",//收件人邮箱address,即实时接收天气预报的邮件地址)=>{if(err){console.log(err);res.json({status:400,msg:"发送失败...."})}else{console.log(data);res.json({status:200,msg:"邮件发送成功...."})}})}setInterval(function(){varrequest=require('request');varheaders={'User-Agent':'Apipost客户端运行时/+https://www.apipost.cn/'};varoptions={url:'http://apis.juhe.cn/simpleWeather/query?city=%E9%83%91%E5%B7%9E&key=8763efe2a90b025c03e03fef95621cbc',headers:标题};functioncallback(error,response,body){让json=JSON.parse(body);console.log(json.result)if(!error&&response.statusCode==200){sendEmail('郑州未来天气'+json.result.future[0].weather)}}request(options,callback);},300000);至此,系统搭建完成,我们只要找一个小服务器,执行nodeweather.js命令,每5分钟向指定邮箱发送一次天气情况。当然,您也可以根据需要发送。注意:由于中文编码可能会导致请求出现问题,所以最好对城市名称进行编码(右键)。欢迎大家点赞评论交流,了解ApiPost的最新动态~