4 Commits

Author SHA1 Message Date
Jan Novak
fd3991f8d6 Remove regen_map.py references from Dockerfile and README
All checks were successful
Build and Push / build (push) Successful in 6s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 10:44:08 +01:00
Jan Novak
27a7834eb6 Reliability improvements: retry logic, validation, ratings sync
Some checks failed
Build and Push / build (push) Failing after 4s
- Add 3-attempt retry with exponential backoff to Sreality, Realingo,
  Bezrealitky, and PSN scrapers (CityHome and iDNES already had it)
- Add shared validate_listing() in scraper_stats.py; all 6 scrapers now
  validate GPS bounds, price, area, and required fields before output
- Wire ratings to server /api/ratings on page load (merge with
  localStorage) and save (async POST); ratings now persist across
  browsers and devices
- Namespace JS hash IDs as {source}_{id} to prevent rating collisions
  between listings from different portals with the same numeric ID
- Replace manual Czech diacritic table with unicodedata.normalize()
  in merge_and_map.py for correct deduplication of all edge cases
- Correct README schedule docs: every 4 hours, not twice daily

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 10:36:37 +01:00
57a9f6f21a Add NEW badge for recent listings, text input for price filter, cleanup
- New listings (≤1 day) show yellow NEW badge instead of oversized marker
- Price filter changed from dropdown to text input (max 14M)
- Cap price filter at 14M in JS
- Remove unused regen_map.py
- Remove unused HTMLParser import in scrape_idnes.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 21:14:48 +01:00
0ea31d3013 Remove tracked generated/data files and fix map link on status page
- Remove byty_*.json, mapa_bytu.html, .DS_Store and settings.local.json from git tracking
  (already in .gitignore, files kept locally)
- Fix "Otevřít mapu" link on scraper status page: / → /mapa_bytu.html

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 20:42:35 +01:00
23 changed files with 259 additions and 4670 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1,31 +0,0 @@
{
"permissions": {
"allow": [
"WebFetch(domain:github.com)",
"WebFetch(domain:www.sreality.cz)",
"WebFetch(domain:webscraping.pro)",
"WebFetch(domain:raw.githubusercontent.com)",
"Bash(python3:*)",
"Bash(open:*)",
"WebFetch(domain:www.realingo.cz)",
"WebFetch(domain:api.realingo.cz)",
"Bash(curl:*)",
"Bash(grep:*)",
"WebFetch(domain:www.realitni-pes.cz)",
"WebFetch(domain:www.bezrealitky.cz)",
"WebFetch(domain:apify.com)",
"WebFetch(domain:www.bezrealitky.com)",
"WebFetch(domain:reality.idnes.cz)",
"Bash(# Final checks: robots.txt and response time for rate limiting clues curl -s -L -H \"\"User-Agent: Mozilla/5.0 \\(Windows NT 10.0; Win64; x64\\) AppleWebKit/537.36 \\(KHTML, like Gecko\\) Chrome/120.0.0.0 Safari/537.36\"\" \"\"https://reality.idnes.cz/robots.txt\"\")",
"WebFetch(domain:www.cityhome.cz)",
"WebFetch(domain:www.psn.cz)",
"WebFetch(domain:www.city-home.cz)",
"WebFetch(domain:psn.cz)",
"WebFetch(domain:api.psn.cz)",
"Bash(done)",
"Bash(# Final summary: count total units across all projects\n# Get the total count from the unitsCountData we already extracted\necho \"\"From unitsCountData on /prodej page:\"\"\necho \"\" type_id 0 \\(Prodej bytů a ateliérů\\): 146\"\"\necho \"\" type_id 1 \\(Prodej komerčních nemovitostí\\): 14\"\"\necho \"\" type_id 2 \\(Pronájem bytů\\): 3\"\"\necho \"\" type_id 3 \\(Pronájem komerčních nemovitostí\\): 48\"\"\necho \"\"\"\"\necho \"\"Total for-sale projects: 19\"\"\necho \"\"\"\"\necho \"\"Disposition counts from the data:\"\"\npython3 << 'PYEOF'\n# Extract disposition counts from prodej page\nimport re\n\nwith open\\('/tmp/psn_prodej_p1.html', 'r', encoding='utf-8'\\) as f:\n html = f.read\\(\\)\n\n# Find disposition data\nidx = html.find\\('\\\\\\\\\"disposition\\\\\\\\\":['\\)\nif idx >= 0:\n chunk = html[idx:idx+2000].replace\\('\\\\\\\\\"', '\"'\\)\n # Extract name and count pairs\n import re\n pairs = re.findall\\(r'\"name\":\"\\([^\"]+\\)\",\"count\":\\(\\\\d+\\)', chunk\\)\n for name, count in pairs:\n print\\(f\" {name}: {count}\"\\)\nPYEOF)",
"Bash(ls:*)",
"Bash(chmod:*)"
]
}
}

2
.gitignore vendored
View File

@@ -1,6 +1,8 @@
.vscode/ .vscode/
__pycache__/ __pycache__/
.DS_Store
byty_*.json byty_*.json
*.json *.json
*.log *.log
mapa_bytu.html

View File

