|
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() |
|
|
|
|
|
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) |
|
|
|
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) |
|
|
|
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("***") |
|
|
|
|
|
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("***") |
|
|
|
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("***") |
|
|
|
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) |
|
|