61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
const crypto = require('crypto');
|
|
const fetch = require('node-fetch');
|
|
const Utils = require('../utils');
|
|
const utf8 = require('utf8');
|
|
const DebugInfo = require('../models/DebugInfo');
|
|
|
|
const baseUrl = 'https://www.nomerogram.ru/api/v1.1';
|
|
|
|
const secretSuffix = 'queivoo1ieNgae2e';
|
|
const appId = 'p15';
|
|
const deviceId = '01b854631cb28e175ffbcccf6114acc3';
|
|
const from = 'search';
|
|
const userAgent = 'Nomerogram/2.18 (iPhone; iOS 13.7; Scale/2.00)';
|
|
|
|
class NomerogramProvider {
|
|
static async getGroups(number) {
|
|
try {
|
|
let timestamp = Math.floor(Date.now() / 1000);
|
|
let secretSource = appId + number + deviceId + from + timestamp + secretSuffix;
|
|
|
|
let hash = crypto.createHash('sha256');
|
|
hash.update(secretSource);
|
|
let secret = hash.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), {
|
|
timeout: 5000,
|
|
headers: { 'User-Agent': userAgent }
|
|
});
|
|
let json = await result.json();
|
|
|
|
if(!json.success) {
|
|
console.log('Nomerogram error: ', json.message);
|
|
throw Error(json.message);
|
|
//return [];
|
|
}
|
|
|
|
console.log('Nomerogram found ads: ', json.data.groups.length);
|
|
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)
|
|
};
|
|
});
|
|
} catch(ex) {
|
|
console.log('Nomerogram error: ', ex.message);
|
|
ex.debugInfo = { nomerogram: DebugInfo.fromError(ex.message) };
|
|
throw ex;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = NomerogramProvider; |