dev immobile
This commit is contained in:
parent
18ca2ce858
commit
e198d842ce
18 changed files with 5931 additions and 3 deletions
438
dev/immobilien 07-05-2026/build_azizi_project_research.py
Normal file
438
dev/immobilien 07-05-2026/build_azizi_project_research.py
Normal file
|
|
@ -0,0 +1,438 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
OBSIDIAN_LIST = Path("/Volumes/Obsidian/DEV-Vault/b2in/immobilien/Immobilien Dubai.md")
|
||||
LOCAL_EXTRACTION = Path("dev/immobilien 07-05-2026/azizi-extraction.json")
|
||||
OFFICIAL_LINKS_OUTPUT = Path("dev/immobilien 07-05-2026/azizi-official-links.json")
|
||||
TOP_PROJECTS_OUTPUT = Path("dev/immobilien 07-05-2026/azizi-top-projects-research.json")
|
||||
|
||||
|
||||
TOP_PROJECTS: dict[str, dict[str, Any]] = {
|
||||
"mina": {
|
||||
"title": "Mina",
|
||||
"district": "Palm Jumeirah",
|
||||
"category": "Sofort verfügbar - Luxus-Prestige",
|
||||
"status": "Fertiggestellt / Resale",
|
||||
"unit_types": ["Apartments", "Penthouses"],
|
||||
"unit_count": "178 Apartments + 4 Penthouses",
|
||||
"price_from": "ab AED 2,6 Mio laut Konzeptbriefing; aktuelle Verfügbarkeit prüfen",
|
||||
"handover": "Fertiggestellt 2021",
|
||||
"positioning": "Etablierte Palm-Jumeirah-Adresse mit Waterfront-/Prestige-Fokus.",
|
||||
"key_facts": [
|
||||
"Palm Jumeirah, östlicher Halbmond",
|
||||
"Bestandsobjekt, neue Einheiten nur nach Verfügbarkeit im Zweitmarkt",
|
||||
"Geeignet für Eigennutzer mit Palm-Präferenz und Bestandsinvestoren",
|
||||
],
|
||||
"research_status": "Konzeptdaten belastbar; lokale SharePoint-Ordner vorhanden, aber ohne verwertbare Dateien; offizielle URL als Projektanker.",
|
||||
},
|
||||
"royal-bay": {
|
||||
"title": "Royal Bay",
|
||||
"district": "Palm Jumeirah",
|
||||
"category": "Sofort verfügbar - Luxus-Prestige",
|
||||
"status": "Fertiggestellt / Resale",
|
||||
"unit_types": ["Apartments", "Penthouses"],
|
||||
"unit_count": "90 Apartments + 2 Penthouses",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "Fertiggestellt",
|
||||
"positioning": "Kleinere, privatere Palm-Jumeirah-Adresse gegenüber Mina.",
|
||||
"key_facts": [
|
||||
"Palm Jumeirah",
|
||||
"Bewusst kleine Hausgemeinschaft",
|
||||
"Geeignet für Eigennutzer mit Privatheitsfokus",
|
||||
],
|
||||
"research_status": "Konzeptdaten belastbar; offizielle URL aus Obsidian-Liste; keine lokale SharePoint-Abdeckung gefunden.",
|
||||
},
|
||||
"creek-views": {
|
||||
"title": "Creek Views",
|
||||
"district": "Al Jaddaf / Dubai Healthcare City",
|
||||
"category": "Sofort verfügbar - für schnelle Cashflow-Investments",
|
||||
"status": "Fertiggestellt / Bestand",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom"],
|
||||
"unit_count": "634 Einheiten laut Konzeptbriefing",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "Fertiggestellt",
|
||||
"positioning": "Zentrale Cashflow-Adresse zwischen Dubai Creek, Downtown und Flughafen.",
|
||||
"key_facts": [
|
||||
"Offizielles Factsheet: Studios, 1- und 2-Bedroom-Apartments",
|
||||
"Offizielles Factsheet: Dubai Creek ca. 2 Minuten, Downtown Dubai ca. 7 Minuten, DXB ca. 7 Minuten",
|
||||
"Panoramablick auf Dubai Creek und Skyline, Terrassen, Retail- und Leisure-Hubs",
|
||||
],
|
||||
"research_status": "Sehr gute lokale SharePoint-Abdeckung mit Factsheets und Bildern.",
|
||||
},
|
||||
"creek-views-ii": {
|
||||
"title": "Creek Views II",
|
||||
"district": "Al Jaddaf / Dubai Healthcare City",
|
||||
"category": "Sofort verfügbar - für schnelle Cashflow-Investments",
|
||||
"status": "Kürzlich übergeben / Bestand",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom"],
|
||||
"unit_count": "Teil des Creek-Views-Ensembles",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "Kürzlich übergeben",
|
||||
"positioning": "Jüngere Ergänzung des Creek-Views-Konzepts in bewährter Lage.",
|
||||
"key_facts": [
|
||||
"SharePoint enthält Factsheets, Renderings und Fertigstellungs-/Foto-Material",
|
||||
"Gleiche Standortlogik wie Creek Views: DHCC, Dubai Creek, kurze Wege zu Downtown und Flughafen",
|
||||
"Geeignet für konservative Yield-Investoren mit schneller Vermietbarkeit",
|
||||
],
|
||||
"research_status": "Gute lokale SharePoint-Abdeckung; Factsheet-Dateien teils mehrsprachig/CH/RUS, deutsche Website-Texte besser aus Konzept + englischer Quelle ableiten.",
|
||||
},
|
||||
"azizi-riviera": {
|
||||
"title": "Azizi Riviera",
|
||||
"district": "MBR City / Meydan",
|
||||
"category": "Flaggschiff Meydan - Azizis größtes aktives Quartier",
|
||||
"status": "Phasenweise fertiggestellt / weitere Phasen aktiv",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom", "3 Bedroom", "Retail"],
|
||||
"unit_count": "12.285 Apartments laut Azizi Folding Map V.10",
|
||||
"price_from": "Aktuelle Phase prüfen",
|
||||
"handover": "Phase abhängig",
|
||||
"positioning": "Master-Planned Community mit Crystal Lagoon, Lifestyle und Rendite-Logik.",
|
||||
"key_facts": [
|
||||
"Riviera umfasst eine 2,7 km lange schwimmbare Crystal Lagoon",
|
||||
"Riviera ist in mehrere Lifestyle-Zonen gegliedert: Retail Boulevard, Lagoon Walk und Grünflächen",
|
||||
"Kurze Wege nach Downtown Dubai und Meydan",
|
||||
],
|
||||
"research_status": "Azizi Folding Map V.10 liefert direkten Apartment-Count; lokaler SharePoint-Ordner ist weitgehend leer.",
|
||||
},
|
||||
"riviera-reve": {
|
||||
"title": "Riviera Rêve",
|
||||
"district": "MBR City / Meydan",
|
||||
"category": "Flaggschiff Meydan - Azizis größtes aktives Quartier",
|
||||
"status": "Off-Plan / Ultra-Luxus-Phase",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom", "Duplex Penthouses"],
|
||||
"unit_count": "5.061 Homes in 24 Ultra-Luxus-Gebäuden",
|
||||
"price_from": "Aktuelle Verfügbarkeit prüfen",
|
||||
"handover": "Phase abhängig",
|
||||
"positioning": "Exklusivste Riviera-Phase für Käufer, die Community-Vorteile mit höherer Ausstattung verbinden.",
|
||||
"key_facts": [
|
||||
"Web-/Pressesource: 24 Ultra-Luxus-Gebäude",
|
||||
"Web-/Pressesource: über 2.600 Studios, 1.579 One-Bedroom, 876 Two-Bedroom",
|
||||
"Ausstattungspositionierung mit Smart-Home, hochwertigen Materialien und 5-Sterne-Service-Ambiente",
|
||||
],
|
||||
"research_status": "Keine lokale SharePoint-Abdeckung gefunden; Web-/Pressesource ergänzt offizielle URL.",
|
||||
},
|
||||
"riviera-beachfront": {
|
||||
"title": "Riviera Beachfront",
|
||||
"district": "MBR City / Meydan",
|
||||
"category": "Flaggschiff Meydan - Azizis größtes aktives Quartier",
|
||||
"status": "Im Bau / Near Handover",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom", "Retail"],
|
||||
"unit_count": "555 Einheiten in drei 20-geschossigen Entwicklungen",
|
||||
"price_from": "Aktuelle Verfügbarkeit prüfen",
|
||||
"handover": "Q4 2025 laut 2025-Bauupdates",
|
||||
"positioning": "Premium-Linie der Riviera direkt an der Crystal Lagoon.",
|
||||
"key_facts": [
|
||||
"Bauupdate 2025: Beachfront I erreichte 70-81% Baufortschritt",
|
||||
"Drei 20-geschossige Entwicklungen mit direktem Beach-/Lagoon-Zugang",
|
||||
"Amenities: Pools, Gym, BBQ, Kinderspielbereiche, Yoga-Spaces, Retail",
|
||||
],
|
||||
"research_status": "Lokaler SharePoint-Ordner ohne verwertbare Dateien; Web-/Bauupdates liefern harte Fakten.",
|
||||
},
|
||||
"park-avenue": {
|
||||
"title": "Park Avenue",
|
||||
"district": "Meydan / MBR City",
|
||||
"category": "Flaggschiff Meydan - Azizis größtes aktives Quartier",
|
||||
"status": "Fertiggestellt / Resale",
|
||||
"unit_types": ["Apartments", "Retail"],
|
||||
"unit_count": "274 Apartments laut Azizi Folding Map V.10",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "2023/2024 laut Konzeptbriefing",
|
||||
"positioning": "Boutique-Community in MBR City, ruhiger als die großen Riviera-Türme.",
|
||||
"key_facts": [
|
||||
"274 Apartments laut Azizi Folding Map V.10",
|
||||
"Meydan Avenue / MBR City",
|
||||
"Geeignet für Eigennutzer und Resale-Investoren mit Wunsch nach kleinerer Community",
|
||||
],
|
||||
"research_status": "Keine lokale SharePoint-Abdeckung gefunden; Azizi Folding Map V.10 bestätigt 274 Apartments.",
|
||||
},
|
||||
"star": {
|
||||
"title": "Star",
|
||||
"district": "Al Furjan",
|
||||
"category": "Ready Rendite - etablierte Adressen in Al Furjan",
|
||||
"status": "Fertiggestellt / Resale",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom"],
|
||||
"unit_count": "Offizielle Seite: 310 Studios, 46 One-Bedroom, 102 Two-Bedroom",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "Fertiggestellt",
|
||||
"positioning": "Al-Furjan-Klassiker mit Metro-Nähe und breiter Mietzielgruppe.",
|
||||
"key_facts": [
|
||||
"Offizielle Seite: Metro Station ca. 1 Minute, Mohammed Bin Zayed Road ca. 1 Minute",
|
||||
"Offizielle Seite: Dubai Marina & JBR ca. 10 Minuten, Expo City ca. 12 Minuten",
|
||||
"Amenities: Pool, Gym, Garage/Parking, City Views, Sauna",
|
||||
],
|
||||
"research_status": "Gute lokale Bildabdeckung; offizielle Seite liefert Unit-Mix und Standortzeiten.",
|
||||
},
|
||||
"roy-mediterranean": {
|
||||
"title": "ROY Mediterranean",
|
||||
"district": "Al Furjan",
|
||||
"category": "Ready Rendite - etablierte Adressen in Al Furjan",
|
||||
"status": "Fertiggestellt / Resale",
|
||||
"unit_types": ["Apartments", "Retail"],
|
||||
"unit_count": "271 Apartments + Retail laut Konzeptbriefing",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "Fertiggestellt",
|
||||
"positioning": "Etablierte Al-Furjan-Adresse mit Volumen und Resale-Liquidität.",
|
||||
"key_facts": [
|
||||
"Al Furjan mit Metro-Anbindung und guter Erreichbarkeit von Jebel Ali, Dubai Marina und Expo City",
|
||||
"Ground-Floor-Retail stärkt Alltagstauglichkeit und Vermietbarkeit",
|
||||
"Geeignet für Yield- und Volumeninvestoren",
|
||||
],
|
||||
"research_status": "Lokale Bildabdeckung vorhanden; harte Unit-Zahl aus Konzeptbriefing, offizielle URL als Projektanker.",
|
||||
},
|
||||
"farishta": {
|
||||
"title": "Farishta",
|
||||
"district": "Al Furjan",
|
||||
"category": "Ready Rendite - etablierte Adressen in Al Furjan",
|
||||
"status": "Fertiggestellt / Resale",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom", "Penthouses"],
|
||||
"unit_count": "137 Studios, 124 One-Bedroom, 23 Two-Bedroom laut Azizi-Al-Furjan-Katalogauszug",
|
||||
"price_from": "Verfügbarkeit auf Anfrage",
|
||||
"handover": "Fertiggestellt 2020 laut Konzeptbriefing",
|
||||
"positioning": "Niedriger Risiko-Einstieg in Al Furjan mit Metro- und Straßenanbindung.",
|
||||
"key_facts": [
|
||||
"Zwischen Sheikh Zayed Road und Sheikh Mohammed Bin Zayed Road positioniert",
|
||||
"SharePoint enthält Renderings, Completion Photos und Floor Plans",
|
||||
"Geeignet für Erstinvestoren und Cashflow-orientierte Käufer",
|
||||
],
|
||||
"research_status": "Gute lokale SharePoint-Abdeckung; Unit-Mix aus Azizi-Katalog-/Suchauszug weicht leicht vom Konzept ab und sollte vor Livegang final geprüft werden.",
|
||||
},
|
||||
"azizi-grand": {
|
||||
"title": "Azizi Grand",
|
||||
"district": "Dubai Sports City",
|
||||
"category": "Bald bezugsfertig - Bauphase weit fortgeschritten",
|
||||
"status": "Im Bau / Near Handover",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom"],
|
||||
"unit_count": "411 Apartments laut Azizi Folding Map V.10",
|
||||
"price_from": "Aktuelle Verfügbarkeit prüfen",
|
||||
"handover": "Q1 2026 laut Bauupdates",
|
||||
"positioning": "Kurze Restlaufzeit bis Cashflow in einer sport- und familiennahen Lage.",
|
||||
"key_facts": [
|
||||
"411 Apartments laut Azizi Folding Map V.10",
|
||||
"Building Height B+G+3P+14 laut Azizi Folding Map V.10",
|
||||
"Bauupdate September 2025: 57% Baufortschritt",
|
||||
"Bauupdate November 2025: 67% Baufortschritt",
|
||||
"Amenities: Gym, zwei Pools, Kinderspielbereiche, BBQ, Landschaftsgärten",
|
||||
],
|
||||
"research_status": "Keine lokale SharePoint-Abdeckung gefunden; Web-/Bauupdates liefern harte Fakten.",
|
||||
},
|
||||
"beach-oasis": {
|
||||
"title": "Beach Oasis",
|
||||
"district": "Dubai Studio City",
|
||||
"category": "Bald bezugsfertig - Bauphase weit fortgeschritten",
|
||||
"status": "Im Bau / Phase abhängig",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom"],
|
||||
"unit_count": "1.416 Apartments in 4 Buildings laut Azizi Folding Map V.10",
|
||||
"price_from": "ab ca. AED 480k-822k je Phase/Quelle; aktuelle Verfügbarkeit prüfen",
|
||||
"handover": "Phase abhängig: 2024/2025 bzw. Phase 2 bis 2026 laut Webquellen",
|
||||
"positioning": "Studio-City-Einstieg mit Lagunen-/Beach-Feeling im bezahlbaren Segment.",
|
||||
"key_facts": [
|
||||
"1.416 Apartments laut Azizi Folding Map V.10",
|
||||
"Dubai Studio City, Medien- und Entertainment-Hub",
|
||||
"Lagoon-style swimming pool und man-made beach",
|
||||
"Outdoor courtyard, Cafes/Restaurants, Gym, landscaped gardens",
|
||||
],
|
||||
"research_status": "Wichtig: lokaler Treffer ist überwiegend Jaddaf Beach Oasis, nicht Studio City Beach Oasis. Für Live-Daten Studio-City-Quelle priorisieren.",
|
||||
},
|
||||
"burj-azizi": {
|
||||
"title": "Burj Azizi",
|
||||
"district": "Sheikh Zayed Road / Trade Centre",
|
||||
"category": "Ultra-Prestige & Mega-Communities",
|
||||
"status": "Im Bau / Off-Plan",
|
||||
"unit_types": ["Holiday Homes", "Freehold Apartments", "Penthouses", "Hotel", "Retail"],
|
||||
"unit_count": "1.037 Residences, 725 m und 140+ Floors laut Azizi Folding Map V.10",
|
||||
"price_from": "offizielle Burj-Azizi-Seite: ab AED 8,5 Mio bis AED 1 Mrd; Launch-Presse: ab AED 10.000/sqft",
|
||||
"handover": "Bis Ende 2028 laut Programm-/Pressekontext; im Konzept 2028-2030",
|
||||
"positioning": "Headline-Projekt: zweithöchster Tower der Welt und einziges Freehold-Projekt auf dem Sheikh-Zayed-Road-Strip.",
|
||||
"key_facts": [
|
||||
"Azizi Folding Map V.10: 725 Meter, 140+ Floors, 1.037 Residences, Sheikh Zayed Road",
|
||||
"Offizielle Seite: Highest Observation Deck 649m, Highest Club 567m, Highest Hotel Lobby 498m",
|
||||
"Offizielle Kontaktseite: Retail Ground-L7, Apartments Level 37-69, Penthouses Level 72-88, Observation Deck Level 130",
|
||||
],
|
||||
"research_status": "Azizi Folding Map V.10 liefert direkte Zahlen; sehr gute offizielle Burj-Azizi-Webquelle; keine lokale SharePoint-Abdeckung gefunden.",
|
||||
},
|
||||
"monaco-mansions": {
|
||||
"title": "Monaco Mansions",
|
||||
"district": "Dubai South / Azizi Venice",
|
||||
"category": "Ultra-Prestige & Mega-Communities",
|
||||
"status": "Im Bau / Off-Plan",
|
||||
"unit_types": ["6 Bedroom Mansions", "7 Bedroom Mansions", "8 Bedroom Mansions"],
|
||||
"unit_count": "109 Mansions",
|
||||
"price_from": "ab AED 45 Mio laut Konzeptbriefing",
|
||||
"handover": "Q4 2026 laut Konzeptbriefing; final prüfen",
|
||||
"positioning": "Exklusivstes Villen-Segment innerhalb der Venice-Community.",
|
||||
"key_facts": [
|
||||
"Azizi Folding Map V.10 nennt 109 Villas im Azizi-Venice-Kontext",
|
||||
"Positioniert für HNI-Käufer, Familien und Trophy-Asset-Investoren",
|
||||
"Investmentthese ist an Dubai South, Flughafenentwicklung und Venice-Masterplan gekoppelt",
|
||||
],
|
||||
"research_status": "Keine lokale SharePoint-Abdeckung gefunden; Venice-Web-/Pressesources bestätigen Mansion-Kontext, projektgenaue Verfügbarkeit final prüfen.",
|
||||
},
|
||||
"azizi-venice": {
|
||||
"title": "Azizi Venice",
|
||||
"district": "Dubai South",
|
||||
"category": "Ultra-Prestige & Mega-Communities",
|
||||
"status": "Im Bau / Mega-Community",
|
||||
"unit_types": ["Apartments", "Villas", "Mansions", "Retail"],
|
||||
"unit_count": "34.795+ Apartments, 102 Apartment Buildings und 109 Villas laut Azizi Folding Map V.10",
|
||||
"price_from": "ab ca. AED 650k laut Konzeptbriefing; aktuelle Phase prüfen",
|
||||
"handover": "Phasenweise ab 2026 laut Konzeptbriefing",
|
||||
"positioning": "Große Dubai-South-Wachstumsthese mit Lagoon, Cultural District und Nähe zu Al Maktoum Airport.",
|
||||
"key_facts": [
|
||||
"Azizi Folding Map V.10: 34.795+ Apartments, 102 Apartment Buildings, 109 Villas",
|
||||
"18 km Freshwater Lagoon, Opera House, Theatre, Exhibition Hall, Performing Arts Academy",
|
||||
"Nähe zu Al Maktoum International Airport; Retail Boulevard, Hotels, Schulen, Krankenhaus",
|
||||
],
|
||||
"research_status": "Lokaler SharePoint-Ordner leer; mehrere Web-/Pressesources liefern harte Masterplan-Fakten.",
|
||||
},
|
||||
"azizi-milan": {
|
||||
"title": "Azizi Milan",
|
||||
"district": "Azizi Milan / Sheikh Mohammed Bin Zayed Road",
|
||||
"category": "Ultra-Prestige & Mega-Communities",
|
||||
"status": "Im Bau / Master-Planned Community",
|
||||
"unit_types": ["Apartments", "Retail", "Hospitality", "Mixed Use"],
|
||||
"unit_count": "100 Buildings und 80.000 Apartments laut Azizi Folding Map V.10",
|
||||
"price_from": "Aktuelle Gebäudephase prüfen",
|
||||
"handover": "Phase abhängig",
|
||||
"positioning": "AED-75-Mrd.-Masterplan mit italienischer Design-/Fashion-Positionierung.",
|
||||
"key_facts": [
|
||||
"Azizi Folding Map V.10: 100 Buildings und 80.000 Apartments",
|
||||
"Web-/Pressesources: AED 75 Mrd. und 40 Mio sqft GFA",
|
||||
"Milan Heights als lagoon-facing Enclave innerhalb Azizi Milan",
|
||||
"Lage an Sheikh Mohammed Bin Zayed Road, wichtiger Verbindungsachse zwischen Emiraten",
|
||||
],
|
||||
"research_status": "Sehr gute lokale SharePoint-Abdeckung für einzelne AM-Gebäude und Milan Heights; Webquellen ergänzen Masterplan-Fakten.",
|
||||
},
|
||||
"azizi-wasel": {
|
||||
"title": "Azizi Wasel",
|
||||
"district": "Dubai Islands",
|
||||
"category": "Ultra-Prestige & Mega-Communities",
|
||||
"status": "Off-Plan / New Launch",
|
||||
"unit_types": ["Studios", "1 Bedroom", "2 Bedroom", "3 Bedroom", "Penthouses"],
|
||||
"unit_count": "221 Apartments laut Azizi Folding Map V.10",
|
||||
"price_from": "ab ca. AED 1,04-1,1 Mio je Quelle",
|
||||
"handover": "Q2 2027 bis Q1 2028 je Quelle; final prüfen",
|
||||
"positioning": "Frühphasiger Einstieg in Dubai Islands als künftige Premium-Inseldestination.",
|
||||
"key_facts": [
|
||||
"221 Apartments laut Azizi Folding Map V.10",
|
||||
"Building Height 3B+G+13 laut Azizi Folding Map V.10",
|
||||
"Dubai Islands / Deira Waterfront",
|
||||
"Studios bis 3-Bedroom Apartments sowie 3-4-Bedroom Penthouses",
|
||||
"50/50 Payment Plan wird konsistent in Webquellen genannt",
|
||||
],
|
||||
"research_status": "Keine lokale SharePoint-Abdeckung gefunden; Azizi Folding Map V.10 bestätigt 221 Apartments und Building Height 3B+G+13.",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def slugify(name: str) -> str:
|
||||
value = name.lower()
|
||||
value = value.replace("ê", "e")
|
||||
value = re.sub(r"[^a-z0-9]+", "-", value).strip("-")
|
||||
return value
|
||||
|
||||
|
||||
def parse_official_links() -> list[dict[str, str]]:
|
||||
current_area = ""
|
||||
projects: list[dict[str, str]] = []
|
||||
|
||||
for line in OBSIDIAN_LIST.read_text(encoding="utf-8").splitlines():
|
||||
heading = re.match(r"^###\s+📍\s+(.+)$", line)
|
||||
if heading:
|
||||
current_area = heading.group(1).strip()
|
||||
continue
|
||||
|
||||
link = re.match(r"- \*\*(.+?):\*\* \[(https://www\.azizidevelopments\.com/[^\]]+)\]", line.strip())
|
||||
if not link:
|
||||
continue
|
||||
|
||||
title, url = link.groups()
|
||||
projects.append(
|
||||
{
|
||||
"slug": slugify(title),
|
||||
"title": title,
|
||||
"area": current_area,
|
||||
"official_url": url,
|
||||
}
|
||||
)
|
||||
|
||||
return projects
|
||||
|
||||
|
||||
def main() -> None:
|
||||
official_links = parse_official_links()
|
||||
official_by_url = {item["official_url"]: item for item in official_links}
|
||||
official_by_slug = {item["slug"]: item for item in official_links}
|
||||
|
||||
local = json.loads(LOCAL_EXTRACTION.read_text(encoding="utf-8"))
|
||||
local_projects = local["projects"]
|
||||
|
||||
enriched: list[dict[str, Any]] = []
|
||||
for slug, project in TOP_PROJECTS.items():
|
||||
local_project = local_projects.get(slug, {})
|
||||
if slug == "beach-oasis":
|
||||
local_project = {
|
||||
"source_dirs": [],
|
||||
"coverage": {"files": 0, "images": 0, "xlsx": 0, "small_fact_pdfs": 0},
|
||||
"image_candidates": [],
|
||||
"pdf_extracts": [],
|
||||
"xlsx_extracts": [],
|
||||
}
|
||||
|
||||
official_url = local_project.get("official_url")
|
||||
official = official_by_url.get(official_url or "") or official_by_slug.get(slug)
|
||||
enriched.append(
|
||||
{
|
||||
"slug": slug,
|
||||
"title": project["title"],
|
||||
"official_url": official_url or (official or {}).get("official_url"),
|
||||
"official_list_area": (official or {}).get("area"),
|
||||
**project,
|
||||
"local_sharepoint": {
|
||||
"source_dirs": local_project.get("source_dirs", []),
|
||||
"coverage": local_project.get("coverage", {}),
|
||||
"image_candidates": local_project.get("image_candidates", [])[:6],
|
||||
"fact_sources": [item["path"] for item in local_project.get("pdf_extracts", [])]
|
||||
+ [item["path"] for item in local_project.get("xlsx_extracts", [])],
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
OFFICIAL_LINKS_OUTPUT.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"source": str(OBSIDIAN_LIST),
|
||||
"count": len(official_links),
|
||||
"projects": official_links,
|
||||
},
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
TOP_PROJECTS_OUTPUT.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"source_files": {
|
||||
"official_link_list": str(OBSIDIAN_LIST),
|
||||
"local_sharepoint_extraction": str(LOCAL_EXTRACTION),
|
||||
},
|
||||
"note": "Working research data for the B2in Dubai real-estate page. Pricing, availability and handover dates must be confirmed before publication.",
|
||||
"projects": enriched,
|
||||
},
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
print(f"Wrote {OFFICIAL_LINKS_OUTPUT}")
|
||||
print(f"Wrote {TOP_PROJECTS_OUTPUT}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue