Files
fredy/lib/provider/kleinanzeigen.js

59 lines
2.1 KiB
JavaScript
Raw 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 { buildHash, isOneOf } from '../utils.js';
import checkIfListingIsActive from '../services/listings/listingActiveTester.js';
let appliedBlackList = [];
let appliedBlacklistedDistricts = [];
2018-01-20 20:23:27 +01:00
function normalize(o) {
2025-07-23 08:47:26 +02:00
const size = o.size || '--- m²';
const id = buildHash(o.id, o.price);
const link = `https://www.kleinanzeigen.de${o.link}`;
return Object.assign(o, { id, size, link });
2018-01-20 20:23:27 +01:00
}
2018-01-20 20:23:27 +01:00
function applyBlacklist(o) {
const titleNotBlacklisted = !isOneOf(o.title, appliedBlackList);
const descNotBlacklisted = !isOneOf(o.description, appliedBlackList);
2025-07-23 08:47:26 +02:00
const isBlacklistedDistrict =
appliedBlacklistedDistricts.length === 0 ? false : isOneOf(o.description, appliedBlacklistedDistricts);
2025-07-23 08:47:26 +02:00
return o.title != null && !isBlacklistedDistrict && titleNotBlacklisted && descNotBlacklisted;
2018-01-20 20:23:27 +01:00
}
const config = {
2025-07-23 08:47:26 +02:00
url: null,
crawlContainer: '#srchrslt-adtable .ad-listitem ',
//sort by date is standard oO
sortByDateParam: null,
waitForSelector: 'body',
crawlFields: {
id: '.aditem@data-adid | int',
price: '.aditem-main--middle--price-shipping--price | removeNewline | trim',
size: '.aditem-main .text-module-end | removeNewline | trim',
title: '.aditem-main .text-module-begin a | removeNewline | trim',
link: '.aditem-main .text-module-begin a@href | removeNewline | trim',
description: '.aditem-main .aditem-main--middle--description | removeNewline | trim',
address: '.aditem-main--top--left | trim | removeNewline',
image: 'img@src',
2025-07-23 08:47:26 +02:00
},
normalize: normalize,
filter: applyBlacklist,
activeTester: checkIfListingIsActive,
2018-01-20 20:23:27 +01:00
};
export const metaInformation = {
2025-07-23 08:47:26 +02:00
name: 'Ebay Kleinanzeigen',
baseUrl: 'https://www.kleinanzeigen.de/',
id: 'kleinanzeigen',
};
export const init = (sourceConfig, blacklist, blacklistedDistricts) => {
2025-07-23 08:47:26 +02:00
config.enabled = sourceConfig.enabled;
config.url = sourceConfig.url;
appliedBlacklistedDistricts = blacklistedDistricts || [];
appliedBlackList = blacklist || [];
};
2025-07-23 08:47:26 +02:00
export { config };