Spaces:
Running
Running
from typing import Dict | |
import logging | |
from agent.tools.data_providers.RapidDataProviderBase import RapidDataProviderBase, EndpointSchema | |
logger = logging.getLogger(__name__) | |
class ZillowProvider(RapidDataProviderBase): | |
def __init__(self): | |
endpoints: Dict[str, EndpointSchema] = { | |
"search": { | |
"route": "/search", | |
"method": "GET", | |
"name": "Zillow Property Search", | |
"description": "Search for properties by neighborhood, city, or ZIP code with various filters.", | |
"payload": { | |
"location": "Location can be an address, neighborhood, city, or ZIP code (required)", | |
"page": "Page number for pagination (optional, default: 0)", | |
"output": "Output format: json, csv, xlsx (optional, default: json)", | |
"status": "Status of properties: forSale, forRent, recentlySold (optional, default: forSale)", | |
"sortSelection": "Sorting criteria (optional, default: priorityscore)", | |
"listing_type": "Listing type: by_agent, by_owner_other (optional, default: by_agent)", | |
"doz": "Days on Zillow: any, 1, 7, 14, 30, 90, 6m, 12m, 24m, 36m (optional, default: any)", | |
"price_min": "Minimum price (optional)", | |
"price_max": "Maximum price (optional)", | |
"sqft_min": "Minimum square footage (optional)", | |
"sqft_max": "Maximum square footage (optional)", | |
"beds_min": "Minimum number of bedrooms (optional)", | |
"beds_max": "Maximum number of bedrooms (optional)", | |
"baths_min": "Minimum number of bathrooms (optional)", | |
"baths_max": "Maximum number of bathrooms (optional)", | |
"built_min": "Minimum year built (optional)", | |
"built_max": "Maximum year built (optional)", | |
"lotSize_min": "Minimum lot size in sqft (optional)", | |
"lotSize_max": "Maximum lot size in sqft (optional)", | |
"keywords": "Keywords to search for (optional)" | |
} | |
}, | |
"search_address": { | |
"route": "/search_address", | |
"method": "GET", | |
"name": "Zillow Address Search", | |
"description": "Search for a specific property by its full address.", | |
"payload": { | |
"address": "Full property address (required)" | |
} | |
}, | |
"propertyV2": { | |
"route": "/propertyV2", | |
"method": "GET", | |
"name": "Zillow Property Details", | |
"description": "Get detailed information about a specific property by zpid or URL.", | |
"payload": { | |
"zpid": "Zillow property ID (optional if URL is provided)", | |
"url": "Property details URL (optional if zpid is provided)" | |
} | |
}, | |
"zestimate_history": { | |
"route": "/zestimate_history", | |
"method": "GET", | |
"name": "Zillow Zestimate History", | |
"description": "Get historical Zestimate values for a specific property.", | |
"payload": { | |
"zpid": "Zillow property ID (optional if URL is provided)", | |
"url": "Property details URL (optional if zpid is provided)" | |
} | |
}, | |
"similar_properties": { | |
"route": "/similar_properties", | |
"method": "GET", | |
"name": "Zillow Similar Properties", | |
"description": "Find properties similar to a specific property.", | |
"payload": { | |
"zpid": "Zillow property ID (optional if URL or address is provided)", | |
"url": "Property details URL (optional if zpid or address is provided)", | |
"address": "Property address (optional if zpid or URL is provided)" | |
} | |
}, | |
"mortgage_rates": { | |
"route": "/mortgage/rates", | |
"method": "GET", | |
"name": "Zillow Mortgage Rates", | |
"description": "Get current mortgage rates for different loan programs and conditions.", | |
"payload": { | |
"program": "Loan program (required): Fixed30Year, Fixed20Year, Fixed15Year, Fixed10Year, ARM3, ARM5, ARM7, etc.", | |
"state": "State abbreviation (optional, default: US)", | |
"refinance": "Whether this is for refinancing (optional, default: false)", | |
"loanType": "Type of loan: Conventional, etc. (optional)", | |
"loanAmount": "Loan amount category: Micro, SmallConforming, Conforming, SuperConforming, Jumbo (optional)", | |
"loanToValue": "Loan to value ratio: Normal, High, VeryHigh (optional)", | |
"creditScore": "Credit score category: Low, High, VeryHigh (optional)", | |
"duration": "Duration in days (optional, default: 30)" | |
} | |
}, | |
} | |
base_url = "https://zillow56.p.rapidapi.com" | |
super().__init__(base_url, endpoints) | |
if __name__ == "__main__": | |
from dotenv import load_dotenv | |
from time import sleep | |
load_dotenv() | |
tool = ZillowProvider() | |
# Example for searching properties in Houston | |
search_result = tool.call_endpoint( | |
route="search", | |
payload={ | |
"location": "houston, tx", | |
"status": "forSale", | |
"sortSelection": "priorityscore", | |
"listing_type": "by_agent", | |
"doz": "any" | |
} | |
) | |
logger.debug("Search Result: %s", search_result) | |
logger.debug("***") | |
logger.debug("***") | |
logger.debug("***") | |
sleep(1) | |
# Example for searching by address | |
address_result = tool.call_endpoint( | |
route="search_address", | |
payload={ | |
"address": "1161 Natchez Dr College Station Texas 77845" | |
} | |
) | |
logger.debug("Address Search Result: %s", address_result) | |
logger.debug("***") | |
logger.debug("***") | |
logger.debug("***") | |
sleep(1) | |
# Example for getting property details | |
property_result = tool.call_endpoint( | |
route="propertyV2", | |
payload={ | |
"zpid": "7594920" | |
} | |
) | |
logger.debug("Property Details Result: %s", property_result) | |
sleep(1) | |
logger.debug("***") | |
logger.debug("***") | |
logger.debug("***") | |
# Example for getting zestimate history | |
zestimate_result = tool.call_endpoint( | |
route="zestimate_history", | |
payload={ | |
"zpid": "20476226" | |
} | |
) | |
logger.debug("Zestimate History Result: %s", zestimate_result) | |
sleep(1) | |
logger.debug("***") | |
logger.debug("***") | |
logger.debug("***") | |
# Example for getting similar properties | |
similar_result = tool.call_endpoint( | |
route="similar_properties", | |
payload={ | |
"zpid": "28253016" | |
} | |
) | |
logger.debug("Similar Properties Result: %s", similar_result) | |
sleep(1) | |
logger.debug("***") | |
logger.debug("***") | |
logger.debug("***") | |
# Example for getting mortgage rates | |
mortgage_result = tool.call_endpoint( | |
route="mortgage_rates", | |
payload={ | |
"program": "Fixed30Year", | |
"state": "US", | |
"refinance": "false", | |
"loanType": "Conventional", | |
"loanAmount": "Conforming", | |
"loanToValue": "Normal", | |
"creditScore": "Low", | |
"duration": "30" | |
} | |
) | |
logger.debug("Mortgage Rates Result: %s", mortgage_result) | |