前情提要
最近换工作了,运气不错,公司基本每次都准点下班,从公司到我到住址是一趟公交直达,所以下班后我都会去公交站等车,今天不太顺利,正值寒冬腊月,我在寒风中等了半小时车才来,心想还不如多在公司摸摸鱼晚点下来,一来领导看到我在加班工作,二来不用在寒风中瑟瑟发抖😄,由此做了个下面的下班提醒小程序
准备工作
技术选型:哥们是前端,自然要用nodejs来实现!【听起来挺牛x,其实是不会后端语言....】
nodemailer
nodemailer是一个发送邮件npm包,我们可以使用它来给我们发送车辆到达情况的邮件。【有人说为什么不用短信,发短信多直接,sorry,没钱.....】 npm项目初始化之类的就不用说了,npm init 完直接开装
npm i nodemailer -S
小小功能就不用整什么项目结构之类的杂耍了,上来就是一个index.js
const nodemailer = require('nodemailer');
function sendMail(text){
var user = "xxxx@qq.com";//用来发送邮件的邮箱
var pass = "xxxx";
var to = "xxx@163.com";//用来接收邮件的邮箱
let transporter = nodemailer.createTransport({
host:"smtp.qq.com",
port:587,
secure:false,
auth:{
user:user,
pass:pass
}
});
transporter.sendMail({
from:`下班提醒小助手 <${user}>`,//文字➕邮件地址,这是nodemailer配置要求的格式
to:to,
text:text
});
}
上面sendMail方法就可以实现发送邮件的功能
tips:想要邮箱支持第三方插件调用发送邮件需要进行smtp配置,以qq邮箱为例
网页登录qq邮箱“设置”->“账户”,开启smtp,生成授权码即可
axios
怎么知道公交到哪里,肯定需要请求某个接口获取信息,axios先安排上
npm i axios -S
公交网站
如何找到公交查询的方法呢?我是一个办事尽量走官方渠道的人,我所在的城市是北京,所以我尝试去城市公交的官网
一进首页就找到了,很幸运,接着选中下班坐的那趟路线和上车站点
nice,这里就是我想要的信息,可是我要怎么去请求这些信息呢,于是我用了个抓包工具来瞧瞧我们在网页操作的时候它调用了哪个接口
抓包工具
Charles,比较好用,但是收费,不是我的菜
Wireshark,额~鄙人没这么专业...
最有发现了这个简单易用还免费的工具,安利一波~
启动后在公交查询网站重复之前的操作,最终发现了想找的东西
接口需要两个参数:conditionstr,token
结合刚刚安装的axios开整
const Axios = require('axios');
function getBusData(){
let url = "http://www.bjbus.com/api/api_etartime.php?conditionstr=xxx&token=xxx;
return Axios.get(url);
}
getBusData方法就可以获取从起始站点到你上车站点的所有在运行车辆信息,这些信息经过拼装就可以通过之前定义的sendMail函数通过邮件的方式发送给自己
node-schedule
完工! ...等等,我们不能没到下班点去node index.js吧,node-schedule帮你解决这个问题,这是个定时器npm包,使用方式可以参考
npm i node-schedule -S
//运行定时任务
schedule.scheduleJob('* 5 18 * * *',()=>{
getBusData().then((res)=>{
sendMail(str);
});
});
在node-schedule文档里有好多使用方法,我使用了'* * * * * *'这种写法,参考释义
最后
身为开发的你肯定有个自己的服务器吧,把这个小文件放到服务器,pm2运行起来,然后你每天就可以收到小跟班发来的提醒该下班等车的邮件来,美滋滋~