mirror of
https://github.com/Bunsly/HomeHarvest.git
synced 2026-03-04 19:44:29 -08:00
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
716 lines
16 KiB
Python
716 lines
16 KiB
Python
SEARCH_RESULTS_FRAGMENT = """
|
|
fragment SearchFragment on SearchHome {
|
|
__typename
|
|
pending_date
|
|
listing_id
|
|
property_id
|
|
href
|
|
permalink
|
|
list_date
|
|
status
|
|
mls_status
|
|
last_sold_price
|
|
last_sold_date
|
|
last_status_change_date
|
|
last_update_date
|
|
list_price
|
|
list_price_max
|
|
list_price_min
|
|
price_per_sqft
|
|
tags
|
|
open_houses {
|
|
start_date
|
|
end_date
|
|
description
|
|
time_zone
|
|
dst
|
|
href
|
|
methods
|
|
}
|
|
details {
|
|
category
|
|
text
|
|
parent_category
|
|
}
|
|
pet_policy {
|
|
cats
|
|
dogs
|
|
dogs_small
|
|
dogs_large
|
|
__typename
|
|
}
|
|
units {
|
|
availability {
|
|
date
|
|
__typename
|
|
}
|
|
description {
|
|
baths_consolidated
|
|
baths
|
|
beds
|
|
sqft
|
|
__typename
|
|
}
|
|
photos(https: true) {
|
|
title
|
|
href
|
|
tags {
|
|
label
|
|
}
|
|
}
|
|
list_price
|
|
__typename
|
|
}
|
|
flags {
|
|
is_contingent
|
|
is_pending
|
|
is_new_construction
|
|
}
|
|
description {
|
|
type
|
|
sqft
|
|
beds
|
|
baths_full
|
|
baths_half
|
|
lot_sqft
|
|
year_built
|
|
garage
|
|
type
|
|
name
|
|
stories
|
|
text
|
|
}
|
|
source {
|
|
id
|
|
listing_id
|
|
}
|
|
hoa {
|
|
fee
|
|
}
|
|
location {
|
|
address {
|
|
street_direction
|
|
street_number
|
|
street_name
|
|
street_suffix
|
|
line
|
|
unit
|
|
city
|
|
state_code
|
|
postal_code
|
|
coordinate {
|
|
lon
|
|
lat
|
|
}
|
|
}
|
|
county {
|
|
name
|
|
fips_code
|
|
}
|
|
neighborhoods {
|
|
name
|
|
}
|
|
}
|
|
tax_record {
|
|
cl_id
|
|
public_record_id
|
|
last_update_date
|
|
apn
|
|
tax_parcel_id
|
|
}
|
|
primary_photo(https: true) {
|
|
href
|
|
}
|
|
advertisers {
|
|
email
|
|
broker {
|
|
name
|
|
fulfillment_id
|
|
}
|
|
type
|
|
name
|
|
fulfillment_id
|
|
builder {
|
|
name
|
|
fulfillment_id
|
|
}
|
|
phones {
|
|
ext
|
|
primary
|
|
type
|
|
number
|
|
}
|
|
office {
|
|
name
|
|
email
|
|
fulfillment_id
|
|
href
|
|
phones {
|
|
number
|
|
type
|
|
primary
|
|
ext
|
|
}
|
|
mls_set
|
|
}
|
|
corporation {
|
|
specialties
|
|
name
|
|
bio
|
|
href
|
|
fulfillment_id
|
|
}
|
|
mls_set
|
|
nrds_id
|
|
state_license
|
|
rental_corporation {
|
|
fulfillment_id
|
|
}
|
|
rental_management {
|
|
name
|
|
href
|
|
fulfillment_id
|
|
}
|
|
}
|
|
current_estimates {
|
|
__typename
|
|
source {
|
|
__typename
|
|
type
|
|
name
|
|
}
|
|
estimate
|
|
estimateHigh: estimate_high
|
|
estimateLow: estimate_low
|
|
date
|
|
isBestHomeValue: isbest_homevalue
|
|
}
|
|
}
|
|
"""
|
|
|
|
_SEARCH_HOMES_DATA_BASE = """{
|
|
pending_date
|
|
listing_id
|
|
property_id
|
|
href
|
|
permalink
|
|
list_date
|
|
status
|
|
mls_status
|
|
last_sold_price
|
|
last_sold_date
|
|
last_status_change_date
|
|
last_update_date
|
|
list_price
|
|
list_price_max
|
|
list_price_min
|
|
price_per_sqft
|
|
tags
|
|
open_houses {
|
|
start_date
|
|
end_date
|
|
description
|
|
time_zone
|
|
dst
|
|
href
|
|
methods
|
|
}
|
|
details {
|
|
category
|
|
text
|
|
parent_category
|
|
}
|
|
pet_policy {
|
|
cats
|
|
dogs
|
|
dogs_small
|
|
dogs_large
|
|
__typename
|
|
}
|
|
units {
|
|
availability {
|
|
date
|
|
__typename
|
|
}
|
|
description {
|
|
baths_consolidated
|
|
baths
|
|
beds
|
|
sqft
|
|
__typename
|
|
}
|
|
photos(https: true) {
|
|
title
|
|
href
|
|
tags {
|
|
label
|
|
}
|
|
}
|
|
list_price
|
|
__typename
|
|
}
|
|
flags {
|
|
is_contingent
|
|
is_pending
|
|
is_new_construction
|
|
}
|
|
description {
|
|
type
|
|
sqft
|
|
beds
|
|
baths_full
|
|
baths_half
|
|
lot_sqft
|
|
year_built
|
|
garage
|
|
type
|
|
name
|
|
stories
|
|
text
|
|
}
|
|
source {
|
|
id
|
|
listing_id
|
|
}
|
|
hoa {
|
|
fee
|
|
}
|
|
location {
|
|
address {
|
|
street_direction
|
|
street_number
|
|
street_name
|
|
street_suffix
|
|
line
|
|
unit
|
|
city
|
|
state_code
|
|
postal_code
|
|
coordinate {
|
|
lon
|
|
lat
|
|
}
|
|
}
|
|
county {
|
|
name
|
|
fips_code
|
|
}
|
|
neighborhoods {
|
|
name
|
|
}
|
|
}
|
|
tax_record {
|
|
cl_id
|
|
public_record_id
|
|
last_update_date
|
|
apn
|
|
tax_parcel_id
|
|
}
|
|
primary_photo(https: true) {
|
|
href
|
|
}
|
|
photos(https: true) {
|
|
title
|
|
href
|
|
tags {
|
|
label
|
|
}
|
|
}
|
|
advertisers {
|
|
email
|
|
broker {
|
|
name
|
|
fulfillment_id
|
|
}
|
|
type
|
|
name
|
|
fulfillment_id
|
|
builder {
|
|
name
|
|
fulfillment_id
|
|
}
|
|
phones {
|
|
ext
|
|
primary
|
|
type
|
|
number
|
|
}
|
|
office {
|
|
name
|
|
email
|
|
fulfillment_id
|
|
href
|
|
phones {
|
|
number
|
|
type
|
|
primary
|
|
ext
|
|
}
|
|
mls_set
|
|
}
|
|
corporation {
|
|
specialties
|
|
name
|
|
bio
|
|
href
|
|
fulfillment_id
|
|
}
|
|
mls_set
|
|
nrds_id
|
|
state_license
|
|
rental_corporation {
|
|
fulfillment_id
|
|
}
|
|
rental_management {
|
|
name
|
|
href
|
|
fulfillment_id
|
|
}
|
|
}
|
|
"""
|
|
|
|
|
|
HOME_FRAGMENT = """
|
|
fragment SearchFragment on Home {
|
|
__typename
|
|
pending_date
|
|
listing_id
|
|
property_id
|
|
href
|
|
permalink
|
|
list_date
|
|
status
|
|
mls_status
|
|
last_sold_price
|
|
last_sold_date
|
|
last_status_change_date
|
|
last_update_date
|
|
list_price
|
|
list_price_max
|
|
list_price_min
|
|
price_per_sqft
|
|
tags
|
|
open_houses {
|
|
start_date
|
|
end_date
|
|
description
|
|
time_zone
|
|
dst
|
|
href
|
|
methods
|
|
}
|
|
details {
|
|
category
|
|
text
|
|
parent_category
|
|
}
|
|
pet_policy {
|
|
cats
|
|
dogs
|
|
dogs_small
|
|
dogs_large
|
|
__typename
|
|
}
|
|
units {
|
|
availability {
|
|
date
|
|
__typename
|
|
}
|
|
description {
|
|
baths_consolidated
|
|
baths
|
|
beds
|
|
sqft
|
|
__typename
|
|
}
|
|
photos(https: true) {
|
|
title
|
|
href
|
|
tags {
|
|
label
|
|
}
|
|
}
|
|
list_price
|
|
__typename
|
|
}
|
|
flags {
|
|
is_contingent
|
|
is_pending
|
|
is_new_construction
|
|
}
|
|
description {
|
|
type
|
|
sqft
|
|
beds
|
|
baths_full
|
|
baths_half
|
|
lot_sqft
|
|
year_built
|
|
garage
|
|
type
|
|
name
|
|
stories
|
|
text
|
|
}
|
|
source {
|
|
id
|
|
listing_id
|
|
}
|
|
hoa {
|
|
fee
|
|
}
|
|
location {
|
|
address {
|
|
street_direction
|
|
street_number
|
|
street_name
|
|
street_suffix
|
|
line
|
|
unit
|
|
city
|
|
state_code
|
|
postal_code
|
|
coordinate {
|
|
lon
|
|
lat
|
|
}
|
|
}
|
|
county {
|
|
name
|
|
fips_code
|
|
}
|
|
neighborhoods {
|
|
name
|
|
}
|
|
parcel {
|
|
parcel_id
|
|
}
|
|
}
|
|
tax_record {
|
|
cl_id
|
|
public_record_id
|
|
last_update_date
|
|
apn
|
|
tax_parcel_id
|
|
}
|
|
primary_photo(https: true) {
|
|
href
|
|
}
|
|
photos(https: true) {
|
|
title
|
|
href
|
|
tags {
|
|
label
|
|
}
|
|
}
|
|
advertisers {
|
|
email
|
|
broker {
|
|
name
|
|
fulfillment_id
|
|
}
|
|
type
|
|
name
|
|
fulfillment_id
|
|
builder {
|
|
name
|
|
fulfillment_id
|
|
}
|
|
phones {
|
|
ext
|
|
primary
|
|
type
|
|
number
|
|
}
|
|
office {
|
|
name
|
|
email
|
|
fulfillment_id
|
|
href
|
|
phones {
|
|
number
|
|
type
|
|
primary
|
|
ext
|
|
}
|
|
mls_set
|
|
}
|
|
corporation {
|
|
specialties
|
|
name
|
|
bio
|
|
href
|
|
fulfillment_id
|
|
}
|
|
mls_set
|
|
nrds_id
|
|
state_license
|
|
rental_corporation {
|
|
fulfillment_id
|
|
}
|
|
rental_management {
|
|
name
|
|
href
|
|
fulfillment_id
|
|
}
|
|
}
|
|
nearbySchools: nearby_schools(radius: 5.0, limit_per_level: 3) {
|
|
__typename schools { district { __typename id name } }
|
|
}
|
|
popularity {
|
|
periods {
|
|
clicks_total
|
|
views_total
|
|
dwell_time_mean
|
|
dwell_time_median
|
|
leads_total
|
|
shares_total
|
|
saves_total
|
|
last_n_days
|
|
}
|
|
}
|
|
taxHistory: tax_history { __typename tax year assessment { __typename building land total } }
|
|
property_history {
|
|
date
|
|
event_name
|
|
price
|
|
}
|
|
monthly_fees {
|
|
description
|
|
display_amount
|
|
}
|
|
one_time_fees {
|
|
description
|
|
display_amount
|
|
}
|
|
parking {
|
|
unassigned_space_rent
|
|
assigned_spaces_available
|
|
description
|
|
assigned_space_rent
|
|
}
|
|
terms {
|
|
text
|
|
category
|
|
}
|
|
estimates {
|
|
__typename
|
|
currentValues: current_values {
|
|
__typename
|
|
source { __typename type name }
|
|
estimate
|
|
estimateHigh: estimate_high
|
|
estimateLow: estimate_low
|
|
date
|
|
isBestHomeValue: isbest_homevalue
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
|
|
HOMES_DATA = """%s
|
|
nearbySchools: nearby_schools(radius: 5.0, limit_per_level: 3) {
|
|
__typename schools { district { __typename id name } }
|
|
}
|
|
monthly_fees {
|
|
description
|
|
display_amount
|
|
}
|
|
one_time_fees {
|
|
description
|
|
display_amount
|
|
}
|
|
popularity {
|
|
periods {
|
|
clicks_total
|
|
views_total
|
|
dwell_time_mean
|
|
dwell_time_median
|
|
leads_total
|
|
shares_total
|
|
saves_total
|
|
last_n_days
|
|
}
|
|
}
|
|
location {
|
|
parcel {
|
|
parcel_id
|
|
}
|
|
}
|
|
parking {
|
|
unassigned_space_rent
|
|
assigned_spaces_available
|
|
description
|
|
assigned_space_rent
|
|
}
|
|
terms {
|
|
text
|
|
category
|
|
}
|
|
taxHistory: tax_history { __typename tax year assessment { __typename building land total } }
|
|
estimates {
|
|
__typename
|
|
currentValues: current_values {
|
|
__typename
|
|
source { __typename type name }
|
|
estimate
|
|
estimateHigh: estimate_high
|
|
estimateLow: estimate_low
|
|
date
|
|
isBestHomeValue: isbest_homevalue
|
|
}
|
|
}
|
|
}""" % _SEARCH_HOMES_DATA_BASE
|
|
|
|
SEARCH_HOMES_DATA = """%s
|
|
current_estimates {
|
|
__typename
|
|
source {
|
|
__typename
|
|
type
|
|
name
|
|
}
|
|
estimate
|
|
estimateHigh: estimate_high
|
|
estimateLow: estimate_low
|
|
date
|
|
isBestHomeValue: isbest_homevalue
|
|
}
|
|
}""" % _SEARCH_HOMES_DATA_BASE
|
|
|
|
# Query body using inline fields (kept for backward compatibility)
|
|
GENERAL_RESULTS_QUERY_BODY = """{
|
|
count
|
|
total
|
|
results %s
|
|
}""" % SEARCH_HOMES_DATA
|
|
|
|
GENERAL_RESULTS_QUERY = """{
|
|
__typename
|
|
count
|
|
total
|
|
results {
|
|
__typename
|
|
...SearchFragment
|
|
...ListingPhotosFragment
|
|
}
|
|
}"""
|
|
|
|
LISTING_PHOTOS_FRAGMENT = """
|
|
fragment ListingPhotosFragment on SearchHome {
|
|
__typename
|
|
photos(https: true) {
|
|
__typename
|
|
title
|
|
href
|
|
tags {
|
|
__typename
|
|
label
|
|
probability
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
|
|
MORPHEUS_SUGGESTIONS_QUERY = """query GetMorpheusSuggestions($searchInput: SearchSuggestionsInput!) { search_suggestions(search_input: $searchInput) { __typename geo_results { __typename type text geo { __typename _id _score mpr_id area_type city state_code postal_code country lat lon county counties { __typename name fips state_code } slug_id geo_id score name city_slug_id centroid { __typename lat lon } county_needed_for_uniq street line school school_id school_district school_district_id has_catchment university university_id neighborhood park } } no_matches has_results filter_criteria { __typename property_type { __typename type } price { __typename min max pattern } bed { __typename min max pattern } bath { __typename min max pattern } feature_tags { __typename tags } listing_status { __typename new_construction existing_homes foreclosures recently_sold fifty_five_plus open_house hide_new_construction hide_existing_homes hide_foreclosures hide_recently_sold hide_fifty_five_plus hide_open_house virtual_tour three_d_tour contingent hide_contingent pending hide_pending } keyword { __typename keywords } garage { __typename min max pattern } age { __typename min max pattern } stories { __typename min max pattern } lot_size { __typename min max pattern } square_feet { __typename min max pattern } home_size { __typename min max pattern } basement finished_basement pool waterfront fireplace detached_garage expand { __typename radius } hoa { __typename type fee } } message_data { __typename property_type pool waterfront fireplace basement finished_basement detached_garage listing_status { __typename new_construction existing_homes foreclosures recently_sold fifty_five_plus open_house hide_new_construction hide_existing_homes hide_foreclosures hide_recently_sold hide_fifty_five_plus hide_open_house } keywords price { __typename min max pattern } bed { __typename min max pattern } bath { __typename min max pattern } garage { __typename min max pattern } stories { __typename min max pattern } age { __typename min max pattern } lot_size { __typename min max pattern } square_feet { __typename min max pattern } } original_string morpheus_context } }"""
|