用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 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 Javascript
CSS或者JS实现鼠标悬停显示另一元素
Jan 22 Javascript
用js动态添加html元素,以及属性的简单实例
Jul 19 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
node.js操作MongoDB的实例详解
Oct 11 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 Javascript
Vue实现圆环进度条的示例
Feb 06 Vue.js
React中的Context应用场景分析
Jun 11 Javascript
从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
用 PHP5 轻松解析 XML
2006/12/04 PHP
php图片添加水印例子
2016/07/20 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
小程序实现多选框功能
2018/10/30 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python机器人行走步数问题的解决
2018/01/29 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
python 实现客户端与服务端的通信
2020/12/23 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
校园学雷锋活动月总结
2014/03/09 职场文书
学校社会实践活动总结
2014/07/03 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python