北美復仇者聯盟4首映電影票eBay上面已經2500美圓一張票了,爲了不搶不到票 寫了個監控復仇者聯盟4開售就發送短信的腳本,這樣咱們能夠第一時間進行搶票,畢竟搶到就是賺到 。。。node
node編寫一個抓包腳本監測在售的電影中是否有 「復仇者聯盟」 這幾個關鍵詞,若是有則直接發送短信~git
要想實現個人想法,運用到了2個node庫:superagent 和 cheerio ,分別實現發送請求和dom節點分析。github
這裏用 setInterval 來實現定時,每隔60s 抓取一次網頁數據json
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); 複製代碼
咱們只須要獲取到 div 的class 是 channel-detail
就能夠了 ~bash
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) // } sendWx() clearInterval(timer) } else { console.log("影片未上映....") } }; 複製代碼
這裏若是監測到影片已經上映了記得關閉定時器 ~微信
這裏調用了 Server醬 的微信服務,key換成大家本身的就能夠了 ~markdown
function sendWx() { var http = require('http'); var key = 'SCU48466Tf3f96d026cbcd4d4ab8f05fa7d04ee2c5cada058e0522' var path = '.send?text=' var text = '復仇者聯盟4電影票已經開售啦,快去購票吧!' http.get('http://sc.ftqq.com/' + key + path + text,function(data){ var str=""; data.on("data",function(chunk){ str+=chunk; }) data.on("end",function(){ console.log("推送發送成功") }) }) } 複製代碼
這裏 感謝 @隆多羅我 的建議 ~app
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("影片已經上映,短信通知成功") }); }) } 複製代碼
一、node 抓包採用 superagent 和 cheeriodom
二、定時器關閉採用 clearIntervaloop
完整的代碼地址:github.com/ChengRuipen…