| 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) |
| |