用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 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
Jul 28 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
js return返回多个值,通过对象的属性访问方法
Feb 21 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
Mar 19 Javascript
详解Vue2.x-directive的学习笔记
Jul 17 Javascript
JS实现图片切换效果
Nov 17 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
Aug 08 Javascript
Node.js中文件系统fs模块的使用及常用接口
Mar 06 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
php显示页码分页类的封装
2017/06/08 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
pytyon 带有重复的全排列
2013/08/13 Python
使用Python对MySQL数据操作
2017/04/06 Python
深入浅析Python传值与传址
2018/07/10 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python对视频画框标记后保存的方法
2018/12/07 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
Python笔记之观察者模式
2019/11/20 Python
python 实现兔子生兔子示例
2019/11/21 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
Python爬取某平台短视频的方法
2021/02/08 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
环境科学毕业生自荐信
2013/11/21 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
学校评语大全
2014/05/06 职场文书
学校运动会报道稿
2014/09/23 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL