Last active
October 23, 2016 03:04
-
-
Save lifehome/307a4565ae0f1e9a0b27f4d5c9ae9595 to your computer and use it in GitHub Desktop.
ES2015 written script, use with caution.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* NOTICE: This file is written in ES2015. | |
* Please use the --harmony flag for nodejs environment. | |
* | |
* License: CC BY-SA 4.0 by Ivan Ip<m@lifeho.me> | |
*/ | |
var iconv = require('iconv-lite'), | |
request = require('request'), | |
cheerio = require('cheerio'), | |
cheerioTableparser = require('cheerio-tableparser'), | |
selectr = '#containercontent > table:nth-child(15) > tbody > tr > td > table:nth-child(3) > tbody > tr:nth-child(22) > td > table:nth-child(1)', | |
probability = {}; | |
module.exports = function(callback){ | |
request({url:'http://www.hkww.org/weather/latesttc.html', encoding:null}, function (error, response, html) { | |
if (!error && response.statusCode == 200) { | |
var html = iconv.decode(html, "big5"); | |
if(html.indexOf("There are currently no active warning bulletins.") > 0) | |
return callback({ info: 'No active warning bulletins.'}); | |
var $ = cheerio.load(html); | |
// Let TableParser parse the table | |
cheerioTableparser($); | |
var rawdata = $(selectr).parsetable(true, true, true); | |
var data = Object.values(rawdata); | |
var title = rawdata[0][0]; | |
var probability = { | |
'standBy_signal': { | |
// tau = +6 | |
'+6-inforce': data[1][3], | |
'+6-cancel': data[1][4], | |
// tau = +12 | |
'+12-inforce': data[2][3], | |
'+12-cancel': data[2][4], | |
// tau = +18 | |
'+18-inforce': data[3][3], | |
'+18-cancel': data[3][4], | |
// tau = +24 | |
'+24-inforce': data[4][3], | |
'+24-cancel': data[4][4], | |
// tau = +30 | |
'+30-inforce': data[5][3], | |
'+30-cancel': data[5][4], | |
// tau = +36 | |
'+36-inforce': data[6][3], | |
'+36-cancel': data[6][4], | |
// tau = +42 | |
'+42-inforce': data[7][3], | |
'+42-cancel': data[7][4], | |
// tau = +48 | |
'+48-inforce': data[8][3], | |
'+48-cancel': data[8][4] | |
}, | |
'strongWind_signal': { | |
// tau = +6 | |
'+6-inforce': data[1][6], | |
'+6-cancel': data[1][7], | |
// tau = +12 | |
'+12-inforce': data[2][6], | |
'+12-cancel': data[2][7], | |
// tau = +18 | |
'+18-inforce': data[3][6], | |
'+18-cancel': data[3][7], | |
// tau = +24 | |
'+24-inforce': data[4][6], | |
'+24-cancel': data[4][7], | |
// tau = +30 | |
'+30-inforce': data[5][6], | |
'+30-cancel': data[5][7], | |
// tau = +36 | |
'+36-inforce': data[6][6], | |
'+36-cancel': data[6][7], | |
// tau = +42 | |
'+42-inforce': data[7][6], | |
'+42-cancel': data[7][7], | |
// tau = +48 | |
'+48-inforce': data[8][6], | |
'+48-cancel': data[8][7] | |
}, | |
'Gale-or-Storm_signal': { | |
// tau = +6 | |
'+6-inforce': data[1][9], | |
'+6-cancel': data[1][10], | |
// tau = +12 | |
'+12-inforce': data[2][9], | |
'+12-cancel': data[2][10], | |
// tau = +18 | |
'+18-inforce': data[3][9], | |
'+18-cancel': data[3][10], | |
// tau = +24 | |
'+24-inforce': data[4][9], | |
'+24-cancel': data[4][10], | |
// tau = +30 | |
'+30-inforce': data[5][9], | |
'+30-cancel': data[5][10], | |
// tau = +36 | |
'+36-inforce': data[6][9], | |
'+36-cancel': data[6][10], | |
// tau = +42 | |
'+42-inforce': data[7][9], | |
'+42-cancel': data[7][10], | |
// tau = +48 | |
'+48-inforce': data[8][9], | |
'+48-cancel': data[8][10] | |
} | |
}; | |
var info = title.concat(probability); | |
return callback(info); | |
} return callback({ info: 'No statistic data has been found.' }); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment