Files
fredy/lib/provider/immoswp.js

77 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2025-12-11 10:40:55 +01:00
/*
* Copyright (c) 2026 by Christian Kellner.
2025-12-11 10:40:55 +01:00
* Licensed under Apache-2.0 with Commons Clause and Attribution/Naming Clause
*/
import { isOneOf, buildHash } from '../utils.js';
import checkIfListingIsActive from '../services/listings/listingActiveTester.js';
import { extractNumber } from '../utils/extract-number.js';
/** @import { ParsedListing } from '../types/listing.js' */
/** @import { ProviderConfig } from '../types/providerConfig.js' */
2024-06-12 14:15:21 +02:00
let appliedBlackList = [];
2024-06-12 14:15:21 +02:00
/**
* @param {any} o
* @returns {ParsedListing}
*/
function normalize(o) {
2025-03-31 18:38:18 +02:00
const immoId = o.id.substring(o.id.indexOf('-') + 1, o.id.length);
const link = `https://immo.swp.de/immobilien/${immoId}`;
const id = buildHash(immoId, o.price);
return {
id,
link,
title: o.title || '',
price: extractNumber(o.price),
size: extractNumber(o.size),
rooms: extractNumber(o.rooms),
address: o.address,
image: o.image,
description: undefined,
};
}
2024-06-12 14:15:21 +02:00
/**
* @param {ParsedListing} o
* @returns {boolean}
*/
function applyBlacklist(o) {
const titleNotBlacklisted = !isOneOf(o.title, appliedBlackList);
const descNotBlacklisted = !isOneOf(o.description, appliedBlackList);
2025-03-31 18:38:18 +02:00
return titleNotBlacklisted && descNotBlacklisted;
}
2024-06-12 14:15:21 +02:00
/** @type {ProviderConfig} */
const config = {
2026-04-12 09:21:08 +02:00
requiredFieldNames: ['id', 'link', 'title', 'price', 'size', 'rooms', 'address', 'image', 'description'],
2025-03-31 18:38:18 +02:00
url: null,
crawlContainer: '.js-serp-item',
sortByDateParam: 's=most_recently_updated_first',
waitForSelector: 'body',
crawlFields: {
id: '.js-bookmark-btn@data-id',
price: 'div.align-items-start div:first-child | trim',
size: 'div.align-items-start div:nth-child(3) | trim',
rooms: 'div.align-items-start div:nth-child(2) | trim',
address: '.js-bookmark-btn@data-address',
2025-03-31 18:38:18 +02:00
title: '.js-item-title-link@title | trim',
link: '.ci-search-result__link@href',
image: 'img@src',
2025-03-31 18:38:18 +02:00
},
normalize: normalize,
filter: applyBlacklist,
activeTester: checkIfListingIsActive,
};
export const init = (sourceConfig, blacklist) => {
2025-03-31 18:38:18 +02:00
config.enabled = sourceConfig.enabled;
config.url = sourceConfig.url;
appliedBlackList = blacklist || [];
};
export const metaInformation = {
2025-03-31 18:38:18 +02:00
name: 'Immo Südwest Presse',
baseUrl: 'https://immo.swp.de/',
id: 'immoswp',
};
2025-03-31 18:38:18 +02:00
export { config };