序言:

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

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

本文将从实战的角度出发,利用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一下(右键)。

利用课间10分钟,打造一个恶劣天气实时预警系统相关推荐

  1. 不需要程序员,产品经理也能10分钟打造一个深度学习模型

    想要给产品加上图像识别或声音识别的AI能力需要做哪些工作? 第一步:定义和明确需求,第二步:采集和标注大量的数据,第三步:写算法.调参数,第四步:校验模型效果并持续反复第二步和第三步,第五步:将模型做 ...

  2. [转帖]高档的moss页面修改工具SPCAMLEditor使用系列(1)--利用SPCAMLEditor,10分钟打造一个在线视频播放库...

    转载自:http://www.cnblogs.com/jianyi0115/archive/2008/04/28/1175259.html 好文章! 这篇文章将介绍SPCAMLEditor的实际应用之 ...

  3. 学生课间10分钟鸦雀无声遭反对,教育部做出最新响应

    "学校不得设置侵犯学生人身自由的管理措施,不得对学生在课间及其他非教学时间的正常交流.游戏.出教室活动等言行自由设置不必要的约束."6月1日,教育部公布<未成年人学校保护规定 ...

  4. 不用代码,10分钟打造属于自己的第一款小程序

    扫码体验 早晨到公司的时候,手机上推送的小程序审核通过的消息,激动的下载了小程序的二维码,扫一扫即可在手机上打开上线的小程序,不枉费昨天晚上熬夜到凌晨,用免费平台测试的功夫 gh_098cec5701 ...

  5. 10分钟出一个块的BCH,可以作为日常支付?

    中本聪创建比特币的初衷是希望其成为全球支付的货币,作为继承中本聪衣钵的比特币现金更是在这方面不断的努力.比特币平均10分钟出一个块,交易确认的时间也是10分钟左右.10分钟的支付确认时间对于日常支付来 ...

  6. mysql connection闪退重连_玩家排位巅峰赛开局闪退,重连失败,10分钟后一个提示让他懵了...

    #游戏圈中的春节# 王者荣耀排位赛460是经常的事情,不过闪退还是比较少见的,玩家排位巅峰赛开局闪退,重新登录游戏之后,重连一直失败,10分钟后一个提示让他懵了. 460的情况大家都经历过,这是很多原 ...

  7. pythonhelloworld项目,10分钟搭建一个小型网页(python django)(hello world!)

    10分钟搭建一个小型网页(python django)(hello world!) 1.安装django pip install django 安装成功后,在Scripts目录下存在django-ad ...

  8. 10 分钟实现一个自己的服务器监控器

    需求 最近需要给自己的服务器添加监控器,目的是监控服务器的内存.CPU.磁盘占用率,资源占用率过高的话能给自己发个提醒,当前主流的平台一般会提供邮件.短息.甚至会提供微信提醒,不过这类提醒包含的噪音太 ...

  9. 直播视频讲解-【10分钟完成一个物联网应用】快上车

    直播视频讲解-[10分钟完成一个物联网应用] Java编程哦 Josh操作系统能做什么? 它降低了智能物联网应用开发的难度,给未来大量的创造性应用提供了广阔的平台. 它能让一个高中生甚至是初中生在十分 ...

最新文章

  1. Swift 开源带来的思考
  2. 配置方法_CISCO防火墙端口映射配置方法
  3. r语言没有forecast这个函数_R语言学习日记——时间序列分析之ARIMA模型预测
  4. STL中bitset的用法的整理
  5. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
  6. PHP 魔术方法__set() __get() 方法详解
  7. python3的 pymysql把mysqldb库取代了,让python 3支持mysqldb的解决方法
  8. 学习Python+numpy数组运算和矩阵运算看这254页PPT就够了
  9. Qt知识点、疑难杂症的治疗
  10. 微信小程序怎么做店铺?
  11. 苹果手机上编辑html文件夹,苹果手机可以编辑EXCEL文件吗
  12. 程序读取斗罗大陆热点词汇热度
  13. nubia android root权限,努比亚Z11 root教程及获取root权限的方法
  14. 英文版oracle数据库不能复制粘贴,win10 plsql没法复制 粘贴
  15. blastn 输出结果每列啥意思_如何看懂NCBI BLAST输出结果
  16. 在Chrome中使用非应用商店安装的扩展程序
  17. Could not get unknown property ‘packageForR‘ for task ‘:app:processDebugResources‘ of type com.andro
  18. http响应头和请求头配置对照表
  19. php编写个人所得税单元测试,PHP计算个人所得税示例【不使用速算扣除数】
  20. java判断时间段是否交叉重叠

热门文章

  1. freecplus框架-ftp客户端
  2. struts文件上传 java_Struts上传文件
  3. MySQL只读实例简介
  4. Mysql学习总结(47)——MySQL大表优化方案
  5. Spring学习总结(14)——Spring10种常见异常解决方法
  6. cpython和jpython_在J内部使用Python
  7. web dialog 内嵌 图片_Unity游戏如何在iOS上调用Facebook原生对话框分享图片
  8. Get_key.c模块流程
  9. 毫秒数据字符串转换为DateTime
  10. “安防+人工智能”,安企选择哪种抱大腿姿势才有出息?