@gasolinaradar/repsol-collector
v1.0.1
Published
Collector for the Repsol fuel station finder (Spain) returning normalized fuel stations for enrichment
Maintainers
Readme
@gasolinaradar/repsol-collector
Node.js collector para el buscador de estaciones de servicio de Repsol (España). Devuelve un array de estaciones normalizado, listo para enriquecer las fuentes primarias (p. ej. MITERD) vía matching.enrichStations.
Collector de Node.js para el buscador de estaciones de servicio de Repsol (España). Devuelve un array de estaciones normalizado listo para enriquecer las fuentes primarias (p. ej. MITERD) mediante matching.enrichStations.
Fuente de datos / Data source
El buscador de Repsol es una SPA (AEM) en https://www.repsol.es/buscador-eess-y-puntos-de-recarga/.
Cada entidad (estaciones, recarga, oficinas) se carga mediante un único POST por lote al endpoint interno:
POST https://www.repsol.es/bin/repsol/searchmiddleware/station-search.json
?action=search&idioma=ES&tipo=1Referer: https://www.repsol.es/buscador-eess-y-puntos-de-recarga/, Origin: https://www.repsol.es.
action=searchdevuelve todas las estaciones de un tipo en una sola respuesta.tipo=1= España (default);tipo=2= Portugal;tipo=1,2= ambos.- Respuesta:
{ eess: { count, items: [...] }, recarga: {...}, ... }. Las estaciones de servicio soneess.items(~3147 estaciones en España). Cada item incluyeid,nombre,x/y(lon/lat),direccion,cp,localidad,provincia,pais,horario/horariosyproductos[]conprecio/fecha.
⚠️ Es un endpoint interno de una SPA: funciona con una llamada HTTP cruda (verificado con
axios), pero al ser un endpoint no documentado puede cambiar de forma o aplicar rate-limiting. Si en producción empezara a devolver 4xx, se puede reutilizar una sesión o cookies de navegador obtenidas previamente.
npm install @gasolinaradar/repsol-collectorQuick start / Inicio rápido
const { createRepsolCollector } = require('@gasolinaradar/repsol-collector');
const collector = createRepsolCollector({ logger: console });
const stations = await collector.fetch({ reportProgress: (p) => {} });
// Opcional: apuntar a otro host/endpoint o cambiar el tipo (país).
const collector = createRepsolCollector({
logger: console,
searchUrl: 'https://www.repsol.es/bin/repsol/searchmiddleware/station-search.json',
tipo: '1', // '1' España, '2' Portugal, '1,2' ambos
});Contract / Contrato
{ name: 'repsol', country: 'ES', fetch(context) }Cada estación normalizada sigue la forma compartida de @gasolinaradar:
{
source: 'repsol', country: 'ES', sourceStationId,
name, address, municipality, province, postalCode,
schedule, services,
location: { type: 'Point', coordinates: [lon, lat] },
prices, lastUpdated,
}location.coordinateses GeoJSON[lon, lat](de los camposx/ydel payload).pricesmapea los combustibles con precio a{ fuelSlug: amount }(p. ej.{ efitec95: 1.799, diéle: 1.949 }), tolerando decimales con coma española.scheduleusa el textohorarioo formatea el arrayhorariospor día.servicesrecoge la disponibilidad de productos del item (productos[].producto).lastUpdatedse toma de la fecha de precio más reciente, si existe.
Tests
npm test
npm run test:live # opcional; golpea el endpoint real de RepsolLegal / Legal
Los datos pertenecen a Repsol y se proporcionan "tal cual".
License / Licencia
MIT. See LICENSE.
