UNPKG

carg-tracking-cli

Version:

Correo Argentino international tracking cli

144 lines (122 loc) 3.99 kB
'use strict'; var Promise = require('bluebird'); var request = require('request-promise'); var drawInIterm = require('iterm2-image'); var prompt = require('prompt'); var tabletojson = require('tabletojson'); var Table = require('cli-table'); var _ = require('underscore'); var req = request.defaults({ jar: true, // save cookies to jar rejectUnauthorized: false, followAllRedirects: true // allow redirections }); prompt.message = ''; prompt.delimiter = ''; function getImage() { return new Promise(function (resolve, reject) { req.get({ url: 'http://www.correoargentino.com.ar/sites/all/modules/custom/ca_forms_core/captcha/securimage/securimage_show.php', headers: { 'Accept': 'image/webp,image/*,*/*;q=0.8', 'Referer': 'http://www.correoargentino.com.ar/formularios/oidn' } }).on('response', function (res) { drawInIterm(res, function (err) { if (err) { reject(err); return; } resolve(); }); }); }); } function resolveCaptcha() { return new Promise(function (resolve, reject) { prompt.start(); prompt.get({ properties: { captcha: { description: 'Captcha (case sensitive):', required: true } } }, function (err, result) { if (err) { reject(err); return; } resolve(result.captcha); }); }); } function getTrackingInfo(trackingId, captcha) { return req.post({ url: 'http://www.correoargentino.com.ar/sites/all/modules/custom/ca_forms/api/wsFacade.php', form: { id: trackingId, ct_captcha: captcha.toLowerCase().trim(), action: 'oidn' } }); } function showInternationalTrackingInfo(tablesAsJson) { return new Promise(function (resolve) { console.log('International:'); var keys = Object.keys(tablesAsJson[0]).filter(function (v) { return v !== 'Acción'; }); var table = new Table({ head: keys }); tablesAsJson.forEach(function (val) { return table.push(_.values(_.omit(val, 'Acción'))); }); console.log(table.toString()); resolve(); }); } function showNationalTrackingInfo(tablesAsJson) { return new Promise(function (resolve) { if (!tablesAsJson) { resolve(); return; } console.log('National:'); var keys = Object.keys(tablesAsJson[0]); var table = new Table({ head: keys }); tablesAsJson.forEach(function (val) { return table.push(_.values(_.omit(val, 'Acción'))); }); console.log(table.toString()); resolve(); }); } function showTrackingInfo(body) { return new Promise(function (resolve, reject) { if (body === 'captcha_error') { reject('Invalid captcha'); return; } // Shame on you correargentino.com.ar var fixedBody = body.replace(/<tbody><td>/g, '<tr><td>').replace(/<\/td><\/tbody>/g, '<\/td></tr>'); var tablesAsJson = tabletojson.convert(fixedBody); if (tablesAsJson.length === 0) { console.log('No results'); return Promise.resolve(); } console.log('Results:'); return showInternationalTrackingInfo(tablesAsJson[0]).then(function () { return showNationalTrackingInfo(tablesAsJson[1]); }); }); } exports.track = function (trackingId) { console.log('Getting Tracking for %s', trackingId); getImage().then(resolveCaptcha).then(getTrackingInfo.bind(null, trackingId)).then(showTrackingInfo).catch(function (err) { return console.error(err); }); };