51 lines
2 KiB
Python
51 lines
2 KiB
Python
|
|
from datetime import datetime
|
||
|
|
from handlers.base_handler import BaseHandler
|
||
|
|
from handlers.howoge_handler import HowogeHandler
|
||
|
|
from handlers.gewobag_handler import GewobagHandler
|
||
|
|
from handlers.degewo_handler import DegewoHandler
|
||
|
|
from handlers.gesobau_handler import GesobauHandler
|
||
|
|
from handlers.stadtundland_handler import StadtUndLandHandler
|
||
|
|
from handlers.wbm_handler import WBMHandler
|
||
|
|
|
||
|
|
class ApplicationHandler:
|
||
|
|
def __init__(self, browser_context):
|
||
|
|
self.context = browser_context
|
||
|
|
self.handlers = {
|
||
|
|
"howoge": HowogeHandler(browser_context),
|
||
|
|
"gewobag": GewobagHandler(browser_context),
|
||
|
|
"degewo": DegewoHandler(browser_context),
|
||
|
|
"gesobau": GesobauHandler(browser_context),
|
||
|
|
"stadtundland": StadtUndLandHandler(browser_context),
|
||
|
|
"wbm": WBMHandler(browser_context),
|
||
|
|
}
|
||
|
|
|
||
|
|
async def apply(self, listing: dict) -> dict:
|
||
|
|
company = self._detect_company(listing.get("link", ""))
|
||
|
|
handler = self.handlers.get(company)
|
||
|
|
result = {
|
||
|
|
"listing_id": listing.get("id"),
|
||
|
|
"company": company,
|
||
|
|
"link": listing.get("link"),
|
||
|
|
"timestamp": datetime.now().isoformat(),
|
||
|
|
"success": False,
|
||
|
|
"message": "",
|
||
|
|
"address": listing.get("address", ""),
|
||
|
|
"rooms": listing.get("rooms", ""),
|
||
|
|
"price": listing.get("price", "")
|
||
|
|
}
|
||
|
|
|
||
|
|
if handler:
|
||
|
|
result = await handler.apply(listing, result)
|
||
|
|
else:
|
||
|
|
result["message"] = f"No handler found for company: {company}"
|
||
|
|
|
||
|
|
return result
|
||
|
|
|
||
|
|
def _detect_company(self, link: str) -> str:
|
||
|
|
if "howoge.de" in link: return "howoge"
|
||
|
|
elif "gewobag.de" in link: return "gewobag"
|
||
|
|
elif "degewo.de" in link: return "degewo"
|
||
|
|
elif "gesobau.de" in link: return "gesobau"
|
||
|
|
elif "stadtundland.de" in link: return "stadtundland"
|
||
|
|
elif "wbm.de" in link: return "wbm"
|
||
|
|
return "unknown"
|