1

昨天狗东的LAMY钢笔又在搞活动,然而看到的时候已经涨回了原价。一怒之下,写了一个JS脚本自动查询促销信息并通过微信来通知我。

准备

数据采集

数据采集方面,我们使用Node.js来实现一个爬虫,并定时对页面进行访问刷新,随时监控数据。

  • 使用到的依赖如下:

  1. cheerio :JS网页解析,语法类似JQuery

  2. superagent :网络请求库

  3. system-sleep :调用系统sleep

  4. moment :对时间进行格式化,方便打Log

消息通知

微信通知我们通过Server酱实现,这是个什么东西呢?

Server酱

是什么

「Server酱」,英文名「ServerChan」,是一款「程序员」和「服务器」之间的通信软件。

说人话?就是从服务器推报警和日志到手机的工具。

开通并使用上它,只需要一分钟:

登入:用GitHub账号登入网站,就能获得一个SCKEY(在「发送消息」页面)
绑定:点击「微信推送」,扫码关注同时即可完成绑定
发消息:往 http://sc.ftqq.com/SCKEY.send 发GET请求,就可以在微信里收到消息啦

Server酱使用方法就是这么简单了,注册、绑定结束后你会拿到一个URL,我们只需要向这个URL发送消息就可以在微信收到通知了。

代码实现

var cheerio = require('cheerio');
var superagent = require('superagent')
var sleep = require('system-sleep');
var moment = require('moment')
//URLs
var base = 'http://http://www.baicaio.com/'
var collection = 'http://www.baicaio.com/index-index-type--tab-isnice-dss-cc'
var wechat = 'http://sc.ftqq.com/ ##Your own url.send'
//哦莫西罗伊,也就是关注的关键词咯
var omxly = ['凌美', '耳机', '钢笔', '鼠标', '显示器', '电脑', '手机', '电视']
//通知过的内容的href,防止多次通知相同内容
var notificated = []

function refresh(callback) {
    console.log('检查优惠信息  '+ moment().format('MMMM Do YYYY, h:mm:ss a'))
    var items = []
    superagent
        .get(collection)
        .end(function (err, res) {
            var $ = cheerio.load(res.text)
            $('#C_drc ').find('li').each(function (idx, element) {
                $element = $(element)
                var href = $element.find('h2 > a').attr('href')
                var title = $element.find('h2 > a').attr('title')
                var price = $element.find('h2 > a > em').text()
                items.push({
                    href: href,
                    title: title,
                    price: price
                })
            })
            check(items, callback)
        })
}

function check(items, callback) {
    for (index in items) {
        var item = items[index]
        for (word_index in omxly) {
            var flag = true
            var word = omxly[word_index]
            if (String(item.title).indexOf(omxly[word_index]) !== -1) {
                for (href_index in notificated) {
                    if (notificated[href_index] == item.href) {
                        flag = false
                        callback()
                        break
                    }
                }
                if (flag) {
                    console.log('发现关注商品')
                    console.log(item.title, item.price)
                    notificated.push(item.href)
                    wechatNotification(word,item.title, item.price, item.href, callback)
                }
            }
        }
    }
}
function wechatNotification(word,title, desc, url, callback) {
    var text = '主人,发现了你喜欢的:_' +
        '' + word
    desc = '['+ title + ']('+ base + url +')\n\n' + desc
    desc += '\n\n'
    desc += '时间:'+moment().format('MMMM Do YYYY, h:mm:ss a')
    superagent
        .get(wechat)
        .query({text: text})
        .query({desp: desc})
        .end(function (err, sres) {
            callback()
        })
}
while (true) {
    refresh({})
    sleep(5 * 1000)
}

Hydrogen
2.5k 声望73 粉丝

Write code for fun.