用Node.JS打造一个恶劣天气实时预警系统

目录
  • 序言:
  • 第一步:找到免费天气预报接口
  • 第二步:使用天气预报接口并生成程序代码
  • 第三步:利用nodemailer在NodeJS中发送邮件
  • 第四步:在nodeJS中定时获取天气并发送到指定邮箱
  • 注意事项:

序言:

这几日,无论是打开电视还是短视频,无不是说河南郑州遭遇这场无法预测的大暴雨,尤其是谁又能想到地铁站被洪水倒灌,被困乘客的情境让人无法想象。听到一些亲历者写的贴子文章,我们听着他们当时死里逃生的情形,可想象,当时的他们面对突如其来的灾难,又无法处理的无助与无奈。

我们所处的郑州高新区也经历了断水断电的情况,直到发文的现在,广电带宽仍未恢复信号,办公室同事基本还在连接热点办公。

本文将从实战的角度出发,利用NodeJS以及聚合数据的第三方免费接口打造一个完整的天气实时预警项目系统。本文没有用到特别高深的技术栈,目的旨在抛砖引玉。

第一步:找到免费天气预报接口

网上很多免费获取天气的API接口,我这里使用的是聚合数据的接口,大厂的相对稳定。

申请地址:https://www.juhe.cn/docs/api/id/73

申请成功后,会在个人中心生成一个请求key,这个在发送接口时,要用到。

第二步:使用天气预报接口并生成程序代码

根据聚合数据的使用说明,我们可以利用接口调试工具调试接口,我们这里利用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": "东北风转东风"
            },
            {
                "date": "2021-07-25",
                "temperature": "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天的天气数据。

第三步:利用nodemailer在NodeJS中发送邮件

nodeJS的nodemailer用于发送邮件,很好用。通过以下命令安装即可使用:

npm install nodemailer

以下是我写的一个发送邮件的函数,其中邮箱账号和授权码可以在对应的邮箱服务商处获取。

/**
 * nodeJS 发送邮件
 *
 * */
function sendEmail(text){
    let nodemailer = require('nodemailer');

    let transporter = 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
        }
    })

    let mailOptions = {
        from:"be***er@126.com", // 发件人邮箱,同上面的发件人邮箱保持一致就行
        to:"3257132998@qq.com", // 收件人邮箱,也就是实时接收天气预报的邮箱
        subject:"天气实时监控系统", // 邮件主题(标题)
        text:text // 邮件征文
    }

    transporter.sendMail(mailOptions,(err,data) => {
        if(err){
            console.log(err);
            res.json({status:400,msg:"send fail....."})
        }else{
            console.log(data);
            res.json({status:200,msg:"邮件发送成功....."})
        }
    })
}

// 测试发邮件
sendEmail('下雨了')

新建一个weather.js ,内容为以上代码,通过

node weather.js

即可测试邮件发送。

发送成功,邮件接收成功。

第四步:在nodeJS中定时获取天气并发送到指定邮箱

点击ApiPost右上角的生成NodeJS(Request)代码,即可生成在nodejs中请求聚合天气接口的程序代码,我们结合setInterval即可实现以上需求。

全部代码如下:

/**
 * nodeJS 发送邮件
 *
 * */
function sendEmail(text){
    let nodemailer = require('nodemailer');

    let transporter = 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
        }
    })

    let mailOptions = {
        from:"be***er@126.com", // 发件人邮箱,同上面的发件人邮箱保持一致就行
        to:"3257132998@qq.com", // 收件人邮箱,也就是实时接收天气预报的邮箱
        subject:"天气实时监控系统", // 邮件主题(标题)
        text:text // 邮件征文
    }
    transporter.sendMail(mailOptions,(err,data) => {
        if(err){
            console.log(err);
            res.json({status:400,msg:"send fail....."})
        }else{
            console.log(data);
            res.json({status:200,msg:"邮件发送成功....."})
        }
    })
}

setInterval(function(){
    var request = require('request');

    var headers = {
        'User-Agent': 'Apipost client Runtime/+https://www.apipost.cn/'
    };

    var options = {
        url: 'http://apis.juhe.cn/simpleWeather/query?city=%E9%83%91%E5%B7%9E&key=8763efe2a90b025c03e03fef95621cbc',
        headers: headers
    };

    function callback(error, response, body) {
        let json = JSON.parse(body);
        console.log(json.result)
        if (!error && response.statusCode == 200) {
            sendEmail('郑州未来天气' + json.result.future[0].weather)
        }
    }

    request(options, callback);

}, 300000);

至此,系统全部打造完毕。我们只需找个小服务器执行

node weather.js

命令即可每5分钟向指定邮箱发一次天气情况,当然,您也可以根据需要发送。

注意事项:

由于中文编码可能会在request中出现问题所以城市名称最好encode一下(右键)。

到此这篇关于用Node.JS打造一个恶劣天气实时预警系统 的文章就介绍到这了,更多相关Node.JS恶劣天气实时预警内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Node.js爬虫如何获取天气和每日问候详解

    安装依赖 安装node.js,同时安装好依赖: npm install request --save // http请求库 npm install cheerio --save // 分析html工具 npm install express --save // nodejs web框架 获取墨迹天气 地址示例: 东莞 tianqi.moji.com/weather/chi- 广州 tianqi.moji.com/weather/chi- 深圳 tianqi.moji.com/weather/ch

  • node.js 中国天气预报 简单实现

    复制代码 代码如下: var request = require('request') var url = 'http://www.baidu.com/home/xman/data/superload' var cookie = '你登录百度后的cookie' var options = {     method: "GET",     url: url,     qs: {         "type": "weather",        

  • 用Node.JS打造一个恶劣天气实时预警系统

    目录 序言: 第一步:找到免费天气预报接口 第二步:使用天气预报接口并生成程序代码 第三步:利用nodemailer在NodeJS中发送邮件 第四步:在nodeJS中定时获取天气并发送到指定邮箱 注意事项: 序言: 这几日,无论是打开电视还是短视频,无不是说河南郑州遭遇这场无法预测的大暴雨,尤其是谁又能想到地铁站被洪水倒灌,被困乘客的情境让人无法想象.听到一些亲历者写的贴子文章,我们听着他们当时死里逃生的情形,可想象,当时的他们面对突如其来的灾难,又无法处理的无助与无奈. 我们所处的郑州高新区也

  • 使用Node.js实现一个简单的FastCGI服务器实例

    本文是我最近对Node.js学习过程中产生的一个想法,提出来和大家一起探讨. Node.js的HTTP服务器 使用Node.js可以非常容易的实现一个http服务,最简的例子如官方网站的示例: 复制代码 代码如下: var http = require('http');http.createServer(function (req, res) {    res.writeHead(200, {'Content-Type': 'text/plain'});    res.end('Hello Wo

  • 详解用Node.js写一个简单的命令行工具

    本文介绍了用Node.js写一个简单的命令行工具,分享给大家,具体如下: 操作系统需要为Linux 1. 目标 在命令行输入自己写的命令,完成目标任务 命令行要求全局有效 命令行要求可以删除 命令行作用,生成一个文件,显示当前的日期 2. 代码部分 新建一个文件,命名为sherryFile 文件sherryFile的内容 介绍: 生成一个文件,文件内容为当前日期和创建者 #! /usr/bin/env node console.log('command start'); const fs = r

  • Node.js创建一个Express服务的方法详解

    本文实例讲述了Node.js创建一个Express服务的方法.分享给大家供大家参考,具体如下: 1.创建一个HttpServer服务端 在node.js官网下载好node的Windows版本后一路下一步安装好了node,新建一个server.js文件,开始第一个node文件.首先在文件开头需要使用require包含所需要的模块,然后利用http.createServer创建一个server,并执行回调函数.在回调函数内对请求req进行处理,并返回res结果. 利用url的parse方法将req请

  • 详解node.js创建一个web服务器(Server)的详细步骤

    前言 在 node.js 中创建一个服务器非常简单,只需要使用 node.js 为我们提供的 http 模块及相关 API 即可创建一个麻雀虽小但五脏俱全的web 服务器,相比 Java/Python/Ruby 搭建web服务器的过程简单的很. http model 要想创建一个基于 node.js 的 web 服务器,你就必须使用 node.js 提供的 http 模块,node.js 中的 http 接口旨在支持传统上难以使用的协议的许多特性, 特别是,大块的.可能块编码的消息,接口永远不会

  • 利用Node.js创建一个密码生成器的全步骤

    目录 一. 准备工作 二. 编写命令行 2.1 添加版本和描述 2.2 配置密码长度命令 2.2 密码长度添加默认值:8 2.3 配置保存密码命令 2.4 配置密码格式: 没有数字 2.5 配置密码格式: 没有符号 三. 解析命令行-创建密码 3.1 添加color 3.2 添加剪贴板 四. 保存密码到对应的文件 五.将本地npm模块配置成全局passgen 总结 一. 准备工作 1.1 创建项目 $ npm init 1.2 安装依赖 $ npm i commander chalk clipb

  • 使用NODE.JS创建一个WEBSERVER(服务器)的步骤

    目录 什么是 nodejs 安装nodejs 如何使用node创建hello world? 如何使用nodejs读写文件 使用nodejs创建web服务器 如何根据不同的请求路径返回不同数据 将数据响应到前端 什么是 nodejs Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP.Python.

  • node.js做一个简单的爬虫案例教程

    准备工作 首先,你需要下载 nodejs,这个应该没啥问题吧 原文要求下载 webstrom,我电脑上本来就有,但其实不用下载,完全在命令行里面操作就行 创建工程 准备工作做完了,下面就开始创建工程了 首先,在你想要放资源的地方创建文件夹,比如我在 E 盘里面创建了一个 myStudyNodejs 的文件夹 在命令行里面进入你创建的文件夹 如图 进入 e 盘:E: 进入文件夹:cd myStudyNodejs(你创建的文件夹的名字) 注意全是英文符号 初始化项目,在你创建的文件夹下面运行 npm

  • 利用node.js写一个爬取知乎妹纸图的小爬虫

    前言 说起写node爬虫的原因,真是羞羞呀.一天,和往常一样,晚上吃过饭便刷起知乎来,首页便是推荐的你见过最漂亮的女生长什么样?,点进去各种漂亮的妹纸爆照啊!!!,看的我好想把这些好看的妹纸照片都存下来啊!一张张点击保存,就在第18张得时候,突然想起.我特么不是程序员么,这种手动草做的事,怎么能做,不行我不能丢程序员的脸了,于是便开始这次爬虫之旅. 原理 初入爬虫的坑,没有太多深奥的理论知识,要获取知乎上帖子中的一张图片,我把它归结为以下几步. 准备一个url(当然是诸如你见过最漂亮的女生长什么

  • 使用Node.js写一个代码生成器的方法步骤

     背景 第一次接触代码生成器用的是动软代码生成器,数据库设计好之后,一键生成后端 curd代码.之后也用过 CodeSmith , T4.目前市面上也有很多优秀的代码生成器,而且大部分都提供可视化界面操作. 自己写一个的原因是因为要集成到自己写的一个小工具中,而且使用 Node.js 这种动态脚本语言进行编写更加灵活. 原理 代码生成器的原理就是: 数据 + 模板 => 文件 . 数据 一般为数据库的表字段结构. 模板 的语法与使用的模板引擎有关. 使用模板引擎将 数据 和 模板 进行编译,编译

随机推荐