feat(redfin): add sold listing_type
parent
1fc2d8c549
commit
dba1c03081
|
@ -41,6 +41,10 @@ def get_ordered_properties(result: Property) -> list[str]:
|
|||
"apt_max_price",
|
||||
"apt_min_sqft",
|
||||
"apt_max_sqft",
|
||||
"apt_min_beds",
|
||||
"apt_max_beds",
|
||||
"apt_min_baths",
|
||||
"apt_max_baths",
|
||||
"tax_assessed_value",
|
||||
"square_feet",
|
||||
"price_per_sqft",
|
||||
|
|
|
@ -102,6 +102,10 @@ class Property:
|
|||
bldg_min_area: int | None = None
|
||||
|
||||
# apt
|
||||
apt_min_beds: int | None = None
|
||||
apt_max_beds: int | None = None
|
||||
apt_min_baths: float | None = None
|
||||
apt_max_baths: float | None = None
|
||||
apt_min_price: int | None = None
|
||||
apt_max_price: int | None = None
|
||||
apt_min_sqft: int | None = None
|
||||
|
|
|
@ -112,8 +112,7 @@ class RedfinScraper(Scraper):
|
|||
url = f"https://www.redfin.com/stingray/api/v1/search/rentals?al=1&isRentals=true®ion_id={region_id}®ion_type={region_type}"
|
||||
|
||||
response = self.session.get(url)
|
||||
response.raise_for_status() # This will raise an error if the response contains an HTTP error status.
|
||||
|
||||
response.raise_for_status()
|
||||
homes = response.json()
|
||||
|
||||
properties_list = []
|
||||
|
@ -144,9 +143,10 @@ class RedfinScraper(Scraper):
|
|||
site_name=SiteName.REDFIN,
|
||||
listing_type=ListingType.FOR_RENT,
|
||||
address=address,
|
||||
square_feet=sqft_range.get("min", None),
|
||||
beds=bed_range.get("min", None),
|
||||
baths=bath_range.get("min", None),
|
||||
apt_min_beds=bed_range.get("min", None),
|
||||
apt_min_baths=bath_range.get("min", None),
|
||||
apt_max_beds=bed_range.get("max", None),
|
||||
apt_max_baths=bath_range.get("max", None),
|
||||
description=rental_data.get("description", None),
|
||||
latitude=centroid.get("latitude", None),
|
||||
longitude=centroid.get("longitude", None),
|
||||
|
@ -228,8 +228,11 @@ class RedfinScraper(Scraper):
|
|||
|
||||
if self.listing_type == ListingType.FOR_RENT:
|
||||
return self._handle_rentals(region_id, region_type)
|
||||
elif self.listing_type == ListingType.FOR_SALE:
|
||||
url = f"https://www.redfin.com/stingray/api/gis?al=1®ion_id={region_id}®ion_type={region_type}"
|
||||
else:
|
||||
if self.listing_type == ListingType.FOR_SALE:
|
||||
url = f"https://www.redfin.com/stingray/api/gis?al=1®ion_id={region_id}®ion_type={region_type}"
|
||||
else:
|
||||
url = f"https://www.redfin.com/stingray/api/gis?al=1®ion_id={region_id}®ion_type={region_type}&sold_within_days=30"
|
||||
response = self.session.get(url)
|
||||
response_json = json.loads(response.text.replace("{}&&", ""))
|
||||
homes = [
|
||||
|
@ -239,6 +242,3 @@ class RedfinScraper(Scraper):
|
|||
for building in response_json["payload"]["buildings"].values()
|
||||
]
|
||||
return homes
|
||||
else:
|
||||
# Handle other cases, maybe raise an error if the listing type is not recognized.
|
||||
pass
|
||||
|
|
|
@ -15,10 +15,9 @@ def test_redfin():
|
|||
scrape_property(
|
||||
location="Phoenix, AZ, USA", site_name=["redfin"], listing_type="for_rent"
|
||||
),
|
||||
# TODO
|
||||
# scrape_property(
|
||||
# location="Dallas, TX, USA", site_name="redfin", listing_type="sold"
|
||||
# ),
|
||||
scrape_property(
|
||||
location="Dallas, TX, USA", site_name="redfin", listing_type="sold"
|
||||
),
|
||||
scrape_property(location="85281", site_name="redfin"),
|
||||
]
|
||||
|
||||
|
|
Loading…
Reference in New Issue