This repository was archived by the owner on Dec 9, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathqueryapi.js
More file actions
93 lines (81 loc) · 2.81 KB
/
queryapi.js
File metadata and controls
93 lines (81 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
const request = require('request');
const Package = require('./models/Package');
const Status = require('./models/Status');
const KUAIDI_100_DETECT_COM_URL = 'http://www.kuaidi100.com/autonumber/autoComNum?text=';
const KUAIDI_100_QUERY_URL = 'http://www.kuaidi100.com/query?type={com}&postid={id}';
async function detectCompany(id) {
return new Promise((resolve, reject) => {
request.get(KUAIDI_100_DETECT_COM_URL + id, function (err, res, body) {
let obj = JSON.parse(body);
if (obj.auto.length > 0) {
resolve(obj.auto[0].comCode);
} else {
resolve(null);
}
});
})
}
async function _queryPackageByKuaidi100(id, com) {
return new Promise(function (resolve, reject) {
request.get(KUAIDI_100_QUERY_URL.replace('{id}', id).replace('{com}', com), function (err, res, body) {
try {
let obj = JSON.parse(body);
let pack = new Package({
message: obj.message,
id: obj.nu,
company: obj.com,
statusCode: obj.status,
state: obj.state,
isChecked: obj.ischeck === 1,
updateTime: Date.now(),
data: obj.data.map(function (item) {
return new Status({
content: item.context,
time: item.time,
location: item.location
});
})
});
resolve(pack);
} catch (e) {
console.log(e);
resolve(null);
}
});
})
}
async function queryPackageByKuaidi100(id, com) {
return new Promise(async (resolve, reject) => {
if (!id) resolve(null);
if (!com) {
com = await detectCompany(id)
}
resolve(await _queryPackageByKuaidi100(id, com))
})
}
const express = require('express');
let router = express.Router();
router.get('/query', async (req, response, next) => {
let id = req.query['id'];
let com = req.query['com'];
if (!id) {
response.json({message: 'Missing id parameter', code: -3});
return
}
let pack = await queryPackageByKuaidi100(id, com);
response.json({message: 'Done', code: 0, data: pack});
});
router.get('/detect_company', function (req, response, next) {
let id = req.query['id'];
if (!id) {
response.json({message: 'Missing id parameter', code: -3});
return
}
detectCompany(id)
.then(comCode => {
response.json({message: 'Done', code: 0, company: comCode});
})
});
router.queryPackage = queryPackageByKuaidi100;
router.detectCompany = detectCompany;
module.exports = router;