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 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: 25000, 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: { fields: 0, error: ex.message } }; throw ex; } } } module.exports = NomerogramProvider;