@@ -83,10 +83,6 @@ Merges all `byty_*.json` files into `byty_merged.json` and generates `mapa_bytu.
**Deduplication logic:** Two listings are considered duplicates if they share the same normalized street name + price + area. PSN and CityHome have priority during dedup (loaded first), so their listings are kept over duplicates from other portals. **Deduplication logic:** Two listings are considered duplicates if they share the same normalized street name + price + area. PSN and CityHome have priority during dedup (loaded first), so their listings are kept over duplicates from other portals.
### `regen_map.py`
Regenerates the map from existing `byty_sreality.json` data without re-scraping. Fetches missing area values from the Sreality API, fixes URLs, and re-applies the area filter. Useful for tweaking map output after data has already been collected.
## Interactive map (`mapa_bytu.html`) ## Interactive map (`mapa_bytu.html`)
The generated map is a standalone HTML file using Leaflet.js with CARTO basemap tiles. Features: The generated map is a standalone HTML file using Leaflet.js with CARTO basemap tiles. Features:
@@ -151,7 +147,7 @@ The project includes a Docker setup for unattended operation with a cron-based s
│ PID 1: python3 -m http.server :8080 │ │ PID 1: python3 -m http.server :8080 │
│ serves /app/data/ │ │ serves /app/data/ │
│ │ │ │
│ crond: runs run_all.sh at 06:00/18:00 │ crond: runs run_all.sh every 4 hours
│ Europe/Prague timezone │ │ Europe/Prague timezone │
│ │ │ │
│ /app/ -- scripts (.py, .sh) │ │ /app/ -- scripts (.py, .sh) │
@@ -160,7 +156,7 @@ The project includes a Docker setup for unattended operation with a cron-based s
└─────────────────────────────────────────┘ └─────────────────────────────────────────┘
``` ```
On startup, the HTTP server starts immediately. The initial scrape runs in the background. Subsequent cron runs update data in-place twice daily at 06:00 and 18:00 CET/CEST. On startup, the HTTP server starts immediately. The initial scrape runs in the background. Subsequent cron runs update data in-place every 4 hours.
### Quick start ### Quick start
@@ -201,14 +197,13 @@ Validation targets run scrapers with `--max-pages 1 --max-properties 10` for a f
├── scrape_psn.py # PSN scraper ├── scrape_psn.py # PSN scraper
├── scrape_cityhome.py # CityHome scraper ├── scrape_cityhome.py # CityHome scraper
├── merge_and_map.py # Merge all sources + generate final map ├── merge_and_map.py # Merge all sources + generate final map
├── regen_map.py # Regenerate map from cached Sreality data
├── run_all.sh # Orchestrator script (runs all scrapers + merge) ├── run_all.sh # Orchestrator script (runs all scrapers + merge)
├── mapa_bytu.html # Generated interactive map (output) ├── mapa_bytu.html # Generated interactive map (output)
├── Makefile # Docker management + validation shortcuts ├── Makefile # Docker management + validation shortcuts
├── build/ ├── build/
│ ├── Dockerfile # Container image definition (python:3.13-alpine) │ ├── Dockerfile # Container image definition (python:3.13-alpine)
│ ├── entrypoint.sh # Container entrypoint (HTTP server + cron + initial scrape) │ ├── entrypoint.sh # Container entrypoint (HTTP server + cron + initial scrape)
│ ├── crontab # Cron schedule (06:00 and 18:00 CET) │ ├── crontab # Cron schedule (every 4 hours)
│ └── CONTAINER.md # Container-specific documentation │ └── CONTAINER.md # Container-specific documentation
└── .gitignore # Ignores byty_*.json, __pycache__, .vscode └── .gitignore # Ignores byty_*.json, __pycache__, .vscode
``` ```

View File

@@ -11,7 +11,7 @@ WORKDIR /app
COPY scrape_and_map.py scrape_realingo.py scrape_bezrealitky.py \ COPY scrape_and_map.py scrape_realingo.py scrape_bezrealitky.py \
scrape_idnes.py scrape_psn.py scrape_cityhome.py \ scrape_idnes.py scrape_psn.py scrape_cityhome.py \
merge_and_map.py regen_map.py generate_status.py scraper_stats.py \ merge_and_map.py generate_status.py scraper_stats.py \
run_all.sh server.py ./ run_all.sh server.py ./
COPY build/crontab /etc/crontabs/root COPY build/crontab /etc/crontabs/root

View File

@@ -1,488 +0,0 @@
[
{
"hash_id": 957149,
"name": "Prodej bytu 3+kk 85 m²",
"price": 13499900,
"price_formatted": "13 499 900 Kč",
"locality": "Hořejší nábřeží, Praha - Smíchov",
"lat": 50.0723994,
"lon": 14.4102987,
"disposition": "3+kk",
"floor": 3,
"area": 85,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/957149-nabidka-prodej-bytu-horejsi-nabrezi-hlavni-mesto-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 994376,
"name": "Prodej bytu 3+1 81 m²",
"price": 11000000,
"price_formatted": "11 000 000 Kč",
"locality": "Volutová, Praha - Stodůlky",
"lat": 50.050274,
"lon": 14.338419380808,
"disposition": "3+1",
"floor": 7,
"area": 81,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/994376-nabidka-prodej-bytu-volutova-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 993725,
"name": "Prodej bytu 3+kk 83 m²",
"price": 13190000,
"price_formatted": "13 190 000 Kč",
"locality": "Práčská, Praha - Záběhlice",
"lat": 50.0531887,
"lon": 14.5100177,
"disposition": "3+kk",
"floor": 2,
"area": 83,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/993725-nabidka-prodej-bytu-pracska-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 972406,
"name": "Prodej bytu 3+kk 83 m²",
"price": 10490000,
"price_formatted": "10 490 000 Kč",
"locality": "Na Výrovně, Praha - Stodůlky",
"lat": 50.0396067,
"lon": 14.3167022,
"disposition": "3+kk",
"floor": 2,
"area": 83,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/972406-nabidka-prodej-bytu-na-vyrovne",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 972686,
"name": "Prodej bytu 3+kk 80 m²",
"price": 11950000,
"price_formatted": "11 950 000 Kč",
"locality": "Dělnická, Praha - Holešovice",
"lat": 50.1034183,
"lon": 14.4549189,
"disposition": "3+kk",
"floor": 6,
"area": 80,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/972686-nabidka-prodej-bytu-delnicka-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 993441,
"name": "Prodej bytu 4+1 85 m²",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Brixiho, Praha - Břevnov",
"lat": 50.0901839,
"lon": 14.3569292,
"disposition": "4+1",
"floor": 3,
"area": 85,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/993441-nabidka-prodej-bytu-brixiho-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 955010,
"name": "Prodej bytu 3+kk 70 m²",
"price": 11900000,
"price_formatted": "11 900 000 Kč",
"locality": "Břeclavská, Praha - Kyje",
"lat": 50.0951045,
"lon": 14.5454237,
"disposition": "3+kk",
"floor": 2,
"area": 70,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/955010-nabidka-prodej-bytu-breclavska-hlavni-mesto-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 967142,
"name": "Prodej bytu 3+kk 78 m²",
"price": 11648000,
"price_formatted": "11 648 000 Kč",
"locality": "Na Míčánkách, Praha - Vršovice",
"lat": 50.0713284,
"lon": 14.4638722,
"disposition": "3+kk",
"floor": 6,
"area": 78,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/967142-nabidka-prodej-bytu-na-micankach",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 981890,
"name": "Prodej bytu 3+1 84 m²",
"price": 12980000,
"price_formatted": "12 980 000 Kč",
"locality": "Novákových, Praha - Libeň",
"lat": 50.103273,
"lon": 14.4746894,
"disposition": "3+1",
"floor": 2,
"area": 84,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/981890-nabidka-prodej-bytu-novakovych-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 991217,
"name": "Prodej bytu 3+kk 71 m²",
"price": 11490000,
"price_formatted": "11 490 000 Kč",
"locality": "Kolbenova, Praha - Vysočany",
"lat": 50.1113213,
"lon": 14.5106858,
"disposition": "3+kk",
"floor": 3,
"area": 71,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/991217-nabidka-prodej-bytu-kolbenova-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 955977,
"name": "Prodej bytu 4+kk 75 m²",
"price": 10363000,
"price_formatted": "10 363 000 Kč",
"locality": "Karla Guta, Praha - Uhříněves",
"lat": 50.03017,
"lon": 14.5940072,
"disposition": "4+kk",
"floor": 4,
"area": 75,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/955977-nabidka-prodej-bytu-karla-guta",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 868801,
"name": "Prodej bytu 3+kk 109 m²",
"price": 7299000,
"price_formatted": "7 299 000 Kč",
"locality": "Pod Karlovem, Praha - Vinohrady",
"lat": 50.0676313,
"lon": 14.432498,
"disposition": "3+kk",
"floor": 5,
"area": 109,
"building_type": "Cihlová",
"ownership": "Družstevní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/868801-nabidka-prodej-bytu-pod-karlovem-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 868795,
"name": "Prodej bytu 3+kk 106 m²",
"price": 6299000,
"price_formatted": "6 299 000 Kč",
"locality": "Pod Karlovem, Praha - Vinohrady",
"lat": 50.0676313,
"lon": 14.432498,
"disposition": "3+kk",
"floor": 2,
"area": 106,
"building_type": "Cihlová",
"ownership": "Družstevní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/868795-nabidka-prodej-bytu-pod-karlovem-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 980187,
"name": "Prodej bytu 3+kk 75 m²",
"price": 12600000,
"price_formatted": "12 600 000 Kč",
"locality": "Jeseniova, Praha - Žižkov",
"lat": 50.0866062,
"lon": 14.4586719,
"disposition": "3+kk",
"floor": 7,
"area": 75,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/980187-nabidka-prodej-bytu-jeseniova-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 990183,
"name": "Prodej bytu 3+kk 86 m²",
"price": 10385000,
"price_formatted": "10 385 000 Kč",
"locality": "Ke Tvrzi, Praha - Královice",
"lat": 50.0390519,
"lon": 14.63862,
"disposition": "3+kk",
"floor": 2,
"area": 86,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/990183-nabidka-prodej-bytu-ke-tvrzi-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 981278,
"name": "Prodej bytu 3+kk 70 m²",
"price": 11890000,
"price_formatted": "11 890 000 Kč",
"locality": "Argentinská, Praha - Holešovice",
"lat": 50.1026043,
"lon": 14.4435365,
"disposition": "3+kk",
"floor": 3,
"area": 70,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/981278-nabidka-prodej-bytu-argentinska-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 974557,
"name": "Prodej bytu 4+kk 94 m²",
"price": 13249900,
"price_formatted": "13 249 900 Kč",
"locality": "V Dolině, Praha - Michle",
"lat": 50.0579963,
"lon": 14.4682887,
"disposition": "4+kk",
"floor": 8,
"area": 94,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/974557-nabidka-prodej-bytu-v-doline-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 989862,
"name": "Prodej bytu 3+kk 73 m²",
"price": 12790000,
"price_formatted": "12 790 000 Kč",
"locality": "Vrázova, Praha - Smíchov",
"lat": 50.0711312,
"lon": 14.4076652,
"disposition": "3+kk",
"floor": 3,
"area": 73,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/989862-nabidka-prodej-bytu-vrazova-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 989817,
"name": "Prodej bytu 3+kk 88 m²",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Miroslava Hajna, Praha - Letňany",
"lat": 50.1406487,
"lon": 14.5207541,
"disposition": "3+kk",
"floor": 2,
"area": 88,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/989817-nabidka-prodej-bytu-miroslava-hajna-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 988498,
"name": "Prodej bytu 3+1 75 m²",
"price": 11250000,
"price_formatted": "11 250 000 Kč",
"locality": "5. května, Praha - Nusle",
"lat": 50.0604096,
"lon": 14.4326302,
"disposition": "3+1",
"floor": 4,
"area": 75,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/988498-nabidka-prodej-bytu-5-kvetna-praha",
"source": "bezrealitky",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 965526,
"name": "Prodej bytu 3+kk 77 m²",
"price": 11890000,
"price_formatted": "11 890 000 Kč",
"locality": "Vinohradská, Praha - Strašnice",
"lat": 50.0776726,
"lon": 14.4870072,
"disposition": "3+kk",
"floor": 16,
"area": 77,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/965526-nabidka-prodej-bytu-vinohradska-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 924811,
"name": "Prodej bytu 3+kk 75 m²",
"price": 13390000,
"price_formatted": "13 390 000 Kč",
"locality": "Waltariho, Praha - Hloubětín",
"lat": 50.1076717,
"lon": 14.5248559,
"disposition": "3+kk",
"floor": 4,
"area": 75,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/924811-nabidka-prodej-bytu-waltariho-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 985859,
"name": "Prodej bytu 3+1 80 m²",
"price": 9000000,
"price_formatted": "9 000 000 Kč",
"locality": "Staňkova, Praha - Háje",
"lat": 50.0377128,
"lon": 14.5311557,
"disposition": "3+1",
"floor": 2,
"area": 80,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/985859-nabidka-prodej-bytu-stankova-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 985583,
"name": "Prodej bytu 3+kk 76 m²",
"price": 10850000,
"price_formatted": "10 850 000 Kč",
"locality": "Boloňská, Praha - Horní Měcholupy",
"lat": 50.047328,
"lon": 14.5565277,
"disposition": "3+kk",
"floor": 4,
"area": 76,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/985583-nabidka-prodej-bytu-bolonska-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 981178,
"name": "Prodej bytu 4+kk 86 m²",
"price": 11990000,
"price_formatted": "11 990 000 Kč",
"locality": "Sušilova, Praha - Uhříněves",
"lat": 50.032081,
"lon": 14.5885148,
"disposition": "4+kk",
"floor": 2,
"area": 86,
"building_type": "SKELET",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/981178-nabidka-prodej-bytu-susilova-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 973216,
"name": "Prodej bytu 4+1 82 m²",
"price": 11357000,
"price_formatted": "11 357 000 Kč",
"locality": "Nad Kapličkou, Praha - Strašnice",
"lat": 50.0839509,
"lon": 14.4904493,
"disposition": "4+1",
"floor": 2,
"area": 82,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/973216-nabidka-prodej-bytu-nad-kaplickou-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 976276,
"name": "Prodej bytu 3+kk 75 m²",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Svornosti, Praha - Smíchov",
"lat": 50.0673284,
"lon": 14.4095087,
"disposition": "3+kk",
"floor": 2,
"area": 75,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/976276-nabidka-prodej-bytu-svornosti-praha",
"source": "bezrealitky",
"image": ""
},
{
"hash_id": 950787,
"name": "Prodej bytu 3+kk 70 m²",
"price": 9999000,
"price_formatted": "9 999 000 Kč",
"locality": "Sečská, Praha - Strašnice",
"lat": 50.071191,
"lon": 14.5035501,
"disposition": "3+kk",
"floor": 3,
"area": 70,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.bezrealitky.cz/nemovitosti-byty-domy/950787-nabidka-prodej-bytu-secska-praha",
"source": "bezrealitky",
"image": ""
}
]

View File

@@ -1,42 +0,0 @@
[
{
"hash_id": "cityhome_na-vaclavce-34_Byt A2.3",
"name": "Prodej bytu 3+1, 99 m² — Na Václavce 34",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Na Václavce 34, Praha 5",
"lat": 50.0652858,
"lon": 14.3931318,
"disposition": "3+1",
"floor": 2,
"area": 99.1,
"building_type": "Cihlová",
"ownership": "neuvedeno",
"url": "https://www.city-home.cz/projekty/na-vaclavce-34/nabidka-nemovitosti/byt-a23",
"source": "cityhome",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "cityhome_na-vaclavce-34_Byt A3.2",
"name": "Prodej bytu 3+1, 95 m² — Na Václavce 34",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Na Václavce 34, Praha 5",
"lat": 50.0652858,
"lon": 14.3931318,
"disposition": "3+1",
"floor": 3,
"area": 95.6,
"building_type": "Cihlová",
"ownership": "neuvedeno",
"url": "https://www.city-home.cz/projekty/na-vaclavce-34/nabidka-nemovitosti/byt-a32",
"source": "cityhome",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
}
]

View File

@@ -1,302 +0,0 @@
[
{
"hash_id": "699c14efa272ce2cb70fdaa9",
"name": "Prodej bytu 3+1 114 m²",
"price": 12990000,
"price_formatted": "12 990 000 Kč",
"locality": "Ortenovo náměstí, Praha 7 - Holešovice, okres Praha",
"lat": 50.1090652,
"lon": 14.4472586,
"disposition": "3+1",
"floor": 6,
"area": 114,
"building_type": "1905",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-7-ortenovo-namesti/699c14efa272ce2cb70fdaa9/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "69a0108318a49f688f07c503",
"name": "Prodej bytu 4+kk 73 m²",
"price": 9490000,
"price_formatted": "9 490 000 Kč",
"locality": "Hlavní, Praha 4 - Záběhlice",
"lat": 50.047243965755754,
"lon": 14.486543203609836,
"disposition": "4+kk",
"floor": 9,
"area": 73,
"building_type": "1961",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-4-hlavni/69a0108318a49f688f07c503/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "699c78a809e67614380916ba",
"name": "Prodej bytu 3+1 85 m²",
"price": 13350000,
"price_formatted": "13 350 000 Kč",
"locality": "Rejskova, Praha 2 - Vinohrady",
"lat": 50.06661305,
"lon": 14.43407117,
"disposition": "3+1",
"floor": 5,
"area": 85,
"building_type": "Cihlová",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-2-rejskova/699c78a809e67614380916ba/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "69a03719a7891063a20f14e4",
"name": "Prodej bytu 3+kk 74 m²",
"price": 12890000,
"price_formatted": "12 890 000 Kč",
"locality": "U michelského mlýna, Praha 4 - Michle, okres Praha",
"lat": 50.0542667,
"lon": 14.4510382,
"disposition": "3+kk",
"floor": 7,
"area": 74,
"building_type": "2009",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-4-u-michelskeho-mlyna/69a03719a7891063a20f14e4/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "69708aa7667a2fa3780f8a16",
"name": "Prodej bytu 3+1 71 m²",
"price": 8350000,
"price_formatted": "8 350 000 Kč",
"locality": "Hlavní, Praha 4 - Záběhlice",
"lat": 50.047489,
"lon": 14.490741,
"disposition": "3+1",
"floor": 9,
"area": 71,
"building_type": "Cihlová",
"ownership": "družstevní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-4-hlavni/69708aa7667a2fa3780f8a16/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "6960e610326c8e2aa50b0e25",
"name": "Prodej bytu 3+kk 80 m²",
"price": 12490000,
"price_formatted": "12 490 000 Kč",
"locality": "Krnkova, Praha",
"lat": 50.056095198944,
"lon": 14.467427477184,
"disposition": "3+kk",
"floor": 6,
"area": 80,
"building_type": "2020",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-krnkova/6960e610326c8e2aa50b0e25/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "68c4c9a1345e0bffba03d7e0",
"name": "Prodej bytu 3+kk 112 m²",
"price": 10990000,
"price_formatted": "10 990 000 Kč",
"locality": "U Prefy, Praha 8 - Ďáblice",
"lat": 50.1445055631,
"lon": 14.4834831086,
"disposition": "3+kk",
"floor": 2,
"area": 112,
"building_type": "Cihlová",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-8-u-prefy/68c4c9a1345e0bffba03d7e0/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "69a00a243781d89dcc03c8bb",
"name": "Prodej bytu 3+1 78 m²",
"price": 9499000,
"price_formatted": "9 499 000 Kč",
"locality": "U kombinátu, Praha 10 - Strašnice",
"lat": 50.076586,
"lon": 14.501454,
"disposition": "3+1",
"floor": 4,
"area": 78,
"building_type": "Cihlová",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-10-u-kombinatu/69a00a243781d89dcc03c8bb/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "64edfa5ce31ee12cdb097cf9",
"name": "Prodej bytu 3+kk 74 m²",
"price": 11634400,
"price_formatted": "11 634 400 Kč",
"locality": "Jáchymovská, Praha 5 - Řeporyje",
"lat": 50.03524802,
"lon": 14.31407393,
"disposition": "3+kk",
"floor": 6,
"area": 74,
"building_type": "Smíšená",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-13-jachymovska/64edfa5ce31ee12cdb097cf9/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "696e54943b8203c996011547",
"name": "Prodej bytu 4+kk 84 m²",
"price": 11990000,
"price_formatted": "11 990 000 Kč",
"locality": "Karla Guta, Praha 10 - Uhříněves",
"lat": 50.030126,
"lon": 14.59409,
"disposition": "4+kk",
"floor": 5,
"area": 84,
"building_type": "Smíšená",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-22-karla-guta/696e54943b8203c996011547/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "689986fe58c2bcbb110a517d",
"name": "Prodej bytu 4+kk 93 m²",
"price": 11008200,
"price_formatted": "11 008 200 Kč",
"locality": "Kuttelwascherova, Praha 9 - Černý Most",
"lat": 50.104792349,
"lon": 14.579679032,
"disposition": "4+kk",
"floor": 5,
"area": 93,
"building_type": "Skeletová",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-14-kuttelwascherova/689986fe58c2bcbb110a517d/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "6859393a57fe2ea99e09a067",
"name": "Prodej bytu 3+1 88 m²",
"price": 9350000,
"price_formatted": "9 350 000 Kč",
"locality": "Cementářská, Praha 5 - Lochkov",
"lat": 50.0034203152,
"lon": 14.3523860807,
"disposition": "3+1",
"floor": 3,
"area": 88,
"building_type": "Cihlová",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-16-cementarska/6859393a57fe2ea99e09a067/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "6992d0c6dffd9162130a26e8",
"name": "Prodej bytu 3+kk 69 m²",
"price": 11853625,
"price_formatted": "11 853 625 Kč",
"locality": "Nekonečného, Praha 5 - Stodůlky",
"lat": 50.042287368666926,
"lon": 14.30696945790677,
"disposition": "3+kk",
"floor": 4,
"area": 69,
"building_type": "Dřevěná",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-13-nekonecneho/6992d0c6dffd9162130a26e8/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "690c2c7b22e38ce1f50ec0c6",
"name": "Prodej bytu 3+1 74 m²",
"price": 12691991,
"price_formatted": "12 691 991 Kč",
"locality": "Svitákova, Praha 5 - Stodůlky",
"lat": 50.0480552778,
"lon": 14.3019416667,
"disposition": "3+1",
"floor": 8,
"area": 74,
"building_type": "Cihlová",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-13-svitakova/690c2c7b22e38ce1f50ec0c6/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": "68d6a0afbe5e2703bd0b1981",
"name": "Prodej bytu 3+kk 82 m²",
"price": 12390000,
"price_formatted": "12 390 000 Kč",
"locality": "Plzeňská, Praha 5 - Košíře",
"lat": 50.071718,
"lon": 14.389139,
"disposition": "3+kk",
"floor": 4,
"area": 82,
"building_type": "Smíšená",
"ownership": "osobní",
"url": "https://reality.idnes.cz/detail/prodej/byt/praha-5-plzenska/68d6a0afbe5e2703bd0b1981/",
"source": "idnes",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +0,0 @@
[
{
"hash_id": "8941",
"name": "Prodej bytu 3+kk, 102 m² — JITRO",
"price": 13994000,
"price_formatted": "13 994 000 Kč",
"locality": "Litevská 1174/8, Praha 10",
"lat": 50.0729,
"lon": 14.4767,
"disposition": "3+kk",
"floor": 2,
"area": 102.7,
"building_type": "neuvedeno",
"ownership": "osobní",
"url": "https://psn.cz/prodej/ubytovaci-jednotka-3-kk-litevska-praha-10-vrsovice-lit4219",
"source": "psn",
"image": "",
"scraped_at": "2026-02-25"
}
]

View File

@@ -1,158 +0,0 @@
[
{
"hash_id": 24516572,
"name": "Prodej bytu Atypický None m²",
"price": 7509000,
"price_formatted": "7 509 000 Kč",
"locality": "Praha, 130 00",
"lat": 50.087602,
"lon": 14.470882,
"disposition": "Atypický",
"floor": null,
"area": null,
"building_type": "neuvedeno",
"ownership": "neuvedeno",
"url": "https://www.realingo.cz/prodej/byt-ostatni-byty-praha-130-00/24516572",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 24516564,
"name": "Prodej bytu Atypický None m²",
"price": 4600000,
"price_formatted": "4 600 000 Kč",
"locality": "Praha, 147 00",
"lat": 50.036745,
"lon": 14.415436,
"disposition": "Atypický",
"floor": null,
"area": null,
"building_type": "neuvedeno",
"ownership": "neuvedeno",
"url": "https://www.realingo.cz/prodej/byt-ostatni-byty-praha-147-00/24516564",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 24516481,
"name": "Prodej bytu Atypický None m²",
"price": 7890000,
"price_formatted": "7 890 000 Kč",
"locality": "Praha, 160 00",
"lat": 50.112102,
"lon": 14.37767,
"disposition": "Atypický",
"floor": null,
"area": null,
"building_type": "neuvedeno",
"ownership": "neuvedeno",
"url": "https://www.realingo.cz/prodej/byt-ostatni-byty-praha-160-00/24516481",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 24516474,
"name": "Prodej bytu Atypický None m²",
"price": 400000,
"price_formatted": "400 000 Kč",
"locality": "Praha, 110 00",
"lat": 50.087334,
"lon": 14.421111,
"disposition": "Atypický",
"floor": null,
"area": null,
"building_type": "neuvedeno",
"ownership": "neuvedeno",
"url": "https://www.realingo.cz/prodej/byt-ostatni-byty-praha-110-00/24516474",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 24516425,
"name": "Prodej bytu Atypický None m²",
"price": 5500000,
"price_formatted": "5 500 000 Kč",
"locality": "Praha, 169 00",
"lat": 50.084959,
"lon": 14.367027,
"disposition": "Atypický",
"floor": null,
"area": null,
"building_type": "neuvedeno",
"ownership": "neuvedeno",
"url": "https://www.realingo.cz/prodej/byt-ostatni-byty-praha-169-00/24516425",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 24516357,
"name": "Prodej bytu Atypický None m²",
"price": 11990000,
"price_formatted": "11 990 000 Kč",
"locality": "Praha, 155 21",
"lat": 50.061933,
"lon": 14.278193,
"disposition": "Atypický",
"floor": null,
"area": null,
"building_type": "neuvedeno",
"ownership": "neuvedeno",
"url": "https://www.realingo.cz/prodej/byt-ostatni-byty-praha-155-21/24516357",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 24515963,
"name": "Prodej bytu 3+kk 83 m²",
"price": 11390000,
"price_formatted": "11 390 000 Kč",
"locality": "Kytlická, Praha",
"lat": 50.1251431182,
"lon": 14.5077027612,
"disposition": "3+kk",
"floor": 4,
"area": 83,
"building_type": "WIREFRAME",
"ownership": "Osobní",
"url": "https://www.realingo.cz/prodej/byt-3+kk-kytlicka-praha/24515963",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-25"
},
{
"hash_id": 24515884,
"name": "Prodej bytu 3+kk 81 m²",
"price": 13000000,
"price_formatted": "13 000 000 Kč",
"locality": "Hlučkova 869, Praha",
"lat": 50.142303781599,
"lon": 14.522362316941,
"disposition": "3+kk",
"floor": 5,
"area": 81,
"building_type": "OTHER",
"ownership": "Osobní",
"url": "https://www.realingo.cz/prodej/byt-3+kk-hluckova-869-praha/24515884",
"source": "realingo",
"image": "",
"scraped_at": "2026-02-25"
}
]

View File

@@ -1,844 +0,0 @@
[
{
"hash_id": 2212697420,
"name": "Prodej bytu 3+kk 72 m²",
"price": 11597281,
"price_formatted": "11 597 281 Kč",
"locality": "Marie Podvalové, Praha - Čakovice",
"lat": 50.157696,
"lon": 14.519159,
"disposition": "3+kk",
"floor": 2,
"area": 72,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-marie-podvalove/2212697420",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/kBfrbpoeNBFLmuEg8FriINk/3911.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-25"
},
{
"hash_id": 3719308108,
"name": "Prodej bytu 3+kk 72 m²",
"price": 12863000,
"price_formatted": "12 863 000 Kč",
"locality": "Toufarova, Praha 5 - Stodůlky",
"lat": 50.042961,
"lon": 14.312009,
"disposition": "3+kk",
"floor": 3,
"area": 72,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-stodulky-toufarova/3719308108",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_D/kY1K2LlXQCEs3VE7BF4VZQX/e29c.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1837527884,
"name": "Prodej bytu 3+kk 73 m² (Jednopodlažní)",
"price": 12790000,
"price_formatted": "12 790 000 Kč",
"locality": "Vrázova, Praha - Smíchov",
"lat": 50.071224,
"lon": 14.407872,
"disposition": "3+kk",
"floor": 3,
"area": 73,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-smichov-vrazova/1837527884",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/nPXMbbUsvqW7e6HoBFuXCRZ/a9bd.png?fl=res,400,300,3|shr,,20|jpg,90"
},
{
"hash_id": 151528268,
"name": "Prodej bytu 3+kk 86 m²",
"price": 11390000,
"price_formatted": "11 390 000 Kč",
"locality": "Spojovací, Praha",
"lat": 50.101852,
"lon": 14.486118,
"disposition": "3+kk",
"floor": 2,
"area": 86,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha--spojovaci/151528268",
"image": "https://d18-a.sdn.cz/d_18/c_img_of_C/kPxr1WDRoIBXSQV6LE550j7/1607.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-25"
},
{
"hash_id": 1909416780,
"name": "Prodej bytu 3+kk 71 m² (Jednopodlažní)",
"price": 12550000,
"price_formatted": "12 550 000 Kč",
"locality": "Hindlova, Praha 9 - Vysočany",
"lat": 50.110931,
"lon": 14.519487,
"disposition": "3+kk",
"floor": 3,
"area": 71,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-hindlova/1909416780",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_B/nPVpfd5QLLDoMo7DJhFyicrF/b128.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 2090386252,
"name": "Prodej bytu 3+kk 71 m² (Jednopodlažní)",
"price": 11990000,
"price_formatted": "11 990 000 Kč",
"locality": "Hindlova, Praha 9 - Vysočany",
"lat": 50.110931,
"lon": 14.519487,
"disposition": "3+kk",
"floor": 9,
"area": 71,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-hindlova/2090386252",
"image": "https://d18-a.sdn.cz/d_18/c_img_oe_B/nO1Ur3YPjB17k9miElAvH7/f738.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1652388428,
"name": "Prodej bytu 3+kk 72 m²",
"price": 12793080,
"price_formatted": "12 793 080 Kč",
"locality": "Kolbenova, Praha 9 - Vysočany",
"lat": 50.11219,
"lon": 14.506794,
"disposition": "3+kk",
"floor": 2,
"area": 72,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-kolbenova/1652388428",
"image": "https://d18-a.sdn.cz/d_18/c_img_oX_C/kb9Yg2GWeC36sVf5CpMXaz/5362.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3911689036,
"name": "Prodej bytu 3+kk 84 m²",
"price": 12614240,
"price_formatted": "12 614 240 Kč",
"locality": "Strašnická, Praha 10 - Záběhlice",
"lat": 50.058334,
"lon": 14.513746,
"disposition": "3+kk",
"floor": 2,
"area": 84,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-zabehlice-strasnicka/3911689036",
"image": "https://d18-a.sdn.cz/d_18/c_img_oa_D/nO7kYQIzllD73rqCuJDkZI2p/67e2.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 938877772,
"name": "Prodej bytu 3+kk 99 m²",
"price": 12990000,
"price_formatted": "12 990 000 Kč",
"locality": "Čeljabinská, Praha 10 - Vršovice",
"lat": 50.069641,
"lon": 14.470198,
"disposition": "3+kk",
"floor": 3,
"area": 99,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vrsovice-celjabinska/938877772",
"image": "https://d18-a.sdn.cz/d_18/c_img_p7_D/kBfrbpoeNBLdvLCneFodIxL/21cc.jpeg?fl=res,400,300,3|shr,,20|jpg,90"
},
{
"hash_id": 1021510476,
"name": "Prodej bytu 3+kk 80 m²",
"price": 12690000,
"price_formatted": "12 690 000 Kč",
"locality": "Novotného, Praha 5 - Hlubočepy",
"lat": 50.027798,
"lon": 14.365065,
"disposition": "3+kk",
"floor": 5,
"area": 80,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-hlubocepy-novotneho/1021510476",
"image": "https://d18-a.sdn.cz/d_18/c_img_p7_B/kOzkBkwYBTDPt7SN3RFeuwx2/31bb.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3939726156,
"name": "Prodej bytu 3+kk 91 m²",
"price": 10480000,
"price_formatted": "10 480 000 Kč",
"locality": "Danielova, Praha 9 - Čakovice",
"lat": 50.153698,
"lon": 14.530779,
"disposition": "3+kk",
"floor": 2,
"area": 91,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-danielova/3939726156",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/nPXMbbUsvqB8gfpFRBFqbRqp/042a.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 21418828,
"name": "Prodej bytu 3+kk 95 m²",
"price": 11650000,
"price_formatted": "11 650 000 Kč",
"locality": "Na Harfě, Praha 9 - Vysočany",
"lat": 50.102989,
"lon": 14.501802,
"disposition": "3+kk",
"floor": 6,
"area": 95,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-na-harfe/21418828",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/kY1K2LlXQBsPCGDivF180IZ/5caf.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3226313292,
"name": "Prodej bytu 3+kk 83 m²",
"price": 13500000,
"price_formatted": "13 500 000 Kč",
"locality": "Na Neklance, Praha 5 - Smíchov",
"lat": 50.060715,
"lon": 14.401836,
"disposition": "3+kk",
"floor": 4,
"area": 83,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-smichov-na-neklance/3226313292",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/kBfrbpoeND2I1YDy2Fq7ErU/6389.jpeg?fl=res,400,300,3|shr,,20|jpg,90"
},
{
"hash_id": 1671439692,
"name": "Prodej bytu 3+kk 77 m²",
"price": 12556524,
"price_formatted": "12 556 524 Kč",
"locality": "Marie Podvalové, Praha - Čakovice",
"lat": 50.157696,
"lon": 14.519159,
"disposition": "3+kk",
"floor": 3,
"area": 77,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-marie-podvalove/1671439692",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/nPXMbbUsvqW7e6HmhFuWvTy/67cb.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3596645196,
"name": "Prodej bytu 3+kk 88 m²",
"price": 13499000,
"price_formatted": "13 499 000 Kč",
"locality": "Plzeňská, Praha 5 - Stodůlky",
"lat": 50.061039,
"lon": 14.306672,
"disposition": "3+kk",
"floor": 2,
"area": 88,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-stodulky-plzenska/3596645196",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_B/kY1K2LlXQD1lSJBBqFwbfKY/2e73.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1313456972,
"name": "Prodej bytu 3+kk 87 m²",
"price": 3641309,
"price_formatted": "3 641 309 Kč",
"locality": "Praha 9",
"lat": 50.106956,
"lon": 14.510207,
"disposition": "3+kk",
"floor": 5,
"area": 87,
"building_type": "Smíšená",
"ownership": "Družstevní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-praha-9-/1313456972",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_B/kY1K2LlXQBsPCGXMFvI8II/9010.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3330433868,
"name": "Prodej bytu 3+kk 93 m²",
"price": 11890000,
"price_formatted": "11 890 000 Kč",
"locality": "Kříženeckého náměstí, Praha 5 - Hlubočepy",
"lat": 50.03138,
"lon": 14.391757,
"disposition": "3+kk",
"floor": 2,
"area": 93,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-hlubocepy-krizeneckeho-namesti/3330433868",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLChvUCFgIF2b8p9/bffb.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3248993100,
"name": "Prodej bytu 3+kk 106 m² (Jednopodlažní)",
"price": 12490000,
"price_formatted": "12 490 000 Kč",
"locality": "Na Plískavě, Praha 10 - Hostivař",
"lat": 50.051746,
"lon": 14.526683,
"disposition": "3+kk",
"floor": 2,
"area": 106,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-hostivar-na-pliskave/3248993100",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLBPLz5G96F4N0ox/1ed0.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1137623884,
"name": "Prodej bytu 3+kk 71 m²",
"price": 12318349,
"price_formatted": "12 318 349 Kč",
"locality": "Praha 9",
"lat": 50.106956,
"lon": 14.510207,
"disposition": "3+kk",
"floor": 4,
"area": 71,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-praha-9-/1137623884",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_B/nPVpfd5QLLksKHbwFvjCd6/56ac.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3621479244,
"name": "Prodej bytu 3+kk 79 m² (Mezonet)",
"price": 12900000,
"price_formatted": "12 900 000 Kč",
"locality": "Bulharská, Praha 10 - Vršovice",
"lat": 50.071842,
"lon": 14.46282,
"disposition": "3+kk",
"floor": 5,
"area": 79,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vrsovice-bulharska/3621479244",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_B/kY1K2LlXQBsPCGCYTFziI73/ff9c.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3802198860,
"name": "Prodej bytu 3+kk 82 m²",
"price": 11133000,
"price_formatted": "11 133 000 Kč",
"locality": "K Vinoři, Praha - Kbely",
"lat": 50.133003,
"lon": 14.56198,
"disposition": "3+kk",
"floor": 2,
"area": 82,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-kbely-k-vinori/3802198860",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/kY1K2LlXQBdLY8CyQF0JORJ/7bca.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3672994636,
"name": "Prodej bytu 3+kk 81 m²",
"price": 12390000,
"price_formatted": "12 390 000 Kč",
"locality": "Stochovská, Praha 6 - Ruzyně",
"lat": 50.082985,
"lon": 14.311815,
"disposition": "3+kk",
"floor": 3,
"area": 81,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-ruzyne-stochovska/3672994636",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLD53UiFNrF2fBro/c20c.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3540804428,
"name": "Prodej bytu 3+kk 86 m²",
"price": 10990000,
"price_formatted": "10 990 000 Kč",
"locality": "Žateckých, Praha 4 - Nusle",
"lat": 50.060452,
"lon": 14.434322,
"disposition": "3+kk",
"floor": 3,
"area": 86,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-nusle-zateckych/3540804428",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLDqzReFdYF2mM3n/96cd.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 4070581580,
"name": "Prodej bytu 3+kk 77 m²",
"price": 12207113,
"price_formatted": "12 207 113 Kč",
"locality": "Marie Podvalové, Praha - Čakovice",
"lat": 50.157696,
"lon": 14.519159,
"disposition": "3+kk",
"floor": 2,
"area": 77,
"building_type": "Skeletová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-marie-podvalove/4070581580",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/kBfrbpoeNBFLmuFzPFuWw0w/0867.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 2185458508,
"name": "Prodej bytu 3+kk 76 m²",
"price": 11978000,
"price_formatted": "11 978 000 Kč",
"locality": "Matoušova, Praha - Smíchov",
"lat": 50.074284,
"lon": 14.405826,
"disposition": "3+kk",
"floor": 2,
"area": 76,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-smichov-matousova/2185458508",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLD53UiGQ6F3vZse/37db.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 975307596,
"name": "Prodej bytu 3+kk 75 m²",
"price": 11550000,
"price_formatted": "11 550 000 Kč",
"locality": "K Lahovské, Praha 5 - Lochkov",
"lat": 50.003479,
"lon": 14.362226,
"disposition": "3+kk",
"floor": 2,
"area": 75,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-lochkov-k-lahovske/975307596",
"image": "https://d18-a.sdn.cz/d_18/c_img_p7_D/kBfrbpoeNBP53ED7tFobUOy/4b5c.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1196299084,
"name": "Prodej bytu 3+kk 90 m²",
"price": 13450000,
"price_formatted": "13 450 000 Kč",
"locality": "Mantovská, Praha 10 - Horní Měcholupy",
"lat": 50.041126,
"lon": 14.569748,
"disposition": "3+kk",
"floor": 3,
"area": 90,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-horni-mecholupy-mantovska/1196299084",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_A/nPXMbbUsvqB6axWJHGFuUhM9/ab40.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 65700684,
"name": "Prodej bytu 3+kk 77 m²",
"price": 12391000,
"price_formatted": "12 391 000 Kč",
"locality": "Kutnohorská, Praha 10 - Dolní Měcholupy",
"lat": 50.057732,
"lon": 14.561535,
"disposition": "3+kk",
"floor": 2,
"area": 77,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-dolni-mecholupy-kutnohorska/65700684",
"image": "https://d18-a.sdn.cz/d_18/c_img_og_C/nDJ4VEZEqxmIDGjIFPUKAS/9490.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3704697676,
"name": "Prodej bytu 3+kk 72 m²",
"price": 8000000,
"price_formatted": "8 000 000 Kč",
"locality": "Litevská, Praha 10 - Vršovice",
"lat": 50.072536,
"lon": 14.476557,
"disposition": "3+kk",
"floor": 5,
"area": 72,
"building_type": "Cihlová",
"ownership": "Družstevní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vrsovice-litevska/3704697676",
"image": "https://d18-a.sdn.cz/d_18/c_img_of_A/nOztZkD4ZlC2Y2EU6E0MiZv/15fc.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 961934156,
"name": "Prodej bytu 3+kk 71 m²",
"price": 13220749,
"price_formatted": "13 220 749 Kč",
"locality": "Vršní, Praha 8 - Kobylisy",
"lat": 50.124489,
"lon": 14.453209,
"disposition": "3+kk",
"floor": 2,
"area": 71,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+kk/praha-kobylisy-vrsni/961934156",
"image": "https://d18-a.sdn.cz/d_18/c_img_oc_D/nO0bgvR9rXB3JbECjvEL5uOS/a3c9.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 868311884,
"name": "Prodej bytu 3+1 85 m² (Jednopodlažní)",
"price": 13350000,
"price_formatted": "13 350 000 Kč",
"locality": "Rejskova, Praha 2 - Vinohrady",
"lat": 50.066612,
"lon": 14.43407,
"disposition": "3+1",
"floor": 2,
"area": 85,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-vinohrady-rejskova/868311884",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLEA4WVFjPF2n27n/5da6.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 793797452,
"name": "Prodej bytu 3+1 97 m²",
"price": 9290000,
"price_formatted": "9 290 000 Kč",
"locality": "Oldřichova, Praha 2 - Nusle",
"lat": 50.065617,
"lon": 14.428337,
"disposition": "3+1",
"floor": 5,
"area": 97,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-nusle-oldrichova/793797452",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLbHLYGD3F3FBWE/510b.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1071539020,
"name": "Prodej bytu 3+1 99 m²",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Na Václavce, Praha 5 - Smíchov",
"lat": 50.065289,
"lon": 14.393119,
"disposition": "3+1",
"floor": 2,
"area": 99,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-smichov-na-vaclavce/1071539020",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/kY1K2LlXQB7HUzD4bF2mEWg/29a9.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 977601356,
"name": "Prodej bytu 3+1 71 m²",
"price": 8350000,
"price_formatted": "8 350 000 Kč",
"locality": "Hlavní, Praha 4 - Záběhlice",
"lat": 50.047489,
"lon": 14.490741,
"disposition": "3+1",
"floor": 6,
"area": 71,
"building_type": "Cihlová",
"ownership": "Družstevní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-zabehlice-hlavni/977601356",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/kY1K2LlXQBdLY89XF4Rua9/f98c.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 2792387404,
"name": "Prodej bytu 3+1 94 m² (Mezonet)",
"price": 10990000,
"price_formatted": "10 990 000 Kč",
"locality": "Spojařů, Praha 5 - Zbraslav",
"lat": 49.964233,
"lon": 14.395434,
"disposition": "3+1",
"floor": 3,
"area": 94,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-zbraslav-spojaru/2792387404",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/kY1K2LlXQDnuVLD5PF2jXiq/d294.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3881198412,
"name": "Prodej bytu 3+1 77 m² (Jednopodlažní)",
"price": 9499000,
"price_formatted": "9 499 000 Kč",
"locality": "U kombinátu, Praha 10 - Strašnice",
"lat": 50.076588,
"lon": 14.501454,
"disposition": "3+1",
"floor": 4,
"area": 77,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-strasnice-u-kombinatu/3881198412",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLbHLYHCQF4N96R/5bd2.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1180791628,
"name": "Prodej bytu 3+1 70 m² (Jednopodlažní)",
"price": 8880000,
"price_formatted": "8 880 000 Kč",
"locality": "V předpolí, Praha 10 - Strašnice",
"lat": 50.070919,
"lon": 14.482954,
"disposition": "3+1",
"floor": 2,
"area": 70,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-strasnice-v-predpoli/1180791628",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLDqk1BGpqF368WL/336a.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3469083468,
"name": "Prodej bytu 3+1 97 m² (Jednopodlažní)",
"price": 11099000,
"price_formatted": "11 099 000 Kč",
"locality": "Školní, Praha 4 - Braník",
"lat": 50.037449,
"lon": 14.413369,
"disposition": "3+1",
"floor": 2,
"area": 97,
"building_type": "Smíšená",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-branik-skolni/3469083468",
"image": "https://d18-a.sdn.cz/d_18/c_img_p7_C/nDJ4VEZEqCaOxZXb4Fir3Ja/a5fd.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 3475837772,
"name": "Prodej bytu 3+1 77 m²",
"price": 9400000,
"price_formatted": "9 400 000 Kč",
"locality": "Žitavského, Praha - Zbraslav",
"lat": 49.968777,
"lon": 14.394235,
"disposition": "3+1",
"floor": 2,
"area": 77,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-zbraslav-zitavskeho/3475837772",
"image": "https://d18-a.sdn.cz/d_18/c_img_og_B/kOzkBkwYBTBCGZ9ErEFK4fVz/a27d.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 77820748,
"name": "Prodej bytu 3+1 80 m² (Jednopodlažní)",
"price": 9990000,
"price_formatted": "9 990 000 Kč",
"locality": "U Svépomoci, Praha - Nusle",
"lat": 50.054306,
"lon": 14.441881,
"disposition": "3+1",
"floor": 2,
"area": 80,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-nusle-u-svepomoci/77820748",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLEA4WVEEhF0vEN4/6425.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 2609607500,
"name": "Prodej bytu 3+1 84 m² (Jednopodlažní)",
"price": 13300000,
"price_formatted": "13 300 000 Kč",
"locality": "Bubenské nábřeží, Praha 7 - Holešovice",
"lat": 50.098339,
"lon": 14.447381,
"disposition": "3+1",
"floor": 3,
"area": 84,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-holesovice-bubenske-nabrezi/2609607500",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLChvUCDwJF0SNOF/fc50.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 2119304012,
"name": "Prodej bytu 3+1 70 m² (Jednopodlažní)",
"price": 8490000,
"price_formatted": "8 490 000 Kč",
"locality": "Plzeňská, Praha 5 - Smíchov",
"lat": 50.070713,
"lon": 14.37893,
"disposition": "3+1",
"floor": 2,
"area": 70,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-smichov-plzenska/2119304012",
"image": "https://d18-a.sdn.cz/d_18/c_img_p7_B/kOzkBkwYBTDPt7SOGcFfM6Tu/dbaa.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 266232652,
"name": "Prodej bytu 3+1 96 m²",
"price": 13490000,
"price_formatted": "13 490 000 Kč",
"locality": "Na Václavce, Praha 5 - Smíchov",
"lat": 50.065289,
"lon": 14.393119,
"disposition": "3+1",
"floor": 3,
"area": 96,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-smichov-na-vaclavce/266232652",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLDoMo7HHbF2mEnR/2364.jpeg?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1547395660,
"name": "Prodej bytu 3+1 85 m² (Mezonet)",
"price": 10750000,
"price_formatted": "10 750 000 Kč",
"locality": "Březová, Praha 8 - Kobylisy",
"lat": 50.135719,
"lon": 14.477155,
"disposition": "3+1",
"floor": 2,
"area": 85,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-kobylisy-brezova/1547395660",
"image": "https://d18-a.sdn.cz/d_18/c_img_oX_E/kb9Yg2GWeDo8QnqrCwThxx/b96e.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
},
{
"hash_id": 1954308940,
"name": "Prodej bytu 3+1 91 m²",
"price": 13500000,
"price_formatted": "13 500 000 Kč",
"locality": "Biskupcova, Praha 3 - Žižkov",
"lat": 50.089592,
"lon": 14.470283,
"disposition": "3+1",
"floor": 2,
"area": 91,
"building_type": "Cihlová",
"ownership": "Osobní",
"url": "https://www.sreality.cz/detail/prodej/byt/3+1/praha-zizkov-biskupcova/1954308940",
"image": "https://d18-a.sdn.cz/d_18/c_img_p8_C/nPVpfd5QLLDqzReDNNFzuek8/dd6c.png?fl=res,400,300,3|shr,,20|jpg,90",
"scraped_at": "2026-02-26",
"first_seen": "2026-02-26",
"last_changed": "2026-02-26"
}
]

View File

@@ -1,693 +0,0 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Byty v Praze — mapa (96 bytů)</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: system-ui, -apple-system, sans-serif; }
#map { width: 100%; height: 100vh; }
.heart-icon { background: none !important; border: none !important; }
.star-icon { background: none !important; border: none !important; }
.rate-btn:hover { background: #f0f0f0 !important; }
.rate-btn.active-fav { background: #FFF9C4 !important; border-color: #FFC107 !important; }
.rate-btn.active-rej { background: #FFEBEE !important; border-color: #F44336 !important; }
@keyframes pulse-glow {
0% { box-shadow: 0 0 4px 2px rgba(255, 193, 7, 0.4); }
50% { box-shadow: 0 0 10px 5px rgba(255, 193, 7, 0.7); }
100% { box-shadow: 0 0 4px 2px rgba(255, 193, 7, 0.4); }
}
.marker-favorite { animation: pulse-glow 2s ease-in-out infinite; border-radius: 50%; }
.heart-icon-fav svg path { stroke: gold !important; stroke-width: 2.5 !important; filter: drop-shadow(0 0 4px rgba(255,193,7,0.7)); }
.heart-icon-rej { opacity: 0.4 !important; filter: grayscale(1); }
.reject-overlay { background: none !important; border: none !important; pointer-events: none !important; }
@keyframes pulse-new {
0% { stroke-opacity: 1; stroke-width: 3px; r: 11; }
50% { stroke-opacity: 0.4; stroke-width: 6px; r: 12; }
100% { stroke-opacity: 1; stroke-width: 3px; r: 11; }
}
.marker-new { animation: pulse-new 2s ease-in-out infinite; }
.info-panel {
position: absolute; top: 10px; right: 10px; z-index: 1000;
background: white; padding: 16px; border-radius: 10px;
box-shadow: 0 2px 12px rgba(0,0,0,0.15); max-width: 260px;
font-size: 13px; line-height: 1.5;
transition: transform 0.3s ease, opacity 0.3s ease;
}
.info-panel.collapsed {
transform: translateX(calc(100% + 20px));
opacity: 0; pointer-events: none;
}
.panel-open-btn {
position: absolute; top: 10px; right: 10px; z-index: 1001;
width: 40px; height: 40px; border-radius: 8px;
background: white; border: none; cursor: pointer;
box-shadow: 0 2px 12px rgba(0,0,0,0.15);
font-size: 20px; display: flex; align-items: center; justify-content: center;
transition: opacity 0.3s ease;
}
.panel-open-btn.hidden { opacity: 0; pointer-events: none; }
.panel-close-btn {
position: absolute; top: 8px; right: 8px;
width: 28px; height: 28px; border-radius: 6px;
background: none; border: 1px solid #ddd; cursor: pointer;
font-size: 16px; display: flex; align-items: center; justify-content: center;
color: #888;
}
.panel-close-btn:hover { background: #f0f0f0; color: #333; }
.info-panel h2 { font-size: 16px; margin-bottom: 8px; }
.info-panel .stats { color: #666; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid #eee; }
.filter-section { margin-top: 10px; padding-top: 10px; border-top: 1px solid #eee; }
.filter-section label { display: flex; align-items: center; gap: 6px; margin: 3px 0; cursor: pointer; }
.price-band { cursor: pointer; transition: background 0.12s; }
.price-band:hover { background: #f0f0f0; }
.price-band.active { border-color: #333 !important; background: #e8f0fe; }
.price-band.dimmed { opacity: 0.35; }
.filter-section input[type="checkbox"] { accent-color: #1976D2; }
#floor-filter { margin-top: 8px; }
#floor-filter select { width: 100%; padding: 4px; border-radius: 4px; border: 1px solid #ccc; }
.status-link { display: block; margin-top: 10px; padding-top: 10px; border-top: 1px solid #eee; text-align: center; }
.status-link a { color: #1976D2; text-decoration: none; font-size: 12px; }
@media (max-width: 600px) {
.info-panel { max-width: calc(100vw - 60px); right: 10px; }
.info-panel.collapsed { transform: translateX(calc(100% + 20px)); }
.panel-close-btn { top: 6px; right: 6px; }
}
</style>
</head>
<body>
<div id="map"></div>
<button class="panel-open-btn hidden" id="panel-open-btn" onclick="togglePanel()"></button>
<div class="info-panel" id="info-panel">
<button class="panel-close-btn" id="panel-close-btn" onclick="togglePanel()"></button>
<h2>Byty v Praze</h2>
<div class="stats">
<div>Celkem: <b id="visible-count">96</b> bytů</div>
<div>Cena: 400 000 Kč — 13 994 000 Kč</div>
<div>Průměr: 11 284 590 Kč</div>
</div>
<div style="margin-bottom:4px;font-size:12px;color:#555;font-weight:600;">Cena / m²:</div><div class="price-band" data-color="#1565C0" onclick="toggleColorFilter('#1565C0')" style="display:flex;align-items:center;gap:6px;margin:2px 0;padding:2px 4px;border-radius:4px;border:2px solid transparent;"><span style="width:14px;height:14px;border-radius:50%;background:#1565C0;display:inline-block;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,0.3);flex-shrink:0;"></span><span>< 110 000 /m²</span></div><div class="price-band" data-color="#42A5F5" onclick="toggleColorFilter('#42A5F5')" style="display:flex;align-items:center;gap:6px;margin:2px 0;padding:2px 4px;border-radius:4px;border:2px solid transparent;"><span style="width:14px;height:14px;border-radius:50%;background:#42A5F5;display:inline-block;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,0.3);flex-shrink:0;"></span><span>110 130 000 Kč/m²</span></div><div class="price-band" data-color="#66BB6A" onclick="toggleColorFilter('#66BB6A')" style="display:flex;align-items:center;gap:6px;margin:2px 0;padding:2px 4px;border-radius:4px;border:2px solid transparent;"><span style="width:14px;height:14px;border-radius:50%;background:#66BB6A;display:inline-block;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,0.3);flex-shrink:0;"></span><span>130 150 000 Kč/m²</span></div><div class="price-band" data-color="#EF6C00" onclick="toggleColorFilter('#EF6C00')" style="display:flex;align-items:center;gap:6px;margin:2px 0;padding:2px 4px;border-radius:4px;border:2px solid transparent;"><span style="width:14px;height:14px;border-radius:50%;background:#EF6C00;display:inline-block;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,0.3);flex-shrink:0;"></span><span>150 165 000 Kč/m²</span></div><div class="price-band" data-color="#C62828" onclick="toggleColorFilter('#C62828')" style="display:flex;align-items:center;gap:6px;margin:2px 0;padding:2px 4px;border-radius:4px;border:2px solid transparent;"><span style="width:14px;height:14px;border-radius:50%;background:#C62828;display:inline-block;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,0.3);flex-shrink:0;"></span><span>> 165 000 Kč/m²</span></div><div class="price-band" data-color="#9E9E9E" onclick="toggleColorFilter('#9E9E9E')" style="display:flex;align-items:center;gap:6px;margin:2px 0;padding:2px 4px;border-radius:4px;border:2px solid transparent;"><span style="width:14px;height:14px;border-radius:50%;background:#9E9E9E;display:inline-block;border:2px solid white;box-shadow:0 1px 3px rgba(0,0,0,0.3);flex-shrink:0;"></span><span>cena/plocha neuvedena</span></div><div id="price-filter-reset" style="display:none;margin:3px 0 0 4px;"><a href="#" onclick="resetColorFilter();return false;" style="font-size:11px;color:#1976D2;text-decoration:none;">✕ Zobrazit všechny ceny</a></div><div style="display:flex;align-items:center;gap:6px;margin:6px 0 0 0;padding-top:6px;border-top:1px solid #eee;"><span style="width:18px;height:18px;border-radius:50%;background:#66BB6A;display:inline-block;box-shadow:0 1px 4px rgba(0,0,0,0.35);flex-shrink:0;"></span><span>Nové (z dnešního scrapu) — větší</span></div><div style="margin-top:8px;padding-top:6px;border-top:1px solid #eee;font-size:12px;color:#666;">3+kk (57), 3+1 (25), 4+kk (6), 4+1 (2)</div><div style="display:flex;align-items:center;gap:6px;margin:8px 0 3px 0;padding-top:6px;border-top:1px solid #eee;"><svg width="14" height="14" viewBox="0 0 24 24"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 C2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" fill="#D32F2F"/></svg><span>PSN / CityHome (3)</span></div>
<div class="filter-section">
<b>Filtry:</b>
<div id="floor-filter">
<label>Patro od:
<select id="min-floor" onchange="applyFilters()">
<option value="2">2. NP (vše)</option>
<option value="3">3. NP+</option>
<option value="4">4. NP+</option>
<option value="5">5. NP+</option>
</select>
</label>
</div>
<div style="margin-top:6px;">
<label>Max cena:
<select id="max-price" onchange="applyFilters()">
<option value="13500000">13 500 000 Kč</option>
<option value="12000000">12 000 000 Kč</option>
<option value="10000000">10 000 000 Kč</option>
<option value="8000000">8 000 000 Kč</option>
</select>
</label>
</div>
<div style="margin-top:6px;">
<label>Přidáno / změněno:
<select id="days-filter" onchange="applyFilters()" style="width:100%;padding:4px;border-radius:4px;border:1px solid #ccc;">
<option value="0">Vše</option>
<option value="1">za 1 den</option>
<option value="2">za 2 dny</option>
<option value="3">za 3 dny</option>
<option value="4">za 4 dny</option>
<option value="5">za 5 dní</option>
<option value="7">za 7 dní</option>
<option value="14">za 14 dní</option>
<option value="30">za 30 dní</option>
</select>
</label>
</div>
</div>
<div class="filter-section">
<div id="rating-counts" style="margin-bottom:6px;font-size:12px;color:#666;">
⭐ 0 oblíbených, 🚫 0 zamítnutých
</div>
<label>
<input type="checkbox" id="hide-rejected" onchange="applyFilters()">
Skrýt zamítnuté
</label>
</div>
<div class="status-link"><a href="/scrapers-status">Scraper status</a></div>
</div>
<script>
// Prague center
var map = L.map('map').setView([50.075, 14.437], 12);
L.tileLayer('https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png', {
attribution: '&copy; OpenStreetMap contributors &copy; CARTO',
maxZoom: 19,
subdomains: 'abcd',
}).addTo(map);
// Labels as separate layer on top (so markers sit between background and labels)
L.tileLayer('https://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}{r}.png', {
maxZoom: 19,
subdomains: 'abcd',
pane: 'shadowPane',
}).addTo(map);
var selectedColors = [];
function toggleColorFilter(color) {
var idx = selectedColors.indexOf(color);
if (idx >= 0) selectedColors.splice(idx, 1);
else selectedColors.push(color);
document.querySelectorAll('.price-band').forEach(function(el) {
var c = el.getAttribute('data-color');
if (selectedColors.length === 0) {
el.classList.remove('active', 'dimmed');
} else if (selectedColors.indexOf(c) >= 0) {
el.classList.add('active'); el.classList.remove('dimmed');
} else {
el.classList.add('dimmed'); el.classList.remove('active');
}
});
document.getElementById('price-filter-reset').style.display =
selectedColors.length > 0 ? 'block' : 'none';
applyFilters();
}
function resetColorFilter() {
selectedColors = [];
document.querySelectorAll('.price-band').forEach(function(el) {
el.classList.remove('active', 'dimmed');
});
document.getElementById('price-filter-reset').style.display = 'none';
applyFilters();
}
var allMarkers = [];
function addMarker(lat, lon, color, popup, hashId, firstSeen, lastChanged) {
var marker = L.circleMarker([lat, lon], {
radius: 8,
fillColor: color,
color: '#fff',
weight: 2,
opacity: 1,
fillOpacity: 0.85,
}).bindPopup(popup);
marker._data = { lat: lat, lon: lon, color: color, hashId: hashId, firstSeen: firstSeen || '', lastChanged: lastChanged || '' };
allMarkers.push(marker);
marker.addTo(map);
}
function addNewMarker(lat, lon, color, popup, hashId, firstSeen, lastChanged) {
var marker = L.circleMarker([lat, lon], {
radius: 12,
fillColor: color,
color: color,
weight: 4,
opacity: 0.35,
fillOpacity: 0.95,
}).bindPopup(popup);
marker._data = { lat: lat, lon: lon, color: color, hashId: hashId, isNew: true, firstSeen: firstSeen || '', lastChanged: lastChanged || '' };
allMarkers.push(marker);
marker.addTo(map);
marker.on('add', function() {
if (marker._path) marker._path.classList.add('marker-new');
});
}
function heartIcon(color) {
var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">'
+ '<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 '
+ 'C2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 '
+ '14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 '
+ '11.54L12 21.35z" fill="' + color + '" stroke="white" stroke-width="1.5"/></svg>';
return L.divIcon({
html: svg,
className: 'heart-icon',
iconSize: [24, 24],
iconAnchor: [12, 22],
popupAnchor: [0, -18],
});
}
function starIcon() {
var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24">'
+ '<path d="M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 22 12 18.27 '
+ '5.82 22 7 14.14 2 9.27l6.91-1.01L12 2z" '
+ 'fill="#FFC107" stroke="#F57F17" stroke-width="1" '
+ 'filter="drop-shadow(0 1px 3px rgba(0,0,0,0.3))"/></svg>';
return L.divIcon({
html: svg,
className: 'star-icon',
iconSize: [28, 28],
iconAnchor: [14, 14],
popupAnchor: [0, -14],
});
}
function addHeartMarker(lat, lon, color, popup, hashId, firstSeen, lastChanged) {
var marker = L.marker([lat, lon], {
icon: heartIcon(color),
}).bindPopup(popup);
marker._data = { lat: lat, lon: lon, color: color, hashId: hashId, isHeart: true, firstSeen: firstSeen || '', lastChanged: lastChanged || '' };
allMarkers.push(marker);
marker.addTo(map);
}
addHeartMarker(50.0729, 14.4767, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="8941" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 994 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#D32F2F;color:white;padding:1px 6px;border-radius:3px;">PSN</span><br><span style="color:#666;">3+kk | 102.7 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Litevská 1174/8, Praha 10</b><br>Stavba: neuvedeno<br>Vlastnictví: osobní<br><br><a href="https://psn.cz/prodej/ubytovaci-jednotka-3-kk-litevska-praha-10-vrsovice-lit4219" target="_blank" style="color:#D32F2F;text-decoration:none;font-weight:bold;">→ Otevřít na PSN</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '8941', '', '');
addHeartMarker(50.0652858, 14.3931318, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="cityhome_na-vaclavce-34_Byt A2.3" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#D32F2F;color:white;padding:1px 6px;border-radius:3px;">CityHome</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 99.1 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Na Václavce 34, Praha 5</b><br>Stavba: Cihlová<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.city-home.cz/projekty/na-vaclavce-34/nabidka-nemovitosti/byt-a23" target="_blank" style="color:#D32F2F;text-decoration:none;font-weight:bold;">→ Otevřít na CityHome</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', 'cityhome_na-vaclavce-34_Byt A2.3', '2026-02-26', '2026-02-26');
addHeartMarker(50.0652858, 14.3931318, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="cityhome_na-vaclavce-34_Byt A3.2" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#D32F2F;color:white;padding:1px 6px;border-radius:3px;">CityHome</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 95.6 m² | 3. NP</span><br><br><b>Na Václavce 34, Praha 5</b><br>Stavba: Cihlová<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.city-home.cz/projekty/na-vaclavce-34/nabidka-nemovitosti/byt-a32" target="_blank" style="color:#D32F2F;text-decoration:none;font-weight:bold;">→ Otevřít na CityHome</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', 'cityhome_na-vaclavce-34_Byt A3.2', '2026-02-26', '2026-02-26');
addMarker(50.157696, 14.519159, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="2212697420" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 597 281 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><br><span style="color:#666;">3+kk | 72 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Marie Podvalové, Praha - Čakovice</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-marie-podvalove/2212697420" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '2212697420', '', '');
addNewMarker(50.042961, 14.312009, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3719308108" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 863 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 72 m² | 3. NP</span><br><br><b>Toufarova, Praha 5 - Stodůlky</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-stodulky-toufarova/3719308108" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3719308108', '2026-02-26', '2026-02-26');
addMarker(50.071224, 14.407872, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1837527884" data-first-seen="" data-last-changed=""><b style="font-size:14px;">12 790 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><br><span style="color:#666;">3+kk | 73 m² | 3. NP</span><br><br><b>Vrázova, Praha - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-smichov-vrazova/1837527884" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1837527884', '', '');
addMarker(50.101852, 14.486118, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="151528268" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 390 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><br><span style="color:#666;">3+kk | 86 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Spojovací, Praha</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha--spojovaci/151528268" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '151528268', '', '');
addNewMarker(50.110931, 14.519487, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1909416780" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 550 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 71 m² | 3. NP</span><br><br><b>Hindlova, Praha 9 - Vysočany</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-hindlova/1909416780" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1909416780', '2026-02-26', '2026-02-26');
addNewMarker(50.110931, 14.519487, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="2090386252" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 71 m² | 9. NP</span><br><br><b>Hindlova, Praha 9 - Vysočany</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-hindlova/2090386252" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '2090386252', '2026-02-26', '2026-02-26');
addNewMarker(50.11219, 14.506794, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1652388428" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 793 080 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 72 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Kolbenova, Praha 9 - Vysočany</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-kolbenova/1652388428" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1652388428', '2026-02-26', '2026-02-26');
addNewMarker(50.058334, 14.513746, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3911689036" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 614 240 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 84 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Strašnická, Praha 10 - Záběhlice</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-zabehlice-strasnicka/3911689036" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3911689036', '2026-02-26', '2026-02-26');
addMarker(50.069641, 14.470198, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="938877772" data-first-seen="" data-last-changed=""><b style="font-size:14px;">12 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><br><span style="color:#666;">3+kk | 99 m² | 3. NP</span><br><br><b>Čeljabinská, Praha 10 - Vršovice</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vrsovice-celjabinska/938877772" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '938877772', '', '');
addNewMarker(50.027798, 14.365065, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1021510476" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 690 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 80 m² | 5. NP</span><br><br><b>Novotného, Praha 5 - Hlubočepy</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-hlubocepy-novotneho/1021510476" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1021510476', '2026-02-26', '2026-02-26');
addNewMarker(50.153698, 14.530779, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3939726156" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">10 480 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 91 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Danielova, Praha 9 - Čakovice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-danielova/3939726156" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3939726156', '2026-02-26', '2026-02-26');
addNewMarker(50.102989, 14.501802, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="21418828" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 650 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 95 m² | 6. NP</span><br><br><b>Na Harfě, Praha 9 - Vysočany</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vysocany-na-harfe/21418828" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '21418828', '2026-02-26', '2026-02-26');
addMarker(50.060715, 14.401836, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3226313292" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 500 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><br><span style="color:#666;">3+kk | 83 m² | 4. NP</span><br><br><b>Na Neklance, Praha 5 - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-smichov-na-neklance/3226313292" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3226313292', '', '');
addNewMarker(50.157696, 14.519159, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1671439692" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 556 524 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 77 m² | 3. NP</span><br><br><b>Marie Podvalové, Praha - Čakovice</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-marie-podvalove/1671439692" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1671439692', '2026-02-26', '2026-02-26');
addNewMarker(50.061039, 14.306672, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3596645196" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 499 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 88 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Plzeňská, Praha 5 - Stodůlky</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-stodulky-plzenska/3596645196" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3596645196', '2026-02-26', '2026-02-26');
addNewMarker(50.106956, 14.510207, '#1565C0', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1313456972" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">3 641 309 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 87 m² | 5. NP</span><br><br><b>Praha 9</b><br>Stavba: Smíšená<br>Vlastnictví: Družstevní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-praha-9-/1313456972" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1313456972', '2026-02-26', '2026-02-26');
addNewMarker(50.03138, 14.391757, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3330433868" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 890 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 93 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Kříženeckého náměstí, Praha 5 - Hlubočepy</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-hlubocepy-krizeneckeho-namesti/3330433868" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3330433868', '2026-02-26', '2026-02-26');
addNewMarker(50.051746, 14.526683, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3248993100" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 106 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Na Plískavě, Praha 10 - Hostivař</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-hostivar-na-pliskave/3248993100" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3248993100', '2026-02-26', '2026-02-26');
addNewMarker(50.106956, 14.510207, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1137623884" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 318 349 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 71 m² | 4. NP</span><br><br><b>Praha 9</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-praha-9-/1137623884" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1137623884', '2026-02-26', '2026-02-26');
addNewMarker(50.071842, 14.46282, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3621479244" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 900 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 79 m² | 5. NP</span><br><br><b>Bulharská, Praha 10 - Vršovice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vrsovice-bulharska/3621479244" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3621479244', '2026-02-26', '2026-02-26');
addNewMarker(50.133003, 14.56198, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3802198860" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 133 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 82 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>K Vinoři, Praha - Kbely</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-kbely-k-vinori/3802198860" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3802198860', '2026-02-26', '2026-02-26');
addNewMarker(50.082985, 14.311815, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3672994636" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 390 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 81 m² | 3. NP</span><br><br><b>Stochovská, Praha 6 - Ruzyně</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-ruzyne-stochovska/3672994636" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3672994636', '2026-02-26', '2026-02-26');
addNewMarker(50.060452, 14.434322, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3540804428" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">10 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 86 m² | 3. NP</span><br><br><b>Žateckých, Praha 4 - Nusle</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-nusle-zateckych/3540804428" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3540804428', '2026-02-26', '2026-02-26');
addNewMarker(50.157696, 14.519159, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="4070581580" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 207 113 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 77 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Marie Podvalové, Praha - Čakovice</b><br>Stavba: Skeletová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-cakovice-marie-podvalove/4070581580" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '4070581580', '2026-02-26', '2026-02-26');
addNewMarker(50.074284, 14.405826, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="2185458508" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 978 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 76 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Matoušova, Praha - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-smichov-matousova/2185458508" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '2185458508', '2026-02-26', '2026-02-26');
addNewMarker(50.003479, 14.362226, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="975307596" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 550 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 75 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>K Lahovské, Praha 5 - Lochkov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-lochkov-k-lahovske/975307596" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '975307596', '2026-02-26', '2026-02-26');
addNewMarker(50.041126, 14.569748, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1196299084" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 450 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 90 m² | 3. NP</span><br><br><b>Mantovská, Praha 10 - Horní Měcholupy</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-horni-mecholupy-mantovska/1196299084" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1196299084', '2026-02-26', '2026-02-26');
addNewMarker(50.057732, 14.561535, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="65700684" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 391 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 77 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Kutnohorská, Praha 10 - Dolní Měcholupy</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-dolni-mecholupy-kutnohorska/65700684" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '65700684', '2026-02-26', '2026-02-26');
addNewMarker(50.072536, 14.476557, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3704697676" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">8 000 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 72 m² | 5. NP</span><br><br><b>Litevská, Praha 10 - Vršovice</b><br>Stavba: Cihlová<br>Vlastnictví: Družstevní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-vrsovice-litevska/3704697676" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3704697676', '2026-02-26', '2026-02-26');
addNewMarker(50.124489, 14.453209, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="961934156" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 220 749 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 71 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Vršní, Praha 8 - Kobylisy</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+kk/praha-kobylisy-vrsni/961934156" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '961934156', '2026-02-26', '2026-02-26');
addNewMarker(50.066612, 14.43407, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="868311884" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 350 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 85 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Rejskova, Praha 2 - Vinohrady</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-vinohrady-rejskova/868311884" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '868311884', '2026-02-26', '2026-02-26');
addNewMarker(50.065617, 14.428337, '#1565C0', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="793797452" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 290 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 97 m² | 5. NP</span><br><br><b>Oldřichova, Praha 2 - Nusle</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-nusle-oldrichova/793797452" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '793797452', '2026-02-26', '2026-02-26');
addNewMarker(50.065289, 14.393119, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1071539020" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 99 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Na Václavce, Praha 5 - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-smichov-na-vaclavce/1071539020" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1071539020', '2026-02-26', '2026-02-26');
addNewMarker(50.047489, 14.490741, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="977601356" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">8 350 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 71 m² | 6. NP</span><br><br><b>Hlavní, Praha 4 - Záběhlice</b><br>Stavba: Cihlová<br>Vlastnictví: Družstevní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-zabehlice-hlavni/977601356" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '977601356', '2026-02-26', '2026-02-26');
addNewMarker(49.964233, 14.395434, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="2792387404" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">10 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 94 m² | 3. NP</span><br><br><b>Spojařů, Praha 5 - Zbraslav</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-zbraslav-spojaru/2792387404" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '2792387404', '2026-02-26', '2026-02-26');
addNewMarker(50.076588, 14.501454, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3881198412" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 499 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 77 m² | 4. NP</span><br><br><b>U kombinátu, Praha 10 - Strašnice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-strasnice-u-kombinatu/3881198412" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3881198412', '2026-02-26', '2026-02-26');
addNewMarker(50.070919, 14.482954, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1180791628" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">8 880 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 70 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>V předpolí, Praha 10 - Strašnice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-strasnice-v-predpoli/1180791628" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1180791628', '2026-02-26', '2026-02-26');
addNewMarker(50.037449, 14.413369, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3469083468" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 099 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 97 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Školní, Praha 4 - Braník</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-branik-skolni/3469083468" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3469083468', '2026-02-26', '2026-02-26');
addNewMarker(49.968777, 14.394235, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="3475837772" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 400 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 77 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Žitavského, Praha - Zbraslav</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-zbraslav-zitavskeho/3475837772" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '3475837772', '2026-02-26', '2026-02-26');
addNewMarker(50.054306, 14.441881, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="77820748" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 80 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>U Svépomoci, Praha - Nusle</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-nusle-u-svepomoci/77820748" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '77820748', '2026-02-26', '2026-02-26');
addNewMarker(50.098339, 14.447381, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="2609607500" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 300 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 84 m² | 3. NP</span><br><br><b>Bubenské nábřeží, Praha 7 - Holešovice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-holesovice-bubenske-nabrezi/2609607500" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '2609607500', '2026-02-26', '2026-02-26');
addNewMarker(50.070713, 14.37893, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="2119304012" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">8 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 70 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Plzeňská, Praha 5 - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-smichov-plzenska/2119304012" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '2119304012', '2026-02-26', '2026-02-26');
addNewMarker(50.065289, 14.393119, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="266232652" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 96 m² | 3. NP</span><br><br><b>Na Václavce, Praha 5 - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-smichov-na-vaclavce/266232652" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '266232652', '2026-02-26', '2026-02-26');
addNewMarker(50.135719, 14.477155, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1547395660" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">10 750 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 85 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Březová, Praha 8 - Kobylisy</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-kobylisy-brezova/1547395660" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1547395660', '2026-02-26', '2026-02-26');
addNewMarker(50.089592, 14.470283, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="1954308940" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">13 500 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#1976D2;color:white;padding:1px 6px;border-radius:3px;">Sreality</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 91 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Biskupcova, Praha 3 - Žižkov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.sreality.cz/detail/prodej/byt/3+1/praha-zizkov-biskupcova/1954308940" target="_blank" style="color:#1976D2;text-decoration:none;font-weight:bold;">→ Otevřít na Sreality</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '1954308940', '2026-02-26', '2026-02-26');
addNewMarker(50.087602, 14.470882, '#9E9E9E', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24516572" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">7 509 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">Atypický | neuvedeno | neuvedeno</span><br><br><b>Praha, 130 00</b><br>Stavba: neuvedeno<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.realingo.cz/prodej/byt-ostatni-byty-praha-130-00/24516572" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24516572', '2026-02-26', '2026-02-26');
addNewMarker(50.036745, 14.415436, '#9E9E9E', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24516564" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">4 600 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">Atypický | neuvedeno | neuvedeno</span><br><br><b>Praha, 147 00</b><br>Stavba: neuvedeno<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.realingo.cz/prodej/byt-ostatni-byty-praha-147-00/24516564" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24516564', '2026-02-26', '2026-02-26');
addNewMarker(50.112102, 14.37767, '#9E9E9E', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24516481" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">7 890 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">Atypický | neuvedeno | neuvedeno</span><br><br><b>Praha, 160 00</b><br>Stavba: neuvedeno<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.realingo.cz/prodej/byt-ostatni-byty-praha-160-00/24516481" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24516481', '2026-02-26', '2026-02-26');
addNewMarker(50.087334, 14.421111, '#9E9E9E', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24516474" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">400 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">Atypický | neuvedeno | neuvedeno</span><br><br><b>Praha, 110 00</b><br>Stavba: neuvedeno<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.realingo.cz/prodej/byt-ostatni-byty-praha-110-00/24516474" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24516474', '2026-02-26', '2026-02-26');
addNewMarker(50.084959, 14.367027, '#9E9E9E', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24516425" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">5 500 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">Atypický | neuvedeno | neuvedeno</span><br><br><b>Praha, 169 00</b><br>Stavba: neuvedeno<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.realingo.cz/prodej/byt-ostatni-byty-praha-169-00/24516425" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24516425', '2026-02-26', '2026-02-26');
addNewMarker(50.061933, 14.278193, '#9E9E9E', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24516357" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">Atypický | neuvedeno | neuvedeno</span><br><br><b>Praha, 155 21</b><br>Stavba: neuvedeno<br>Vlastnictví: neuvedeno<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://www.realingo.cz/prodej/byt-ostatni-byty-praha-155-21/24516357" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24516357', '2026-02-26', '2026-02-26');
addMarker(50.1251431182, 14.5077027612, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24515963" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 390 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><br><span style="color:#666;">3+kk | 83 m² | 4. NP</span><br><br><b>Kytlická, Praha</b><br>Stavba: WIREFRAME<br>Vlastnictví: Osobní<br><br><a href="https://www.realingo.cz/prodej/byt-3+kk-kytlicka-praha/24515963" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24515963', '', '');
addMarker(50.142303781599, 14.522362316941, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="24515884" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 000 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#00897B;color:white;padding:1px 6px;border-radius:3px;">Realingo</span><br><span style="color:#666;">3+kk | 81 m² | 5. NP</span><br><br><b>Hlučkova 869, Praha</b><br>Stavba: OTHER<br>Vlastnictví: Osobní<br><br><a href="https://www.realingo.cz/prodej/byt-3+kk-hluckova-869-praha/24515884" target="_blank" style="color:#00897B;text-decoration:none;font-weight:bold;">→ Otevřít na Realingo</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '24515884', '', '');
addMarker(50.0723994, 14.4102987, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="957149" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 499 900 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 85 m² | 3. NP</span><br><br><b>Hořejší nábřeží, Praha - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/957149-nabidka-prodej-bytu-horejsi-nabrezi-hlavni-mesto-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '957149', '', '');
addMarker(50.050274, 14.338419380808, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="994376" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 000 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+1 | 81 m² | 7. NP</span><br><br><b>Volutová, Praha - Stodůlky</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/994376-nabidka-prodej-bytu-volutova-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '994376', '', '');
addMarker(50.0531887, 14.5100177, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="993725" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 190 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 83 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Práčská, Praha - Záběhlice</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/993725-nabidka-prodej-bytu-pracska-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '993725', '', '');
addMarker(50.0396067, 14.3167022, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="972406" data-first-seen="" data-last-changed=""><b style="font-size:14px;">10 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 83 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Na Výrovně, Praha - Stodůlky</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/972406-nabidka-prodej-bytu-na-vyrovne" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '972406', '', '');
addMarker(50.1034183, 14.4549189, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="972686" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 950 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 80 m² | 6. NP</span><br><br><b>Dělnická, Praha - Holešovice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/972686-nabidka-prodej-bytu-delnicka-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '972686', '', '');
addMarker(50.0901839, 14.3569292, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="993441" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">4+1 | 85 m² | 3. NP</span><br><br><b>Brixiho, Praha - Břevnov</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/993441-nabidka-prodej-bytu-brixiho-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '993441', '', '');
addMarker(50.0951045, 14.5454237, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="955010" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 900 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 70 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Břeclavská, Praha - Kyje</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/955010-nabidka-prodej-bytu-breclavska-hlavni-mesto-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '955010', '', '');
addMarker(50.0713284, 14.4638722, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="967142" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 648 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 78 m² | 6. NP</span><br><br><b>Na Míčánkách, Praha - Vršovice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/967142-nabidka-prodej-bytu-na-micankach" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '967142', '', '');
addMarker(50.103273, 14.4746894, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="981890" data-first-seen="" data-last-changed=""><b style="font-size:14px;">12 980 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+1 | 84 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Novákových, Praha - Libeň</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/981890-nabidka-prodej-bytu-novakovych-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '981890', '', '');
addMarker(50.1113213, 14.5106858, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="991217" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 71 m² | 3. NP</span><br><br><b>Kolbenova, Praha - Vysočany</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/991217-nabidka-prodej-bytu-kolbenova-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '991217', '', '');
addMarker(50.03017, 14.5940072, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="955977" data-first-seen="" data-last-changed=""><b style="font-size:14px;">10 363 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">4+kk | 75 m² | 4. NP</span><br><br><b>Karla Guta, Praha - Uhříněves</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/955977-nabidka-prodej-bytu-karla-guta" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '955977', '', '');
addMarker(50.0676313, 14.432498, '#1565C0', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="868801" data-first-seen="" data-last-changed=""><b style="font-size:14px;">7 299 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 109 m² | 5. NP</span><br><br><b>Pod Karlovem, Praha - Vinohrady</b><br>Stavba: Cihlová<br>Vlastnictví: Družstevní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/868801-nabidka-prodej-bytu-pod-karlovem-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '868801', '', '');
addMarker(50.0676313, 14.432498, '#1565C0', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="868795" data-first-seen="" data-last-changed=""><b style="font-size:14px;">6 299 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 106 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Pod Karlovem, Praha - Vinohrady</b><br>Stavba: Cihlová<br>Vlastnictví: Družstevní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/868795-nabidka-prodej-bytu-pod-karlovem-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '868795', '', '');
addMarker(50.0866062, 14.4586719, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="980187" data-first-seen="" data-last-changed=""><b style="font-size:14px;">12 600 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 75 m² | 7. NP</span><br><br><b>Jeseniova, Praha - Žižkov</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/980187-nabidka-prodej-bytu-jeseniova-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '980187', '', '');
addMarker(50.0390519, 14.63862, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="990183" data-first-seen="" data-last-changed=""><b style="font-size:14px;">10 385 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 86 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Ke Tvrzi, Praha - Královice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/990183-nabidka-prodej-bytu-ke-tvrzi-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '990183', '', '');
addMarker(50.1026043, 14.4435365, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="981278" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 890 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 70 m² | 3. NP</span><br><br><b>Argentinská, Praha - Holešovice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/981278-nabidka-prodej-bytu-argentinska-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '981278', '', '');
addMarker(50.0579963, 14.4682887, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="974557" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 249 900 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">4+kk | 94 m² | 8. NP</span><br><br><b>V Dolině, Praha - Michle</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/974557-nabidka-prodej-bytu-v-doline-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '974557', '', '');
addMarker(50.1406487, 14.5207541, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="989817" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 88 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Miroslava Hajna, Praha - Letňany</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/989817-nabidka-prodej-bytu-miroslava-hajna-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '989817', '', '');
addMarker(50.0604096, 14.4326302, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="988498" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 250 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+1 | 75 m² | 4. NP</span><br><br><b>5. května, Praha - Nusle</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/988498-nabidka-prodej-bytu-5-kvetna-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '988498', '', '');
addMarker(50.0776726, 14.4870072, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="965526" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 890 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 77 m² | 16. NP</span><br><br><b>Vinohradská, Praha - Strašnice</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/965526-nabidka-prodej-bytu-vinohradska-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '965526', '', '');
addMarker(50.1076717, 14.5248559, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="924811" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 390 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 75 m² | 4. NP</span><br><br><b>Waltariho, Praha - Hloubětín</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/924811-nabidka-prodej-bytu-waltariho-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '924811', '', '');
addMarker(50.0377128, 14.5311557, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="985859" data-first-seen="" data-last-changed=""><b style="font-size:14px;">9 000 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+1 | 80 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Staňkova, Praha - Háje</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/985859-nabidka-prodej-bytu-stankova-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '985859', '', '');
addMarker(50.047328, 14.5565277, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="985583" data-first-seen="" data-last-changed=""><b style="font-size:14px;">10 850 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 76 m² | 4. NP</span><br><br><b>Boloňská, Praha - Horní Měcholupy</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/985583-nabidka-prodej-bytu-bolonska-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '985583', '', '');
addMarker(50.032081, 14.5885148, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="981178" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">4+kk | 86 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Sušilova, Praha - Uhříněves</b><br>Stavba: SKELET<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/981178-nabidka-prodej-bytu-susilova-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '981178', '', '');
addMarker(50.0839509, 14.4904493, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="973216" data-first-seen="" data-last-changed=""><b style="font-size:14px;">11 357 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">4+1 | 82 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Nad Kapličkou, Praha - Strašnice</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/973216-nabidka-prodej-bytu-nad-kaplickou-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '973216', '', '');
addMarker(50.0673284, 14.4095087, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="976276" data-first-seen="" data-last-changed=""><b style="font-size:14px;">13 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 75 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>Svornosti, Praha - Smíchov</b><br>Stavba: Cihlová<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/976276-nabidka-prodej-bytu-svornosti-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '976276', '', '');
addMarker(50.071191, 14.5035501, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="950787" data-first-seen="" data-last-changed=""><b style="font-size:14px;">9 999 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#E91E63;color:white;padding:1px 6px;border-radius:3px;">Bezrealitky</span><br><span style="color:#666;">3+kk | 70 m² | 3. NP</span><br><br><b>Sečská, Praha - Strašnice</b><br>Stavba: Smíšená<br>Vlastnictví: Osobní<br><br><a href="https://www.bezrealitky.cz/nemovitosti-byty-domy/950787-nabidka-prodej-bytu-secska-praha" target="_blank" style="color:#E91E63;text-decoration:none;font-weight:bold;">→ Otevřít na Bezrealitky</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '950787', '', '');
addNewMarker(50.1090652, 14.4472586, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="699c14efa272ce2cb70fdaa9" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 114 m² | 6. NP</span><br><br><b>Ortenovo náměstí, Praha 7 - Holešovice, okres Praha</b><br>Stavba: 1905<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-7-ortenovo-namesti/699c14efa272ce2cb70fdaa9/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '699c14efa272ce2cb70fdaa9', '2026-02-26', '2026-02-26');
addNewMarker(50.047243965755754, 14.486543203609836, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="69a0108318a49f688f07c503" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">4+kk | 73 m² | 9. NP</span><br><br><b>Hlavní, Praha 4 - Záběhlice</b><br>Stavba: 1961<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-4-hlavni/69a0108318a49f688f07c503/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '69a0108318a49f688f07c503', '2026-02-26', '2026-02-26');
addNewMarker(50.0542667, 14.4510382, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="69a03719a7891063a20f14e4" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 890 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 74 m² | 7. NP</span><br><br><b>U michelského mlýna, Praha 4 - Michle, okres Praha</b><br>Stavba: 2009<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-4-u-michelskeho-mlyna/69a03719a7891063a20f14e4/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '69a03719a7891063a20f14e4', '2026-02-26', '2026-02-26');
addNewMarker(50.056095198944, 14.467427477184, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="6960e610326c8e2aa50b0e25" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 490 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 80 m² | 6. NP</span><br><br><b>Krnkova, Praha</b><br>Stavba: 2020<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-krnkova/6960e610326c8e2aa50b0e25/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '6960e610326c8e2aa50b0e25', '2026-02-26', '2026-02-26');
addNewMarker(50.1445055631, 14.4834831086, '#1565C0', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="68c4c9a1345e0bffba03d7e0" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">10 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 112 m² | 2. NP</span><br><span style="color:#FF9800;font-weight:bold;">⚠ 2. NP — zvážit klidnost lokality</span><br><br><b>U Prefy, Praha 8 - Ďáblice</b><br>Stavba: Cihlová<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-8-u-prefy/68c4c9a1345e0bffba03d7e0/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '68c4c9a1345e0bffba03d7e0', '2026-02-26', '2026-02-26');
addNewMarker(50.076586, 14.501454, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="69a00a243781d89dcc03c8bb" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 499 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 78 m² | 4. NP</span><br><br><b>U kombinátu, Praha 10 - Strašnice</b><br>Stavba: Cihlová<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-10-u-kombinatu/69a00a243781d89dcc03c8bb/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '69a00a243781d89dcc03c8bb', '2026-02-26', '2026-02-26');
addNewMarker(50.03524802, 14.31407393, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="64edfa5ce31ee12cdb097cf9" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 634 400 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 74 m² | 6. NP</span><br><br><b>Jáchymovská, Praha 5 - Řeporyje</b><br>Stavba: Smíšená<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-13-jachymovska/64edfa5ce31ee12cdb097cf9/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '64edfa5ce31ee12cdb097cf9', '2026-02-26', '2026-02-26');
addNewMarker(50.030126, 14.59409, '#66BB6A', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="696e54943b8203c996011547" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 990 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">4+kk | 84 m² | 5. NP</span><br><br><b>Karla Guta, Praha 10 - Uhříněves</b><br>Stavba: Smíšená<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-22-karla-guta/696e54943b8203c996011547/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '696e54943b8203c996011547', '2026-02-26', '2026-02-26');
addNewMarker(50.104792349, 14.579679032, '#42A5F5', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="689986fe58c2bcbb110a517d" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 008 200 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">4+kk | 93 m² | 5. NP</span><br><br><b>Kuttelwascherova, Praha 9 - Černý Most</b><br>Stavba: Skeletová<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-14-kuttelwascherova/689986fe58c2bcbb110a517d/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '689986fe58c2bcbb110a517d', '2026-02-26', '2026-02-26');
addNewMarker(50.0034203152, 14.3523860807, '#1565C0', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="6859393a57fe2ea99e09a067" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">9 350 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 88 m² | 3. NP</span><br><br><b>Cementářská, Praha 5 - Lochkov</b><br>Stavba: Cihlová<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-16-cementarska/6859393a57fe2ea99e09a067/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '6859393a57fe2ea99e09a067', '2026-02-26', '2026-02-26');
addNewMarker(50.042287368666926, 14.30696945790677, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="6992d0c6dffd9162130a26e8" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">11 853 625 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 69 m² | 4. NP</span><br><br><b>Nekonečného, Praha 5 - Stodůlky</b><br>Stavba: Dřevěná<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-13-nekonecneho/6992d0c6dffd9162130a26e8/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '6992d0c6dffd9162130a26e8', '2026-02-26', '2026-02-26');
addNewMarker(50.0480552778, 14.3019416667, '#C62828', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="690c2c7b22e38ce1f50ec0c6" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 691 991 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+1 | 74 m² | 8. NP</span><br><br><b>Svitákova, Praha 5 - Stodůlky</b><br>Stavba: Cihlová<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-13-svitakova/690c2c7b22e38ce1f50ec0c6/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '690c2c7b22e38ce1f50ec0c6', '2026-02-26', '2026-02-26');
addNewMarker(50.071718, 14.389139, '#EF6C00', '<div style="min-width:280px;font-family:system-ui,sans-serif;" data-hashid="68d6a0afbe5e2703bd0b1981" data-first-seen="2026-02-26" data-last-changed="2026-02-26"><b style="font-size:14px;">12 390 000 Kč</b><span style="margin-left:8px;font-size:11px;background:#FF6F00;color:white;padding:1px 6px;border-radius:3px;">iDNES</span><span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;padding:1px 6px;border-radius:3px;font-weight:bold;">NOVÉ</span><br><span style="color:#666;">3+kk | 82 m² | 4. NP</span><br><br><b>Plzeňská, Praha 5 - Košíře</b><br>Stavba: Smíšená<br>Vlastnictví: osobní<br><span style="font-size:11px;color:#888;">Přidáno: 2026-02-26</span><br><br><a href="https://reality.idnes.cz/detail/prodej/byt/praha-5-plzenska/68d6a0afbe5e2703bd0b1981/" target="_blank" style="color:#FF6F00;text-decoration:none;font-weight:bold;">→ Otevřít na iDNES</a><div style="margin-top:10px;padding-top:8px;border-top:1px solid #eee;"><div style="display:flex;gap:6px;align-items:center;"><button class="rate-btn fav-btn" data-action="fav" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">⭐</button><button class="rate-btn rej-btn" data-action="reject" style="padding:4px 12px;border:1px solid #ccc;border-radius:4px;cursor:pointer;font-size:16px;background:#fff;">🚫</button><span class="rating-status" style="margin-left:6px;font-size:12px;color:#999;"></span></div><textarea class="rating-note" placeholder="Poznámka..." style="width:100%;margin-top:6px;padding:4px;border:1px solid #ddd;border-radius:4px;font-size:12px;resize:vertical;min-height:32px;display:none;font-family:system-ui,sans-serif;"></textarea></div></div>', '68d6a0afbe5e2703bd0b1981', '2026-02-26', '2026-02-26');
// ── Rating system ──────────────────────────────────────────────
var RATINGS_KEY = 'byty_ratings';
function loadRatings() {
try {
var data = localStorage.getItem(RATINGS_KEY);
return data ? JSON.parse(data) : {};
} catch(e) { return {}; }
}
function saveRatings(ratings) {
localStorage.setItem(RATINGS_KEY, JSON.stringify(ratings));
}
function addRejectStrike(marker) {
removeRejectStrike(marker);
var color = marker._data.color || '#999';
// SVG "no entry" icon — circle with diagonal line, colored to match marker
var svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">'
+ '<circle cx="12" cy="12" r="10" fill="none" stroke="' + color + '" stroke-width="2.5" opacity="0.85"/>'
+ '<line x1="5.5" y1="5.5" x2="18.5" y2="18.5" stroke="' + color + '" stroke-width="2.5" stroke-linecap="round" opacity="0.85"/>'
+ '</svg>';
var icon = L.divIcon({
className: 'reject-overlay',
html: svg,
iconSize: [20, 20],
iconAnchor: [10, 10],
});
var m = L.marker([marker._data.lat, marker._data.lon], {
icon: icon,
interactive: false,
pane: 'markerPane',
});
m.addTo(map);
marker._rejectStrike = m;
}
function removeRejectStrike(marker) {
if (marker._rejectStrike) {
map.removeLayer(marker._rejectStrike);
marker._rejectStrike = null;
}
}
function applyMarkerStyle(marker, status) {
if (marker._data.isHeart) {
var el = marker._icon;
if (!el) return;
el.classList.remove('heart-icon-fav', 'heart-icon-rej');
el.style.transform = el.style.transform.replace(/scale\([^)]*\)/, '');
if (status === 'fav') {
el.classList.add('heart-icon-fav');
el.style.transform += ' scale(1.3)';
} else if (status === 'reject') {
el.classList.add('heart-icon-rej');
}
} else {
if (status === 'fav') {
removeRejectStrike(marker);
if (!marker._data._origCircle) marker._data._origCircle = true;
var popup = marker.getPopup();
var popupContent = popup ? popup.getContent() : '';
var wasOnMap = map.hasLayer(marker);
if (wasOnMap) map.removeLayer(marker);
var starMarker = L.marker([marker._data.lat, marker._data.lon], {
icon: starIcon(),
}).bindPopup(popupContent);
starMarker._data = marker._data;
var idx = allMarkers.indexOf(marker);
if (idx !== -1) allMarkers[idx] = starMarker;
if (wasOnMap) starMarker.addTo(map);
} else if (status === 'reject') {
if (marker._data._origCircle && !(marker instanceof L.CircleMarker)) {
revertToCircle(marker, { radius: 6, fillOpacity: 0.35, fillColor: marker._data.color, color: '#fff', weight: 1 });
} else {
marker.setStyle({
radius: 6, fillOpacity: 0.35, fillColor: marker._data.color, color: '#fff', weight: 1,
});
if (marker._path) marker._path.classList.remove('marker-favorite');
}
// Add strikethrough line over the marker
addRejectStrike(marker);
} else {
if (marker._data._origCircle && !(marker instanceof L.CircleMarker)) {
revertToCircle(marker, { radius: 8, fillColor: marker._data.color, color: '#fff', weight: 2, fillOpacity: 0.85 });
} else {
marker.setStyle({
radius: 8, fillColor: marker._data.color, color: '#fff',
weight: 2, fillOpacity: 0.85,
});
if (marker._path) marker._path.classList.remove('marker-favorite');
}
if (marker._path) marker._path.classList.remove('marker-rejected');
removeRejectStrike(marker);
}
}
}
function revertToCircle(marker, style) {
var popup = marker.getPopup();
var popupContent = popup ? popup.getContent() : '';
var wasOnMap = map.hasLayer(marker);
if (wasOnMap) map.removeLayer(marker);
var cm = L.circleMarker([marker._data.lat, marker._data.lon], style).bindPopup(popupContent);
cm._data = marker._data;
delete cm._data._starRef;
var idx = allMarkers.indexOf(marker);
if (idx !== -1) allMarkers[idx] = cm;
if (wasOnMap) cm.addTo(map);
}
function rateMarker(marker, action) {
var hashId = marker._data.hashId;
var ratings = loadRatings();
var current = ratings[hashId];
if (current && current.status === action) {
delete ratings[hashId];
saveRatings(ratings);
applyMarkerStyle(marker, null);
updateRatingCounts();
applyFilters();
return null;
} else {
var note = (current && current.note) || '';
ratings[hashId] = { status: action, note: note };
saveRatings(ratings);
applyMarkerStyle(marker, action);
updateRatingCounts();
applyFilters();
return action;
}
}
function setNote(hashId, note) {
var ratings = loadRatings();
if (ratings[hashId]) {
ratings[hashId].note = note;
saveRatings(ratings);
}
}
function updateRatingCounts() {
var ratings = loadRatings();
var favCount = 0, rejCount = 0;
for (var id in ratings) {
if (ratings[id].status === 'fav') favCount++;
if (ratings[id].status === 'reject') rejCount++;
}
var el = document.getElementById('rating-counts');
if (el) el.innerHTML = '⭐ ' + favCount + ' oblíbených, 🚫 ' + rejCount + ' zamítnutých';
}
function restoreRatings() {
var ratings = loadRatings();
allMarkers.forEach(function(m) {
var r = ratings[m._data.hashId];
if (r) applyMarkerStyle(m, r.status);
});
updateRatingCounts();
}
// ── Popup rating handler ───────────────────────────────────────
map.on('popupopen', function(e) {
var container = e.popup.getElement();
if (!container) return;
var wrapper = container.querySelector('[data-hashid]');
if (!wrapper) return;
var hashId = wrapper.getAttribute('data-hashid');
var marker = null;
for (var i = 0; i < allMarkers.length; i++) {
if (String(allMarkers[i]._data.hashId) === String(hashId)) {
marker = allMarkers[i]; break;
}
}
if (!marker) return;
var ratings = loadRatings();
var current = ratings[hashId];
var favBtn = container.querySelector('.fav-btn');
var rejBtn = container.querySelector('.rej-btn');
var statusEl = container.querySelector('.rating-status');
var noteEl = container.querySelector('.rating-note');
// Restore state in popup
favBtn.classList.remove('active-fav');
rejBtn.classList.remove('active-rej');
statusEl.textContent = '';
noteEl.style.display = 'none';
noteEl.value = '';
if (current) {
if (current.status === 'fav') {
favBtn.classList.add('active-fav');
statusEl.textContent = 'Oblíbený';
statusEl.style.color = '#F9A825';
} else if (current.status === 'reject') {
rejBtn.classList.add('active-rej');
statusEl.textContent = 'Zamítnutý';
statusEl.style.color = '#E53935';
}
noteEl.style.display = 'block';
noteEl.value = current.note || '';
}
favBtn.onclick = function() {
var result = rateMarker(marker, 'fav');
favBtn.classList.remove('active-fav');
rejBtn.classList.remove('active-rej');
if (result === 'fav') {
favBtn.classList.add('active-fav');
statusEl.textContent = 'Oblíbený';
statusEl.style.color = '#F9A825';
noteEl.style.display = 'block';
} else {
statusEl.textContent = '';
noteEl.style.display = 'none';
noteEl.value = '';
}
};
rejBtn.onclick = function() {
var result = rateMarker(marker, 'reject');
favBtn.classList.remove('active-fav');
rejBtn.classList.remove('active-rej');
if (result === 'reject') {
rejBtn.classList.add('active-rej');
statusEl.textContent = 'Zamítnutý';
statusEl.style.color = '#E53935';
noteEl.style.display = 'block';
} else {
statusEl.textContent = '';
noteEl.style.display = 'none';
noteEl.value = '';
}
};
var noteTimer = null;
noteEl.oninput = function() {
clearTimeout(noteTimer);
noteTimer = setTimeout(function() {
setNote(hashId, noteEl.value);
}, 500);
};
});
// ── Filters ────────────────────────────────────────────────────
function applyFilters() {
var minFloor = parseInt(document.getElementById('min-floor').value);
var maxPrice = parseInt(document.getElementById('max-price').value);
var hideRejected = document.getElementById('hide-rejected').checked;
var daysFilter = parseInt(document.getElementById('days-filter').value) || 0;
var ratings = loadRatings();
var visible = 0;
var cutoff = null;
if (daysFilter > 0) {
cutoff = new Date();
cutoff.setDate(cutoff.getDate() - daysFilter);
cutoff.setHours(0, 0, 0, 0);
}
allMarkers.forEach(function(m) {
var popup = m.getPopup().getContent();
var floorMatch = popup.match(/(\d+)\. NP/);
var priceMatch = popup.match(/([\d\s]+)\sKč/);
var floor = floorMatch ? parseInt(floorMatch[1]) : null;
var price = priceMatch ? parseInt(priceMatch[1].replace(/\s/g, '')) : 0;
var show = true;
if (floor !== null && floor < minFloor) show = false;
if (price > maxPrice) show = false;
if (cutoff) {
var fs = m._data.firstSeen ? new Date(m._data.firstSeen) : null;
var lc = m._data.lastChanged ? new Date(m._data.lastChanged) : null;
if (!((fs && fs >= cutoff) || (lc && lc >= cutoff))) show = false;
}
if (selectedColors.length > 0 && selectedColors.indexOf(m._data.color) < 0) show = false;
var r = ratings[m._data.hashId];
if (hideRejected && r && r.status === 'reject') show = false;
if (show) {
if (!map.hasLayer(m)) m.addTo(map);
visible++;
// Show strike line if rejected and visible
if (m._rejectStrike && !map.hasLayer(m._rejectStrike)) m._rejectStrike.addTo(map);
} else {
if (map.hasLayer(m)) map.removeLayer(m);
// Hide strike line when marker hidden
if (m._rejectStrike && map.hasLayer(m._rejectStrike)) map.removeLayer(m._rejectStrike);
}
});
// Re-apply styles for markers that were just added to map
allMarkers.forEach(function(m) {
if (map.hasLayer(m)) {
var r = ratings[m._data.hashId];
if (r) applyMarkerStyle(m, r.status);
}
});
document.getElementById('visible-count').textContent = visible;
}
// Initialize ratings on load
restoreRatings();
// ── Panel toggle ──────────────────────────────────────────────
function togglePanel() {
var panel = document.getElementById('info-panel');
var openBtn = document.getElementById('panel-open-btn');
var isOpen = !panel.classList.contains('collapsed');
if (isOpen) {
panel.classList.add('collapsed');
openBtn.classList.remove('hidden');
} else {
panel.classList.remove('collapsed');
openBtn.classList.add('hidden');
}
}
// On mobile, start with panel collapsed
if (window.innerWidth <= 600) {
document.getElementById('info-panel').classList.add('collapsed');
document.getElementById('panel-open-btn').classList.remove('hidden');
}
</script>
</body>
</html>

View File

@@ -9,6 +9,7 @@ from __future__ import annotations
import json import json
import re import re
import unicodedata
from pathlib import Path from pathlib import Path
from scrape_and_map import generate_map, format_price from scrape_and_map import generate_map, format_price
@@ -19,14 +20,8 @@ def normalize_street(locality: str) -> str:
# "Studentská, Praha 6 - Dejvice" → "studentska" # "Studentská, Praha 6 - Dejvice" → "studentska"
# "Rýnská, Praha" → "rynska" # "Rýnská, Praha" → "rynska"
street = locality.split(",")[0].strip().lower() street = locality.split(",")[0].strip().lower()
# Remove diacritics (simple Czech) # Remove diacritics using Unicode decomposition (handles all Czech characters)
replacements = { street = unicodedata.normalize("NFKD", street).encode("ascii", "ignore").decode("ascii")
"á": "a", "č": "c", "ď": "d", "é": "e", "ě": "e",
"í": "i", "ň": "n", "ó": "o", "ř": "r", "š": "s",
"ť": "t", "ú": "u", "ů": "u", "ý": "y", "ž": "z",
}
for src, dst in replacements.items():
street = street.replace(src, dst)
# Remove non-alphanumeric # Remove non-alphanumeric
street = re.sub(r"[^a-z0-9]", "", street) street = re.sub(r"[^a-z0-9]", "", street)
return street return street

View File

@@ -1,114 +0,0 @@
#!/usr/bin/env python3
"""
Přegeneruje mapu z již stažených dat (byty_sreality.json).
Doplní chybějící plochy ze Sreality API, opraví URL, aplikuje filtry.
"""
from __future__ import annotations
import json
import time
import urllib.request
from pathlib import Path
from scrape_and_map import (
generate_map, format_price, MIN_AREA, HEADERS, DETAIL_API
)
def api_get(url: str) -> dict:
req = urllib.request.Request(url, headers=HEADERS)
with urllib.request.urlopen(req, timeout=30) as resp:
return json.loads(resp.read().decode("utf-8"))
def fix_sreality_url(estate: dict) -> str:
"""Fix the Sreality URL to include disposition segment (only if missing)."""
disp = estate.get("disposition", "")
slug_map = {
"1+kk": "1+kk", "1+1": "1+1", "2+kk": "2+kk", "2+1": "2+1",
"3+kk": "3+kk", "3+1": "3+1", "4+kk": "4+kk", "4+1": "4+1",
"5+kk": "5+kk", "5+1": "5+1", "6+": "6-a-vice", "Atypický": "atypicky",
}
slug = slug_map.get(disp, "byt")
old_url = estate.get("url", "")
parts = old_url.split("/")
try:
byt_idx = parts.index("byt")
# Only insert if disposition slug is not already there
if byt_idx + 1 < len(parts) and parts[byt_idx + 1] == slug:
return old_url # already correct
parts.insert(byt_idx + 1, slug)
return "/".join(parts)
except ValueError:
return old_url
def fetch_area(hash_id: int) -> int | None:
"""Fetch area from detail API."""
try:
url = DETAIL_API.format(hash_id)
detail = api_get(url)
for item in detail.get("items", []):
name = item.get("name", "")
if "žitná ploch" in name or "zitna ploch" in name.lower():
return int(item["value"])
except Exception:
pass
return None
def main():
json_path = Path("byty_sreality.json")
if not json_path.exists():
print("Soubor byty_sreality.json nenalezen. Nejprve spusť scrape_and_map.py")
return
estates = json.loads(json_path.read_text(encoding="utf-8"))
print(f"Načteno {len(estates)} bytů z byty_sreality.json")
# Step 1: Fetch missing areas
missing_area = [e for e in estates if e.get("area") is None]
print(f"Doplňuji plochu u {len(missing_area)} bytů...")
for i, e in enumerate(missing_area):
time.sleep(0.3)
area = fetch_area(e["hash_id"])
if area is not None:
e["area"] = area
if (i + 1) % 50 == 0:
print(f" {i + 1}/{len(missing_area)} ...")
# Count results
with_area = sum(1 for e in estates if e.get("area") is not None)
print(f"Plocha doplněna: {with_area}/{len(estates)}")
# Step 2: Fix URLs
for e in estates:
e["url"] = fix_sreality_url(e)
# Step 3: Filter by min area
filtered = []
excluded = 0
for e in estates:
area = e.get("area")
if area is not None and area < MIN_AREA:
excluded += 1
continue
filtered.append(e)
print(f"Vyloučeno (< {MIN_AREA} m²): {excluded}")
print(f"Zbývá: {len(filtered)} bytů")
# Save updated data
filtered_path = Path("byty_sreality.json")
filtered_path.write_text(
json.dumps(filtered, ensure_ascii=False, indent=2),
encoding="utf-8",
)
# Generate map
generate_map(filtered)
if __name__ == "__main__":
main()

View File

@@ -13,9 +13,9 @@ import math
import time import time
import urllib.request import urllib.request
import urllib.parse import urllib.parse
from datetime import datetime from datetime import datetime, timedelta
from pathlib import Path from pathlib import Path
from scraper_stats import write_stats from scraper_stats import write_stats, validate_listing
STATS_FILE = "stats_sreality.json" STATS_FILE = "stats_sreality.json"
@@ -45,9 +45,9 @@ HEADERS = {
def api_get(url: str) -> dict: def api_get(url: str) -> dict:
"""Fetch JSON from Sreality API.""" """Fetch JSON from Sreality API with retry."""
logger.debug(f"HTTP GET request: {url}") for attempt in range(3):
logger.debug(f"Headers: {HEADERS}") logger.debug(f"HTTP GET request (attempt {attempt + 1}/3): {url}")
req = urllib.request.Request(url, headers=HEADERS) req = urllib.request.Request(url, headers=HEADERS)
try: try:
with urllib.request.urlopen(req, timeout=30) as resp: with urllib.request.urlopen(req, timeout=30) as resp:
@@ -55,8 +55,15 @@ def api_get(url: str) -> dict:
logger.debug(f"HTTP response: status={resp.status}, size={len(response_data)} bytes") logger.debug(f"HTTP response: status={resp.status}, size={len(response_data)} bytes")
logger.debug(f"Response preview: {response_data[:200]}") logger.debug(f"Response preview: {response_data[:200]}")
return json.loads(response_data) return json.loads(response_data)
except urllib.error.HTTPError:
raise
except (urllib.error.URLError, ConnectionError, OSError) as e: except (urllib.error.URLError, ConnectionError, OSError) as e:
logger.error(f"HTTP request failed for {url}: {e}", exc_info=True) if attempt < 2:
wait = (attempt + 1) * 2
logger.warning(f"Connection error (retry {attempt + 1}/3 after {wait}s): {e}")
time.sleep(wait)
else:
logger.error(f"HTTP request failed after 3 attempts: {e}", exc_info=True)
raise raise
@@ -356,6 +363,8 @@ def scrape(max_pages: int | None = None, max_properties: int | None = None):
"first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"), "first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"),
"last_changed": datetime.now().strftime("%Y-%m-%d"), "last_changed": datetime.now().strftime("%Y-%m-%d"),
} }
if not validate_listing(result, "sreality"):
continue
results.append(result) results.append(result)
details_fetched += 1 details_fetched += 1
@@ -448,9 +457,13 @@ def generate_map(estates: list[dict], output_path: str = "mapa_bytu.html"):
price_legend_items += ( price_legend_items += (
'<div style="display:flex;align-items:center;gap:6px;margin:6px 0 0 0;' '<div style="display:flex;align-items:center;gap:6px;margin:6px 0 0 0;'
'padding-top:6px;border-top:1px solid #eee;">' 'padding-top:6px;border-top:1px solid #eee;">'
'<span style="width:18px;height:18px;border-radius:50%;background:#66BB6A;' '<span style="display:inline-flex;align-items:center;gap:3px;flex-shrink:0;">'
'display:inline-block;box-shadow:0 1px 4px rgba(0,0,0,0.35);flex-shrink:0;"></span>' '<span style="width:14px;height:14px;border-radius:50%;background:#66BB6A;'
'<span>Nové (z dnešního scrapu) — větší</span></div>' 'display:inline-block;box-shadow:0 1px 3px rgba(0,0,0,0.3);"></span>'
'<span style="font-size:8px;font-weight:700;background:#FFD600;color:#333;'
'padding:1px 3px;border-radius:2px;">NEW</span>'
'</span>'
'<span>Nové (≤ 1 den)</span></div>'
) )
markers_js = "" markers_js = ""
@@ -472,11 +485,13 @@ def generate_map(estates: list[dict], output_path: str = "mapa_bytu.html"):
source_label = source_labels.get(source, source) source_label = source_labels.get(source, source)
source_color = source_colors.get(source, "#999") source_color = source_colors.get(source, "#999")
hash_id = e.get("hash_id", "") hash_id = f"{source}_{e.get('hash_id', '')}"
first_seen = e.get("first_seen", "") first_seen = e.get("first_seen", "")
last_changed = e.get("last_changed", "") last_changed = e.get("last_changed", "")
is_new = first_seen == datetime.now().strftime("%Y-%m-%d") today = datetime.now().strftime("%Y-%m-%d")
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
is_new = first_seen in (today, yesterday)
new_badge = ( new_badge = (
'<span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;' '<span style="margin-left:6px;font-size:11px;background:#FFD600;color:#333;'
@@ -603,12 +618,12 @@ def generate_map(estates: list[dict], output_path: str = "mapa_bytu.html"):
.heart-icon-fav svg path {{ stroke: gold !important; stroke-width: 2.5 !important; filter: drop-shadow(0 0 4px rgba(255,193,7,0.7)); }} .heart-icon-fav svg path {{ stroke: gold !important; stroke-width: 2.5 !important; filter: drop-shadow(0 0 4px rgba(255,193,7,0.7)); }}
.heart-icon-rej {{ opacity: 0.4 !important; filter: grayscale(1); }} .heart-icon-rej {{ opacity: 0.4 !important; filter: grayscale(1); }}
.reject-overlay {{ background: none !important; border: none !important; pointer-events: none !important; }} .reject-overlay {{ background: none !important; border: none !important; pointer-events: none !important; }}
@keyframes pulse-new {{ .new-badge-icon {{ background: none !important; border: none !important; pointer-events: none !important; }}
0% {{ stroke-opacity: 1; stroke-width: 3px; r: 11; }} .new-badge {{
50% {{ stroke-opacity: 0.4; stroke-width: 6px; r: 12; }} font-size: 9px; font-weight: 700; color: #333; background: #FFD600;
100% {{ stroke-opacity: 1; stroke-width: 3px; r: 11; }} padding: 1px 4px; border-radius: 3px; white-space: nowrap;
box-shadow: 0 1px 3px rgba(0,0,0,0.3); letter-spacing: 0.5px;
}} }}
.marker-new {{ animation: pulse-new 2s ease-in-out infinite; }}
.info-panel {{ .info-panel {{
position: absolute; top: 10px; right: 10px; z-index: 1000; position: absolute; top: 10px; right: 10px; z-index: 1000;
background: white; padding: 16px; border-radius: 10px; background: white; padding: 16px; border-radius: 10px;
@@ -683,12 +698,9 @@ def generate_map(estates: list[dict], output_path: str = "mapa_bytu.html"):
</div> </div>
<div style="margin-top:6px;"> <div style="margin-top:6px;">
<label>Max cena: <label>Max cena:
<select id="max-price" onchange="applyFilters()"> <input type="number" id="max-price" value="13500000" max="14000000" step="500000"
<option value="13500000">13 500 000 Kč</option> style="width:130px;padding:2px 4px;border:1px solid #ccc;border-radius:3px;"
<option value="12000000">12 000 000 Kč</option> onchange="applyFilters()" onkeyup="applyFilters()"> Kč
<option value="10000000">10 000 000 Kč</option>
<option value="8000000">8 000 000 Kč</option>
</select>
</label> </label>
</div> </div>
<div style="margin-top:6px;"> <div style="margin-top:6px;">
@@ -784,19 +796,28 @@ function addMarker(lat, lon, color, popup, hashId, firstSeen, lastChanged) {{
function addNewMarker(lat, lon, color, popup, hashId, firstSeen, lastChanged) {{ function addNewMarker(lat, lon, color, popup, hashId, firstSeen, lastChanged) {{
var marker = L.circleMarker([lat, lon], {{ var marker = L.circleMarker([lat, lon], {{
radius: 12, radius: 8,
fillColor: color, fillColor: color,
color: color, color: '#fff',
weight: 4, weight: 2,
opacity: 0.35, opacity: 1,
fillOpacity: 0.95, fillOpacity: 0.85,
}}).bindPopup(popup); }}).bindPopup(popup);
marker._data = {{ lat: lat, lon: lon, color: color, hashId: hashId, isNew: true, firstSeen: firstSeen || '', lastChanged: lastChanged || '' }}; marker._data = {{ lat: lat, lon: lon, color: color, hashId: hashId, isNew: true, firstSeen: firstSeen || '', lastChanged: lastChanged || '' }};
allMarkers.push(marker); allMarkers.push(marker);
marker.addTo(map); marker.addTo(map);
marker.on('add', function() {{ var badge = L.marker([lat, lon], {{
if (marker._path) marker._path.classList.add('marker-new'); icon: L.divIcon({{
className: 'new-badge-icon',
html: '<span class="new-badge">NEW</span>',
iconSize: [32, 14],
iconAnchor: [-6, 7],
}}),
interactive: false,
pane: 'markerPane',
}}); }});
badge.addTo(map);
marker._newBadge = badge;
}} }}
function heartIcon(color) {{ function heartIcon(color) {{
@@ -852,6 +873,11 @@ function loadRatings() {{
function saveRatings(ratings) {{ function saveRatings(ratings) {{
localStorage.setItem(RATINGS_KEY, JSON.stringify(ratings)); localStorage.setItem(RATINGS_KEY, JSON.stringify(ratings));
fetch('/api/ratings', {{
method: 'POST',
headers: {{'Content-Type': 'application/json'}},
body: JSON.stringify(ratings)
}}).catch(function() {{}});
}} }}
function addRejectStrike(marker) {{ function addRejectStrike(marker) {{
@@ -899,6 +925,7 @@ function applyMarkerStyle(marker, status) {{
}} else {{ }} else {{
if (status === 'fav') {{ if (status === 'fav') {{
removeRejectStrike(marker); removeRejectStrike(marker);
if (marker._newBadge && map.hasLayer(marker._newBadge)) map.removeLayer(marker._newBadge);
if (!marker._data._origCircle) marker._data._origCircle = true; if (!marker._data._origCircle) marker._data._origCircle = true;
var popup = marker.getPopup(); var popup = marker.getPopup();
var popupContent = popup ? popup.getContent() : ''; var popupContent = popup ? popup.getContent() : '';
@@ -922,6 +949,7 @@ function applyMarkerStyle(marker, status) {{
}} }}
// Add strikethrough line over the marker // Add strikethrough line over the marker
addRejectStrike(marker); addRejectStrike(marker);
if (marker._newBadge && map.hasLayer(marker._newBadge)) map.removeLayer(marker._newBadge);
}} else {{ }} else {{
if (marker._data._origCircle && !(marker instanceof L.CircleMarker)) {{ if (marker._data._origCircle && !(marker instanceof L.CircleMarker)) {{
revertToCircle(marker, {{ radius: 8, fillColor: marker._data.color, color: '#fff', weight: 2, fillOpacity: 0.85 }}); revertToCircle(marker, {{ radius: 8, fillColor: marker._data.color, color: '#fff', weight: 2, fillOpacity: 0.85 }});
@@ -934,6 +962,7 @@ function applyMarkerStyle(marker, status) {{
}} }}
if (marker._path) marker._path.classList.remove('marker-rejected'); if (marker._path) marker._path.classList.remove('marker-rejected');
removeRejectStrike(marker); removeRejectStrike(marker);
if (marker._newBadge && !map.hasLayer(marker._newBadge)) marker._newBadge.addTo(map);
}} }}
}} }}
}} }}
@@ -1089,7 +1118,9 @@ map.on('popupopen', function(e) {{
// ── Filters ──────────────────────────────────────────────────── // ── Filters ────────────────────────────────────────────────────
function applyFilters() {{ function applyFilters() {{
var minFloor = parseInt(document.getElementById('min-floor').value); var minFloor = parseInt(document.getElementById('min-floor').value);
var maxPrice = parseInt(document.getElementById('max-price').value); var maxPriceEl = document.getElementById('max-price');
var maxPrice = parseInt(maxPriceEl.value) || 14000000;
if (maxPrice > 14000000) {{ maxPrice = 14000000; maxPriceEl.value = 14000000; }}
var hideRejected = document.getElementById('hide-rejected').checked; var hideRejected = document.getElementById('hide-rejected').checked;
var daysFilter = parseInt(document.getElementById('days-filter').value) || 0; var daysFilter = parseInt(document.getElementById('days-filter').value) || 0;
var ratings = loadRatings(); var ratings = loadRatings();
@@ -1130,10 +1161,12 @@ function applyFilters() {{
visible++; visible++;
// Show strike line if rejected and visible // Show strike line if rejected and visible
if (m._rejectStrike && !map.hasLayer(m._rejectStrike)) m._rejectStrike.addTo(map); if (m._rejectStrike && !map.hasLayer(m._rejectStrike)) m._rejectStrike.addTo(map);
if (m._newBadge && !map.hasLayer(m._newBadge)) m._newBadge.addTo(map);
}} else {{ }} else {{
if (map.hasLayer(m)) map.removeLayer(m); if (map.hasLayer(m)) map.removeLayer(m);
// Hide strike line when marker hidden // Hide strike line when marker hidden
if (m._rejectStrike && map.hasLayer(m._rejectStrike)) map.removeLayer(m._rejectStrike); if (m._rejectStrike && map.hasLayer(m._rejectStrike)) map.removeLayer(m._rejectStrike);
if (m._newBadge && map.hasLayer(m._newBadge)) map.removeLayer(m._newBadge);
}} }}
}}); }});
@@ -1148,8 +1181,25 @@ function applyFilters() {{
document.getElementById('visible-count').textContent = visible; document.getElementById('visible-count').textContent = visible;
}} }}
// Initialize ratings on load // Initialize ratings: load from server, merge with localStorage, then restore
function initRatings() {{
var local = loadRatings();
fetch('/api/ratings')
.then(function(r) {{ return r.ok ? r.json() : null; }})
.then(function(server) {{
if (server && typeof server === 'object') {{
var merged = Object.assign({{}}, local, server);
localStorage.setItem(RATINGS_KEY, JSON.stringify(merged));
}}
restoreRatings(); restoreRatings();
updateRatingCounts();
}})
.catch(function() {{
restoreRatings();
updateRatingCounts();
}});
}}
initRatings();
// ── Panel toggle ────────────────────────────────────────────── // ── Panel toggle ──────────────────────────────────────────────
function togglePanel() {{ function togglePanel() {{

View File

@@ -15,7 +15,7 @@ import re
import time import time
import urllib.request import urllib.request
from pathlib import Path from pathlib import Path
from scraper_stats import write_stats from scraper_stats import write_stats, validate_listing
STATS_FILE = "stats_bezrealitky.json" STATS_FILE = "stats_bezrealitky.json"
@@ -71,19 +71,35 @@ HEADERS = {
BASE_URL = "https://www.bezrealitky.cz" BASE_URL = "https://www.bezrealitky.cz"
def fetch_url(url: str, retries: int = 3) -> str:
"""Fetch URL and return HTML string with retry on transient errors."""
for attempt in range(retries):
try:
logger.debug(f"HTTP GET request (attempt {attempt + 1}/{retries}): {url}")
req = urllib.request.Request(url, headers=HEADERS)
resp = urllib.request.urlopen(req, timeout=30)
html = resp.read().decode("utf-8")
logger.debug(f"HTTP response: status={resp.status}, size={len(html)} bytes")
return html
except urllib.error.HTTPError:
raise
except (ConnectionResetError, ConnectionError, urllib.error.URLError, OSError) as e:
if attempt < retries - 1:
wait = (attempt + 1) * 2
logger.warning(f"Connection error (retry {attempt + 1}/{retries} after {wait}s): {e}")
time.sleep(wait)
else:
logger.error(f"HTTP request failed after {retries} attempts: {e}", exc_info=True)
raise
def fetch_page(page: int) -> tuple[list[dict], int]: def fetch_page(page: int) -> tuple[list[dict], int]:
""" """
Fetch a listing page from Bezrealitky. Fetch a listing page from Bezrealitky.
Returns (list of advert dicts from Apollo cache, total count). Returns (list of advert dicts from Apollo cache, total count).
""" """
url = f"{BASE_URL}/vypis/nabidka-prodej/byt/praha?page={page}" url = f"{BASE_URL}/vypis/nabidka-prodej/byt/praha?page={page}"
logger.debug(f"HTTP GET request: {url}") html = fetch_url(url)
logger.debug(f"Headers: {HEADERS}")
req = urllib.request.Request(url, headers=HEADERS)
try:
resp = urllib.request.urlopen(req, timeout=30)
html = resp.read().decode("utf-8")
logger.debug(f"HTTP response: status={resp.status}, size={len(html)} bytes")
match = re.search( match = re.search(
r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>',
@@ -113,20 +129,13 @@ def fetch_page(page: int) -> tuple[list[dict], int]:
logger.debug(f"Page {page}: found {len(adverts)} adverts, total={total}") logger.debug(f"Page {page}: found {len(adverts)} adverts, total={total}")
return adverts, total return adverts, total
except (urllib.error.URLError, ConnectionError, OSError) as e:
logger.error(f"HTTP request failed for {url}: {e}", exc_info=True)
raise
def fetch_detail(uri: str) -> dict | None: def fetch_detail(uri: str) -> dict | None:
"""Fetch detail page for a listing.""" """Fetch detail page for a listing."""
try: try:
url = f"{BASE_URL}/nemovitosti-byty-domy/{uri}" url = f"{BASE_URL}/nemovitosti-byty-domy/{uri}"
logger.debug(f"HTTP GET request: {url}") html = fetch_url(url)
req = urllib.request.Request(url, headers=HEADERS)
resp = urllib.request.urlopen(req, timeout=30)
html = resp.read().decode("utf-8")
logger.debug(f"HTTP response: status={resp.status}, size={len(html)} bytes")
match = re.search( match = re.search(
r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>',
@@ -365,6 +374,8 @@ def scrape(max_pages: int | None = None, max_properties: int | None = None):
"first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"), "first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"),
"last_changed": datetime.now().strftime("%Y-%m-%d"), "last_changed": datetime.now().strftime("%Y-%m-%d"),
} }
if not validate_listing(result, "bezrealitky"):
continue
results.append(result) results.append(result)
properties_fetched += 1 properties_fetched += 1

View File

@@ -14,7 +14,7 @@ import time
import urllib.request import urllib.request
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from scraper_stats import write_stats from scraper_stats import write_stats, validate_listing
STATS_FILE = "stats_cityhome.json" STATS_FILE = "stats_cityhome.json"
@@ -375,6 +375,8 @@ def scrape(max_pages: int | None = None, max_properties: int | None = None):
"first_seen": _prev_cache.get(f"cityhome_{slug}_{listing['unit_name']}", {}).get("first_seen", datetime.now().strftime("%Y-%m-%d")), "first_seen": _prev_cache.get(f"cityhome_{slug}_{listing['unit_name']}", {}).get("first_seen", datetime.now().strftime("%Y-%m-%d")),
"last_changed": datetime.now().strftime("%Y-%m-%d") if _prev_cache.get(f"cityhome_{slug}_{listing['unit_name']}", {}).get("price") != price else _prev_cache[f"cityhome_{slug}_{listing['unit_name']}"].get("last_changed", datetime.now().strftime("%Y-%m-%d")), "last_changed": datetime.now().strftime("%Y-%m-%d") if _prev_cache.get(f"cityhome_{slug}_{listing['unit_name']}", {}).get("price") != price else _prev_cache[f"cityhome_{slug}_{listing['unit_name']}"].get("last_changed", datetime.now().strftime("%Y-%m-%d")),
} }
if not validate_listing(result, "cityhome"):
continue
results.append(result) results.append(result)
properties_fetched += 1 properties_fetched += 1

View File

@@ -15,9 +15,8 @@ import re
import time import time
import urllib.request import urllib.request
import urllib.parse import urllib.parse
from html.parser import HTMLParser
from pathlib import Path from pathlib import Path
from scraper_stats import write_stats from scraper_stats import write_stats, validate_listing
STATS_FILE = "stats_idnes.json" STATS_FILE = "stats_idnes.json"
@@ -468,6 +467,8 @@ def scrape(max_pages: int | None = None, max_properties: int | None = None):
"first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"), "first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"),
"last_changed": datetime.now().strftime("%Y-%m-%d"), "last_changed": datetime.now().strftime("%Y-%m-%d"),
} }
if not validate_listing(result, "idnes"):
continue
results.append(result) results.append(result)
properties_fetched += 1 properties_fetched += 1

View File

@@ -15,7 +15,7 @@ import time
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from urllib.parse import urlencode from urllib.parse import urlencode
from scraper_stats import write_stats from scraper_stats import write_stats, validate_listing
STATS_FILE = "stats_psn.json" STATS_FILE = "stats_psn.json"
@@ -38,9 +38,10 @@ BASE_URL = "https://psn.cz"
UNITS_API = f"{BASE_URL}/api/units-list" UNITS_API = f"{BASE_URL}/api/units-list"
def fetch_json(url: str) -> dict: def fetch_json(url: str, retries: int = 3) -> dict:
"""Fetch JSON via curl (urllib SSL may fail on Cloudflare).""" """Fetch JSON via curl (urllib SSL may fail on Cloudflare) with retry."""
logger.debug(f"HTTP GET: {url}") for attempt in range(retries):
logger.debug(f"HTTP GET (attempt {attempt + 1}/{retries}): {url}")
result = subprocess.run( result = subprocess.run(
["curl", "-s", "-L", "--max-time", "30", ["curl", "-s", "-L", "--max-time", "30",
"-H", f"User-Agent: {UA}", "-H", f"User-Agent: {UA}",
@@ -48,9 +49,14 @@ def fetch_json(url: str) -> dict:
url], url],
capture_output=True, text=True, timeout=60 capture_output=True, text=True, timeout=60
) )
if result.returncode != 0: if result.returncode == 0:
raise RuntimeError(f"curl failed ({result.returncode}): {result.stderr[:200]}")
return json.loads(result.stdout) return json.loads(result.stdout)
if attempt < retries - 1:
wait = (attempt + 1) * 2
logger.warning(f"curl failed (retry {attempt + 1}/{retries} after {wait}s): {result.stderr[:200]}")
time.sleep(wait)
else:
raise RuntimeError(f"curl failed after {retries} attempts ({result.returncode}): {result.stderr[:200]}")
def fix_gps(lat, lng): def fix_gps(lat, lng):
@@ -255,6 +261,8 @@ def scrape(max_properties: int | None = None):
"first_seen": _prev_cache.get(str(unit_id), {}).get("first_seen", datetime.now().strftime("%Y-%m-%d")), "first_seen": _prev_cache.get(str(unit_id), {}).get("first_seen", datetime.now().strftime("%Y-%m-%d")),
"last_changed": datetime.now().strftime("%Y-%m-%d") if _prev_cache.get(str(unit_id), {}).get("price") != int(price) else _prev_cache[str(unit_id)].get("last_changed", datetime.now().strftime("%Y-%m-%d")), "last_changed": datetime.now().strftime("%Y-%m-%d") if _prev_cache.get(str(unit_id), {}).get("price") != int(price) else _prev_cache[str(unit_id)].get("last_changed", datetime.now().strftime("%Y-%m-%d")),
} }
if not validate_listing(result, "psn"):
continue
results.append(result) results.append(result)
properties_fetched += 1 properties_fetched += 1

View File

@@ -15,7 +15,7 @@ import re
import time import time
import urllib.request import urllib.request
from pathlib import Path from pathlib import Path
from scraper_stats import write_stats from scraper_stats import write_stats, validate_listing
STATS_FILE = "stats_realingo.json" STATS_FILE = "stats_realingo.json"
@@ -56,6 +56,28 @@ HEADERS = {
BASE_URL = "https://www.realingo.cz" BASE_URL = "https://www.realingo.cz"
def fetch_url(url: str, retries: int = 3) -> str:
"""Fetch URL and return HTML string with retry on transient errors."""
for attempt in range(retries):
try:
logger.debug(f"HTTP GET request (attempt {attempt + 1}/{retries}): {url}")
req = urllib.request.Request(url, headers=HEADERS)
resp = urllib.request.urlopen(req, timeout=30)
html = resp.read().decode("utf-8")
logger.debug(f"HTTP response: status={resp.status}, size={len(html)} bytes")
return html
except urllib.error.HTTPError:
raise
except (ConnectionResetError, ConnectionError, urllib.error.URLError, OSError) as e:
if attempt < retries - 1:
wait = (attempt + 1) * 2
logger.warning(f"Connection error (retry {attempt + 1}/{retries} after {wait}s): {e}")
time.sleep(wait)
else:
logger.error(f"HTTP request failed after {retries} attempts: {e}", exc_info=True)
raise
def fetch_listing_page(page: int = 1) -> tuple[list[dict], int]: def fetch_listing_page(page: int = 1) -> tuple[list[dict], int]:
"""Fetch a page of Prague listings. Returns (items, total_count).""" """Fetch a page of Prague listings. Returns (items, total_count)."""
if page == 1: if page == 1:
@@ -63,14 +85,7 @@ def fetch_listing_page(page: int = 1) -> tuple[list[dict], int]:
else: else:
url = f"{BASE_URL}/prodej_byty/praha/{page}_strana/" url = f"{BASE_URL}/prodej_byty/praha/{page}_strana/"
logger.debug(f"HTTP GET request: {url}") html = fetch_url(url)
logger.debug(f"Headers: {HEADERS}")
req = urllib.request.Request(url, headers=HEADERS)
try:
resp = urllib.request.urlopen(req, timeout=30)
html = resp.read().decode("utf-8")
logger.debug(f"HTTP response: status={resp.status}, size={len(html)} bytes")
match = re.search( match = re.search(
r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>',
html, re.DOTALL html, re.DOTALL
@@ -83,21 +98,13 @@ def fetch_listing_page(page: int = 1) -> tuple[list[dict], int]:
offer_list = data["props"]["pageProps"]["store"]["offer"]["list"] offer_list = data["props"]["pageProps"]["store"]["offer"]["list"]
logger.debug(f"Page {page}: found {len(offer_list['data'])} items, total={offer_list['total']}") logger.debug(f"Page {page}: found {len(offer_list['data'])} items, total={offer_list['total']}")
return offer_list["data"], offer_list["total"] return offer_list["data"], offer_list["total"]
except (urllib.error.URLError, ConnectionError, OSError) as e:
logger.error(f"HTTP request failed for {url}: {e}", exc_info=True)
raise
def fetch_detail(listing_url: str) -> dict | None: def fetch_detail(listing_url: str) -> dict | None:
"""Fetch detail page for a listing to get floor, building type, etc.""" """Fetch detail page for a listing to get floor, building type, etc."""
try: try:
url = f"{BASE_URL}{listing_url}" url = f"{BASE_URL}{listing_url}"
logger.debug(f"HTTP GET request: {url}") html = fetch_url(url)
req = urllib.request.Request(url, headers=HEADERS)
resp = urllib.request.urlopen(req, timeout=30)
html = resp.read().decode("utf-8")
logger.debug(f"HTTP response: status={resp.status}, size={len(html)} bytes")
match = re.search( match = re.search(
r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>',
html, re.DOTALL html, re.DOTALL
@@ -324,6 +331,8 @@ def scrape(max_pages: int | None = None, max_properties: int | None = None):
"first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"), "first_seen": cached.get("first_seen", datetime.now().strftime("%Y-%m-%d")) if cached else datetime.now().strftime("%Y-%m-%d"),
"last_changed": datetime.now().strftime("%Y-%m-%d"), "last_changed": datetime.now().strftime("%Y-%m-%d"),
} }
if not validate_listing(result, "realingo"):
continue
results.append(result) results.append(result)
properties_fetched += 1 properties_fetched += 1

View File

@@ -1,13 +1,53 @@
"""Shared utility for writing per-scraper run statistics to JSON.""" """Shared utilities for scraper run statistics and listing validation."""
from __future__ import annotations from __future__ import annotations
import json import json
import logging
import os import os
from pathlib import Path from pathlib import Path
HERE = Path(__file__).parent HERE = Path(__file__).parent
DATA_DIR = Path(os.environ.get("DATA_DIR", HERE)) DATA_DIR = Path(os.environ.get("DATA_DIR", HERE))
_val_log = logging.getLogger(__name__)
_REQUIRED_FIELDS = ("hash_id", "price", "locality", "lat", "lon", "url", "source")
def validate_listing(listing: dict, context: str = "") -> bool:
"""
Validate a listing dict before it is written to the output JSON.
Returns True if valid, False if the listing should be skipped.
Logs a warning for each invalid listing.
"""
prefix = f"[{context}] " if context else ""
for field in _REQUIRED_FIELDS:
val = listing.get(field)
if val is None or val == "":
_val_log.warning(f"{prefix}Skipping listing — missing field '{field}': {listing.get('hash_id', '?')}")
return False
price = listing.get("price")
if not isinstance(price, (int, float)) or price <= 0:
_val_log.warning(f"{prefix}Skipping listing — invalid price={price!r}: {listing.get('hash_id', '?')}")
return False
lat, lon = listing.get("lat"), listing.get("lon")
if not isinstance(lat, (int, float)) or not isinstance(lon, (int, float)):
_val_log.warning(f"{prefix}Skipping listing — non-numeric GPS lat={lat!r} lon={lon!r}: {listing.get('hash_id', '?')}")
return False
if not (47.0 <= lat <= 52.0) or not (12.0 <= lon <= 19.0):
_val_log.warning(f"{prefix}Skipping listing — GPS outside Czech Republic lat={lat} lon={lon}: {listing.get('hash_id', '?')}")
return False
area = listing.get("area")
if area is not None and (not isinstance(area, (int, float)) or area <= 0):
_val_log.warning(f"{prefix}Skipping listing — invalid area={area!r}: {listing.get('hash_id', '?')}")
return False
return True
def write_stats(filename: str, stats: dict) -> None: def write_stats(filename: str, stats: dict) -> None:
"""Write scraper run stats dict to the data directory.""" """Write scraper run stats dict to the data directory."""

View File

@@ -312,7 +312,7 @@ def _render_status_html(status: dict | None, history: list, is_running: bool = F
f'<title>Scraper status</title>\n<style>{_CSS}</style>\n' f'<title>Scraper status</title>\n<style>{_CSS}</style>\n'
) )
page_header = '<h1>Scraper status</h1>\n<div class="subtitle">maru-hleda-byt</div>\n' page_header = '<h1>Scraper status</h1>\n<div class="subtitle">maru-hleda-byt</div>\n'
footer = '<div class="link-row"><a href="/">Otevřít mapu</a></div>' footer = '<div class="link-row"><a href="/mapa_bytu.html">Otevřít mapu</a></div>'
if status is None: if status is None:
return ( return (