用node撸一个监测复联4开售短信提醒的实现代码


Posted in Javascript onApril 10, 2019

背景

北美复仇者联盟4首映电影票eBay上面已经2500美元一张票了,为了避免抢不到票 写了个监控复仇者联盟4开售就发送短信的脚本,这样我们可以第一时间进行抢票,毕竟抢到就是赚到 。。。

思路

node编写一个抓包脚本监测在售的电影中是否有 “复仇者联盟” 这几个关键词,如果有则直接发送短信~

实现

要想实现我的想法,运用到了2个node库:superagent 和 cheerio ,分别实现发送请求和dom节点分析。

设置定时器

这里用 setInterval 来实现定时,每隔60s 抓取一次网页数据

function intervalFunc() {
  superagent.get('https://maoyan.com/films?sortId=2').end((err, res) => {
    if (err) {
      console.log(` - ${err}`)
    } else {
      getFilms(res)
    }
  });
}

var timer = setInterval(intervalFunc, 10000);

分析dom节点

用node撸一个监测复联4开售短信提醒的实现代码

我们只需要获取到 div 的class 是 channel-detail 就可以了 ~

let getFilms = (res) => {
  let $ = cheerio.load(res.text);
  var isOn = false
  $('.channel-detail').each((idx, ele) => {
    if ($(ele).text().indexOf("复仇") != -1) {
      isOn = true
    }
  });
  if (isOn) {
    for (const phone of phoneArray) {
      sendMessage(phone)
    }
    clearInterval(timer)
  } else {
    console.log("影片未上映....")
  }
};

这里如果监测到影片已经上映了记得关闭定时器 ~

发送短信

function sendMessage(mobile) {
  var http = require('http');
  var username = "";
  var secretkey = "";
  
  var path = "/sms_token?ddtkey=" + username + "&secretkey=" + secretkey
    + "&mobile=" + mobile + "&content=Go"

  var options = {
    host: '112.124.17.46',
    port: 7001,
    path: path,
    method: 'GET',
    headers: {
      'Content-Type': 'application/json'
    }
  };
  http.get(options, function (res) {
    var resData = "";
    res.on("data", function (data) {
      resData += data;
    });
    res.on("end", function () {
      console.log("影片已经上映,短信通知成功")
    });
  })
}

总结

1、node 抓包采用 superagent 和 cheerio
2、定时器关闭采用 clearInterval

完整的代码地址:https://github.com/ChengRuipeng/maoyan

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 控制 html元素 显示/隐藏实现代码
Sep 01 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
JQuery给元素绑定click事件多次执行的解决方法
May 29 Javascript
详解JS函数重载
Dec 04 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
Vue3.0中的monorepo管理模式的实现
Oct 14 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
从0到1搭建Element的后台框架的方法步骤
Apr 10 #Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 #Javascript
小程序分享模块超级详解(推荐)
Apr 10 #Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 #Javascript
Vue中computed、methods与watch的区别总结
Apr 10 #Javascript
JavaScript 性能提升之路(推荐)
Apr 10 #Javascript
详解vue-cli3 中跨域解决方案
Apr 10 #Javascript
You might like
德劲1102收音机的打理维修案例
2021/03/02 无线电
第十四节 命名空间 [14]
2006/10/09 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
php的4种常见运行方式
2015/03/20 PHP
php实现Mysql简易操作类
2015/10/11 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
JS array 数组详解
2009/03/22 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
JavaScript之生成器_动力节点Java学院整理
2017/06/30 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
django 微信网页授权登陆的实现
2019/07/30 Python
简单介绍django提供的加密算法
2019/12/18 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
学生实习推荐信范文
2013/11/26 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
活动总结报告怎么写
2014/07/03 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
居安思危观后感
2015/06/11 职场文书