diff --git a/homeharvest/core/scrapers/redfin/__init__.py b/homeharvest/core/scrapers/redfin/__init__.py index 1f3c058..4a61df1 100644 --- a/homeharvest/core/scrapers/redfin/__init__.py +++ b/homeharvest/core/scrapers/redfin/__init__.py @@ -1,6 +1,7 @@ import json from ..types import Home, Address from .. import Scraper +from typing import Any class RedfinScraper(Scraper): @@ -19,8 +20,34 @@ def handle_location(self): return response_json['payload']['sections'][0]['rows'][0].split('_')[1] @staticmethod - def parse_home(home) -> Home: - ... + def parse_home(home: dict) -> Home: + address = Address( + address_one=home['streetLine']['value'], + city=home['city'], + state=home['state'], + zip_code=home['zip'] + ) + + url = 'https://www.redfin.com{}'.format(home['url']) + + def get_value(key: str) -> Any | None: + if key in home and 'value' in home[key]: + return home[key]['value'] + + return Home( + address=address, + url=url, + beds=home['beds'] if 'beds' in home else None, + baths=home['baths'] if 'baths' in home else None, + stories=home['stories'] if 'stories' in home else None, + agent_name=get_value('listingAgent'), + description=home['listingRemarks'] if 'listingRemarks' in home else None, + year_built=get_value('yearBuilt'), + square_feet=get_value('sqFt'), + price_per_square_foot=get_value('pricePerSqFt'), + price=get_value('price'), + mls_id=get_value('mlsId') + ) def search(self): region_id = self.handle_location() diff --git a/homeharvest/core/scrapers/types.py b/homeharvest/core/scrapers/types.py index 33b30b9..9a8da94 100644 --- a/homeharvest/core/scrapers/types.py +++ b/homeharvest/core/scrapers/types.py @@ -21,3 +21,15 @@ class Address: @dataclass class Home: address: Address + url: str + + beds: int | None = None + baths: int | None = None + stories: int | None = None + agent_name: str | None = None + description: str | None = None + year_built: int | None = None + square_feet: int | None = None + price_per_square_foot: int | None = None + price: int | None = None + mls_id: str | None = None