From 2f660cb0e41f1b9f516912982592ed3dfbbd9ba0 Mon Sep 17 00:00:00 2001 From: Promises <21245147+Pr0mises@users.noreply.github.com> Date: Tue, 10 Mar 2026 23:42:43 +0100 Subject: [PATCH 1/7] add shape translation --- .../immoscout/immoscout-web-translator.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/services/immoscout/immoscout-web-translator.js b/lib/services/immoscout/immoscout-web-translator.js index fb35eff4..b04e2b09 100644 --- a/lib/services/immoscout/immoscout-web-translator.js +++ b/lib/services/immoscout/immoscout-web-translator.js @@ -161,9 +161,9 @@ export function convertWebToMobile(webUrl) { } } - if (segments.includes('shape')) { + /*if (segments.includes('shape')) { throw new Error('Shape is currently not supported using Immoscout'); - } + }*/ const { query: rawParams } = queryString.parseUrl(webUrl, { arrayFormat: 'comma' }); const webParams = Object.fromEntries( @@ -172,18 +172,27 @@ export function convertWebToMobile(webUrl) { const geocodes = `/${segments.slice(2, segments.length - 1).join('/')}`; const isRadius = segments.includes('radius'); + const isShape = segments.includes('shape'); const mobileParams = { - searchType: isRadius ? 'radius' : 'region', + searchType: isRadius ? 'radius' : isShape ? 'shape' : 'region', realestatetype: realType, - ...(isRadius ? {} : { geocodes }), + ...(isRadius || isShape ? {} : { geocodes }), ...additionalParamsFromWebPath, }; + if (isShape && webParams.shape) { + const browserShape = webParams.shape; + const normalized = browserShape.replace(/\.\./g, '==').replace(/\./g, '='); + const polyline = Buffer.from(normalized, 'base64').toString('utf-8'); + mobileParams.shape = polyline; // Raw polyline for Mobile API + } + if (webParams.geocoordinates) { mobileParams.geocoordinates = webParams.geocoordinates; } for (const [key, val] of Object.entries(webParams)) { + if (key === 'shape') continue; if (key === 'equipment') { const items = [].concat(val).flatMap((v) => `${v}`.split(',')); const currentEquipmentParams = mobileParams[PARAM_NAME_MAP[key]]; From 9a4f963c776bde8fe6f61a7abf05fe722b4cde7e Mon Sep 17 00:00:00 2001 From: Promises <21245147+Pr0mises@users.noreply.github.com> Date: Tue, 10 Mar 2026 23:43:52 +0100 Subject: [PATCH 2/7] add shape test url --- test/services/immoscout/testdata.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/services/immoscout/testdata.json b/test/services/immoscout/testdata.json index 9b371239..620c9135 100644 --- a/test/services/immoscout/testdata.json +++ b/test/services/immoscout/testdata.json @@ -18,5 +18,9 @@ "rentHouse": { "url": "https://www.immobilienscout24.de/Suche/de/nordrhein-westfalen/duesseldorf/haus-mieten?enteredFrom=one_step_search", "type": "houserent" + }, + "buyHouseWithShape": { + "url": "https://www.immobilienscout24.de/Suche/shape/haus-kaufen?shape=aW9yfkhfa3htQXJgUGlnYEBmekhte3BAcXNAfWBsQGNyQ2lkUHVvbEB3eX5Ab25WYn5Fa2BLaGRQY29FaGtTfEhme3xBdHBEdHFMamlHbmdRfHhMcmxPeHlWYnpS&price=-600000.0&ground=240.0-&enteredFrom=result_list", + "type": "housebuy" } } From bf9c7349be10cdccf69e32708ef88e5e259827f9 Mon Sep 17 00:00:00 2001 From: Promises <21245147+Pr0mises@users.noreply.github.com> Date: Tue, 10 Mar 2026 23:47:34 +0100 Subject: [PATCH 3/7] add shape url test --- .../immoscout/immoscout-web-translator.test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/services/immoscout/immoscout-web-translator.test.js b/test/services/immoscout/immoscout-web-translator.test.js index 9f963e20..90b59182 100644 --- a/test/services/immoscout/immoscout-web-translator.test.js +++ b/test/services/immoscout/immoscout-web-translator.test.js @@ -21,6 +21,18 @@ describe('#immoscout-mobile URL conversion', () => { expect(actualMobileUrl).to.equal(expectedMobileUrl); }); + // Test shape URL conversion + it('should convert a full web URL with shape to mobile URL', () => + { + const webUrl = + 'https://www.immobilienscout24.de/Suche/shape/haus-kaufen?shape=aW9yfkhfa3htQXJgUGlnYEBmekhte3BAcXNAfWBsQGNyQ2lkUHVvbEB3eX5Ab25WYn5Fa2BLaGRQY29FaGtTfEhme3xBdHBEdHFMamlHbmdRfHhMcmxPeHlWYnpS&price=-600000.0&ground=240.0-&enteredFrom=result_list'; + const expectedMobileUrl = + 'https://api.mobile.immobilienscout24.de/search/list?price=-600000.0&realestatetype=housebuy&searchType=shape&shape=ior~H_kxmAr%60Pig%60%40fzHm%7Bp%40qs%40%7D%60l%40crCidPuol%40wy~%40onVb~Ek%60KhdPcoEhkS%7CHf%7B%7CAtpDtqLjiGngQ%7CxLrlOxyVbzR'; + + const actualMobileUrl = convertWebToMobile(webUrl); + expect(actualMobileUrl).to.equal(expectedMobileUrl); + }); + // Test URL conversion of web-only SEO path it('should convert a SEO web path to the correct query params', () => { const webUrl = 'https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-mit-balkon-mieten?equipment=garden'; From febd80f220fd1776b94573ea9ef3ef6276b4543b Mon Sep 17 00:00:00 2001 From: Promises <21245147+Pr0mises@users.noreply.github.com> Date: Tue, 10 Mar 2026 23:49:03 +0100 Subject: [PATCH 4/7] remove immoscout shape warning --- .../components/provider/ProviderMutator.jsx | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx b/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx index db9d96b5..007f696f 100644 --- a/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx +++ b/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx @@ -141,21 +141,7 @@ export default function ProviderMutator({

)} - Warning} - style={{ marginBottom: '1rem' }} - description={ -
-

- Currently, our Immoscout implementation does not support drawing shapes on a map. Use a radius instead. -

-
- } - /> - +