Skip to content

Instantly share code, notes, and snippets.

@rluisr
Created July 29, 2016 16:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rluisr/b8f0da7fe5ca2e9c2f7c2e609d82dfa8 to your computer and use it in GitHub Desktop.
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.
/*
* 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