ads
This commit is contained in:
parent
b8b8b13b06
commit
a9fb52d7e3
47
data_providers/nomerogram.js
Normal file
47
data_providers/nomerogram.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
const crypto = require('crypto');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
const Utils = require('../utils');
|
||||||
|
const utf8 = require('utf8');
|
||||||
|
|
||||||
|
const baseUrl = 'https://www.nomerogram.ru/api/v1.1';
|
||||||
|
const hash = crypto.createHash('sha256');
|
||||||
|
|
||||||
|
const secretSuffix = 'queivoo1ieNgae2e';
|
||||||
|
const appId = 'p15';
|
||||||
|
const deviceId = '01b854631cb28e175ffbcccf6114acc3';
|
||||||
|
const from = 'search';
|
||||||
|
|
||||||
|
class NomerogramProvider {
|
||||||
|
static async getGroups(number) {
|
||||||
|
let timestamp = Math.floor(Date.now() / 1000);
|
||||||
|
let secretSource = appId + number + deviceId + from + timestamp + secretSuffix;
|
||||||
|
hash.update(secretSource);
|
||||||
|
let secret = hash.copy().digest('hex');
|
||||||
|
console.log('secret: ', secret);
|
||||||
|
|
||||||
|
let url = `${baseUrl}/group/list?from=${from}&carplate=${number}×tamp=${timestamp}&secret=${secret}&app_id=${appId}&device_id=${deviceId}`;
|
||||||
|
let result = await fetch(utf8.encode(url));
|
||||||
|
let json = await result.json();
|
||||||
|
|
||||||
|
if(!json.success) {
|
||||||
|
throw Error(json.message);
|
||||||
|
//return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.data.groups.map(g => {
|
||||||
|
return {
|
||||||
|
id: g.group_id,
|
||||||
|
url: g.group_url,
|
||||||
|
price: g.price,
|
||||||
|
date: Utils.parseDate(g.date),
|
||||||
|
mileage: g.mileage,
|
||||||
|
region: g.region_name,
|
||||||
|
city: g.city_name,
|
||||||
|
adDescription: g.description,
|
||||||
|
photos: g.photos.map(p => p.src.default)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = NomerogramProvider;
|
||||||
11
package-lock.json
generated
11
package-lock.json
generated
@ -20,6 +20,7 @@
|
|||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"node-html-parser": "^2.0.0",
|
"node-html-parser": "^2.0.0",
|
||||||
"pubnub": "^4.29.6",
|
"pubnub": "^4.29.6",
|
||||||
|
"utf8": "^3.0.0",
|
||||||
"uuid": "^8.3.0"
|
"uuid": "^8.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@ -2945,6 +2946,11 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/utf8": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ=="
|
||||||
|
},
|
||||||
"node_modules/util-deprecate": {
|
"node_modules/util-deprecate": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
@ -5505,6 +5511,11 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"utf8": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ=="
|
||||||
|
},
|
||||||
"util-deprecate": {
|
"util-deprecate": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"node-html-parser": "^2.0.0",
|
"node-html-parser": "^2.0.0",
|
||||||
"pubnub": "^4.29.6",
|
"pubnub": "^4.29.6",
|
||||||
|
"utf8": "^3.0.0",
|
||||||
"uuid": "^8.3.0"
|
"uuid": "^8.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@ -6,6 +6,7 @@ const AvtocodProvider = require('../data_providers/avtocod');
|
|||||||
const Vin01Provider = require('../data_providers/vin01');
|
const Vin01Provider = require('../data_providers/vin01');
|
||||||
const { regions } = require('../data_providers/constants');
|
const { regions } = require('../data_providers/constants');
|
||||||
const RsaProvider = require('../data_providers/rsa');
|
const RsaProvider = require('../data_providers/rsa');
|
||||||
|
const NomerogramProvider = require('../data_providers/nomerogram');
|
||||||
const Utils = require('../utils');
|
const Utils = require('../utils');
|
||||||
|
|
||||||
const makeError = error => ({ success: false, error });
|
const makeError = error => ({ success: false, error });
|
||||||
@ -34,7 +35,10 @@ router.post('/check', async (req, res) => {
|
|||||||
} else {
|
} else {
|
||||||
all.push(Promise.reject(''));
|
all.push(Promise.reject(''));
|
||||||
}
|
}
|
||||||
let [autocod, vin01] = await Promise.allSettled(all);
|
|
||||||
|
all.push(NomerogramProvider.getGroups(number));
|
||||||
|
|
||||||
|
let [autocod, vin01, nomerogram] = await Promise.allSettled(all);
|
||||||
|
|
||||||
let vehicle = null;
|
let vehicle = null;
|
||||||
if(autocod.status == 'rejected' && vin01.status == 'rejected') {
|
if(autocod.status == 'rejected' && vin01.status == 'rejected') {
|
||||||
@ -56,6 +60,13 @@ router.post('/check', async (req, res) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(nomerogram.status == 'fulfilled') {
|
||||||
|
console.log('nomerogram groups: ', nomerogram.value);
|
||||||
|
vehicle.ads = nomerogram.value;
|
||||||
|
} else {
|
||||||
|
console.error('nomerogram error: ', nomerogram.reason);
|
||||||
|
}
|
||||||
|
|
||||||
vehicle.addedBy = email;
|
vehicle.addedBy = email;
|
||||||
|
|
||||||
// In case of force update of existing vehicle, transfer all events to the new DB record
|
// In case of force update of existing vehicle, transfer all events to the new DB record
|
||||||
@ -163,7 +174,6 @@ router.post('/checkOsago', async (req, res) => {
|
|||||||
const { number, vin, date, token } = req.body;
|
const { number, vin, date, token } = req.body;
|
||||||
|
|
||||||
let result = await RsaProvider.checkOsago(number, vin, date, token);
|
let result = await RsaProvider.checkOsago(number, vin, date, token);
|
||||||
console.log(result);
|
|
||||||
|
|
||||||
let collection = req.db.collection('vehicles');
|
let collection = req.db.collection('vehicles');
|
||||||
let filter = number ? { number } : { vin1: vin };
|
let filter = number ? { number } : { vin1: vin };
|
||||||
|
|||||||
7
utils.js
7
utils.js
@ -65,6 +65,13 @@ class Utils {
|
|||||||
let regex = new RegExp('[' + Object.keys(cyrillic_to_latin).join('') + ']', 'g');
|
let regex = new RegExp('[' + Object.keys(cyrillic_to_latin).join('') + ']', 'g');
|
||||||
return str.replace(regex, letter => cyrillic_to_latin[letter] || letter);
|
return str.replace(regex, letter => cyrillic_to_latin[letter] || letter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static parseDate(dateStr) {
|
||||||
|
let dateParams = dateStr.split('.').reverse().map(n => parseInt(n, 10));
|
||||||
|
dateParams[1] -= 1;
|
||||||
|
let date = (new Date(...dateParams)).getTime();
|
||||||
|
return Math.floor(date/1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Utils;
|
module.exports = Utils;
|
||||||
Loading…
Reference in New Issue
Block a user