delivery-tracker
Advanced tools
Comparing version 2.3.2 to 2.3.3
@@ -0,1 +1,4 @@ | ||
# 2.3.3 | ||
* sicepat: add apikey for option | ||
# 2.3.2 | ||
@@ -2,0 +5,0 @@ * sicepat: change to work without apikey |
@@ -46,3 +46,3 @@ 'use strict' | ||
status: tracker.STATUS.IN_TRANSIT, | ||
time: moment($el.find('.date').text().trim().replace(/\s+Time/i, '').replace(/Date /i, '') + '+07:00', 'DD MMM YY HH:mmZZ').format() | ||
time: moment($el.find('.date').text().trim().replace(/\s+Time/i, '').replace(/Date /i, ''), 'DD MMM YYYY HH:mm').format('YYYY-MM-DD HH:mm') | ||
} | ||
@@ -49,0 +49,0 @@ if (/delivery successful/i.test(statusMessage) === true) { |
@@ -9,59 +9,137 @@ 'use strict' | ||
var trackingInfo = function (number) { | ||
return { | ||
method: 'POST', | ||
url: 'http://sicepat.com/checkAwb', | ||
data: { | ||
'textarea-awb': number | ||
} | ||
} | ||
} | ||
var loadHandler = function (opts) { | ||
if (opts && opts.apikey) { | ||
return { | ||
trackingInfo: function (number) { | ||
return { | ||
method: 'GET', | ||
url: 'http://api.sicepat.com/customer/waybill?waybill=' + number, | ||
json: true | ||
} | ||
}, | ||
parser: { | ||
trace: function (body, number) { | ||
var courier = { | ||
code: tracker.COURIER.SICEPAT.CODE, | ||
name: tracker.COURIER.SICEPAT.NAME | ||
} | ||
var extractNumber = function (str) { | ||
var matches = str.match(/(\d+)/) | ||
return matches ? matches[1] : null | ||
} | ||
var result = { | ||
courier: courier, | ||
number: number, | ||
status: tracker.STATUS.PENDING | ||
} | ||
var parser = { | ||
trace: function (body, number) { | ||
var $ = cheerio.load(body) | ||
var courier = { | ||
code: tracker.COURIER.SICEPAT.CODE, | ||
name: tracker.COURIER.SICEPAT.NAME | ||
} | ||
var checkpoints = [] | ||
var history = body.sicepat.result.track_history || [] | ||
for (var i = history.length - 1; i >= 0; i--) { | ||
var item = history[i] | ||
var checkpoint = { | ||
courier: courier, | ||
location: '', | ||
message: '[' + item.status + '] ' + (item.receiver_name || item.city || ''), | ||
status: tracker.STATUS.IN_TRANSIT, | ||
time: moment(item.date_time + '+0700').utc().format('YYYY-MM-DDTHH:mmZ') | ||
} | ||
var result = { | ||
courier: courier, | ||
number: number, | ||
status: tracker.STATUS.PENDING | ||
} | ||
if (item.status === 'DELIVERED') { | ||
checkpoint.status = tracker.STATUS.DELIVERED | ||
} | ||
var checkpoints = [] | ||
var $body = $('#awb-list') | ||
var $summary = $body.find('.res-item') | ||
checkpoints.push(checkpoint) | ||
} | ||
if ($summary.length > 0) { | ||
result.number = extractNumber($summary.find('td').eq(1).text()) | ||
if ($summary.find('td').eq(7).text().trim() === 'DELIVERED') { | ||
result.status = tracker.STATUS.DELIVERED | ||
} | ||
result.checkpoints = checkpoints | ||
result.status = tracker.normalizeStatus(result.checkpoints) | ||
$body.find('.res-detail .table').eq(2).find('tr').each(function (idx) { | ||
if (idx === 0) { | ||
return true | ||
return result | ||
} | ||
var $cols = $(this).find('td') | ||
checkpoints.push({ | ||
courier: courier, | ||
location: '', | ||
message: $cols.eq(1).text().trim(), | ||
status: tracker.STATUS.IN_TRANSIT, | ||
time: moment($cols.eq(0).text().trim() + '+0700', 'DD-MM-YYYY HH:mmZ').utc().format('YYYY-MM-DDTHH:mmZ') | ||
}, | ||
load: function (tracking, cb) { | ||
tracking.headers = { | ||
'api-key': opts.apikey | ||
} | ||
request(tracking, function (err, res, body) { | ||
if (err) { | ||
return cb(err) | ||
} | ||
if (!body.sicepat) { | ||
return cb(tracker.error(tracker.ERROR.UNKNOWN)) | ||
} | ||
if (body.sicepat.status.code !== 200) { | ||
return cb(tracker.error(body.sicepat.status.description)) | ||
} | ||
cb(null, res, body) | ||
}) | ||
}) | ||
} | ||
} | ||
} | ||
result.checkpoints = checkpoints | ||
var extractNumber = function (str) { | ||
var matches = str.match(/(\d+)/) | ||
return matches ? matches[1] : null | ||
} | ||
return result | ||
return { | ||
trackingInfo: function (number) { | ||
return { | ||
method: 'POST', | ||
url: 'http://sicepat.com/checkAwb', | ||
data: { | ||
'textarea-awb': number | ||
} | ||
} | ||
}, | ||
parser: { | ||
trace: function (body, number) { | ||
var $ = cheerio.load(body) | ||
var courier = { | ||
code: tracker.COURIER.SICEPAT.CODE, | ||
name: tracker.COURIER.SICEPAT.NAME | ||
} | ||
var result = { | ||
courier: courier, | ||
number: number, | ||
status: tracker.STATUS.PENDING | ||
} | ||
var checkpoints = [] | ||
var $body = $('#awb-list') | ||
var $summary = $body.find('.res-item') | ||
if ($summary.length > 0) { | ||
result.number = extractNumber($summary.find('td').eq(1).text()) | ||
if ($summary.find('td').eq(7).text().trim() === 'DELIVERED') { | ||
result.status = tracker.STATUS.DELIVERED | ||
} | ||
$body.find('.res-detail .table').eq(2).find('tr').each(function (idx) { | ||
if (idx === 0) { | ||
return true | ||
} | ||
var $cols = $(this).find('td') | ||
checkpoints.push({ | ||
courier: courier, | ||
location: '', | ||
message: $cols.eq(1).text().trim(), | ||
status: tracker.STATUS.IN_TRANSIT, | ||
time: moment($cols.eq(0).text().trim() + '+0700', 'DD-MM-YYYY HH:mmZ').utc().format('YYYY-MM-DDTHH:mmZ') | ||
}) | ||
}) | ||
} | ||
result.checkpoints = checkpoints | ||
return result | ||
} | ||
}, | ||
load: function (tracking, cb) { | ||
request.post({ | ||
url: tracking.url, | ||
form: tracking.data | ||
}, cb) | ||
} | ||
} | ||
@@ -71,10 +149,7 @@ } | ||
module.exports = function (opts) { | ||
var handler = loadHandler(opts) | ||
return { | ||
trackingInfo: trackingInfo, | ||
trackingInfo: handler.trackingInfo, | ||
trace: function (number, cb) { | ||
var tracking = trackingInfo(number) | ||
request.post({ | ||
url: tracking.url, | ||
form: tracking.data | ||
}, function (err, res, body) { | ||
handler.load(handler.trackingInfo(number), function (err, res, body) { | ||
if (err) { | ||
@@ -85,3 +160,3 @@ return cb(err) | ||
try { | ||
var result = parser.trace(body, number) | ||
var result = handler.parser.trace(body, number) | ||
cb(result ? null : tracker.error(tracker.ERROR.INVALID_NUMBER), result) | ||
@@ -88,0 +163,0 @@ } catch (e) { |
{ | ||
"name": "delivery-tracker", | ||
"version": "2.3.2", | ||
"version": "2.3.3", | ||
"author": { | ||
@@ -50,3 +50,4 @@ "name": "egg", | ||
"sicepat", | ||
"xioexpress" | ||
"xioexpress", | ||
"eparcel" | ||
], | ||
@@ -53,0 +54,0 @@ "license": "MIT", |
73395
2101