Created
July 29, 2016 16:57
-
-
Save rluisr/b8f0da7fe5ca2e9c2f7c2e609d82dfa8 to your computer and use it in GitHub Desktop.
【Node.js】 Check tracking status. This code supports 349 couriers. Notify with Twitter.
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
/* | |
* Notify tracking status with Twitter on Node.js. | |
* | |
* Usage | |
* ------------------- | |
* node app.js "<tracking number>" "<your twitter username>" | |
* | |
* This code scraping 'track.aftership.com' | |
*/ | |
const client = require('cheerio-httpcli'); | |
const Twitter = require('twitter'); | |
const fs = require('fs'); | |
let flag = null; | |
let number = process.argv[2]; | |
let user = process.argv[3]; | |
let twitter = new Twitter({ | |
consumer_key: '', | |
consumer_secret: '', | |
access_token_key: '', | |
access_token_secret: '' | |
}); | |
/* check argument */ | |
if (process.argv.length !== 4) { | |
console.log('Missing argument. Please check argument.'); | |
process.exit(); | |
} | |
/* check one before message file */ | |
fs.stat('./latest', function (err, stat) { | |
if (err == null) { | |
flag = 0; | |
} else if (err.code == 'ENOENT') { | |
flag = 1; | |
} else { | |
process.exit('Error: ' + err.code); | |
} | |
}); | |
client.fetch('https://track.aftership.com/' + number, function (err, $, res) { | |
let message = $('div.checkpoint__content strong').eq(0).text(); | |
let date = $('div.checkpoint__time strong').eq(0).text() + $('div.hint').eq(0).text(); | |
/* one before message exist === 0 */ | |
if (flag === 0) { | |
fs.readFile('./latest', 'utf-8', function(err, data){ | |
/* If different from one before, Notify~ */ | |
if (data !== new Buffer(message).toString('base64')) { | |
/* write file for comparing ? Do I should change from base64 to message === message? */ | |
fs.writeFile('./latest', new Buffer(message).toString('base64'), function (err) { | |
// No error handling | |
}); | |
twitter.post('statuses/update', { | |
status: '@' + user + ' Number: ' + number + '\n' + | |
'Date: ' + date.replace(/\d{4}/g, "") + '\n' + | |
'Message: ' + message.slice(0, 40) + '...\n' + | |
'https://track.aftership.com/singapore-post/' + number | |
}, function (error, tweet, response) { | |
// No error handling | |
console.log(response); | |
}); | |
} | |
}); | |
} else { | |
/* write file for comparing ? Do I should change from base64 to message === message? */ | |
fs.writeFile('./latest', new Buffer(message).toString('base64'), function (err) { | |
// No error handling | |
}); | |
twitter.post('statuses/update', { | |
status: '@' + user + ' Number: ' + number + '\n' + | |
'Date: ' + date.replace(/\d{4}/g, "") + '\n' + | |
'Message: ' + message.slice(0, 40) + '...\n' + | |
'https://track.aftership.com/singapore-post/' + number | |
}, function (error, tweet, response) { | |
// No error handling | |
console.log(response); | |
}); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment