From a9fb52d7e31863ea44b448baaa99b52d8892ae71 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Wed, 16 Dec 2020 00:27:29 +0300 Subject: [PATCH] ads --- data_providers/nomerogram.js | 47 ++++++++++++++++++++++++++++++++++++ package-lock.json | 11 +++++++++ package.json | 1 + routes/vehicles.js | 14 +++++++++-- utils.js | 7 ++++++ 5 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 data_providers/nomerogram.js diff --git a/data_providers/nomerogram.js b/data_providers/nomerogram.js new file mode 100644 index 0000000..00c08e0 --- /dev/null +++ b/data_providers/nomerogram.js @@ -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; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2d66ae9..a0af04c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "node-fetch": "^2.6.1", "node-html-parser": "^2.0.0", "pubnub": "^4.29.6", + "utf8": "^3.0.0", "uuid": "^8.3.0" }, "devDependencies": { @@ -2945,6 +2946,11 @@ "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5505,6 +5511,11 @@ "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index d75e861..a7777d9 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "node-fetch": "^2.6.1", "node-html-parser": "^2.0.0", "pubnub": "^4.29.6", + "utf8": "^3.0.0", "uuid": "^8.3.0" }, "devDependencies": { diff --git a/routes/vehicles.js b/routes/vehicles.js index c3fce95..8260a76 100644 --- a/routes/vehicles.js +++ b/routes/vehicles.js @@ -6,6 +6,7 @@ const AvtocodProvider = require('../data_providers/avtocod'); const Vin01Provider = require('../data_providers/vin01'); const { regions } = require('../data_providers/constants'); const RsaProvider = require('../data_providers/rsa'); +const NomerogramProvider = require('../data_providers/nomerogram'); const Utils = require('../utils'); const makeError = error => ({ success: false, error }); @@ -34,7 +35,10 @@ router.post('/check', async (req, res) => { } else { 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; 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; // 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; let result = await RsaProvider.checkOsago(number, vin, date, token); - console.log(result); let collection = req.db.collection('vehicles'); let filter = number ? { number } : { vin1: vin }; diff --git a/utils.js b/utils.js index 68013be..34bd0b0 100644 --- a/utils.js +++ b/utils.js @@ -65,6 +65,13 @@ class Utils { let regex = new RegExp('[' + Object.keys(cyrillic_to_latin).join('') + ']', 'g'); 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; \ No newline at end of file