wrongmove/crawler/rec/query.py

84 lines
2.5 KiB
Python
Raw Normal View History

# from diskcache import Cache
import requests
# from rec.db import RightmoveListing
import urllib3
2023-11-18 12:30:04 +02:00
urllib3.disable_warnings()
# cache = Cache(r"_cache")
headers = {
2023-11-18 12:30:04 +02:00
"Host": "api.rightmove.co.uk",
# 'Accept-Encoding': 'gzip, deflate, br',
2023-11-18 12:30:04 +02:00
"User-Agent": "okhttp/4.10.0",
"Connection": "close",
}
2023-11-18 12:30:04 +02:00
def detail_query(detail_id: int):
params = {
'apiApplication': 'ANDROID',
'appVersion': '3.70.0',
}
url = f'https://api.rightmove.co.uk/api/property/{detail_id}'
response = requests.get(url, params=params, headers=headers, verify=False)
if response.status_code != 200:
raise Exception("Failed due to: ", response.text)
return response.json()
# @cache.memoize()
2024-03-13 16:21:54 +00:00
def listing_query(page: int, min_bedrooms: int, max_bedrooms: int, radius: float, min_price: int, max_price: int, mustNewHome: bool = False, max_days_since_added: int = None) -> dict:
params = {
2023-11-18 12:30:04 +02:00
"locationIdentifier": "POSTCODE^4228216",
"channel": "BUY",
"page": str(page),
"numberOfPropertiesPerPage": "25",
2023-11-18 12:38:54 +02:00
"radius": str(radius),
2023-11-18 12:30:04 +02:00
"sortBy": "distance",
"includeUnavailableProperties": "false",
"propertyTypes": "flat",
"dontShow": "sharedOwnership,retirement",
2023-11-18 12:38:54 +02:00
"minPrice": str(min_price),
"maxPrice": str(max_price),
2023-11-18 12:30:04 +02:00
"minBedrooms": str(min_bedrooms),
"maxBedrooms": str(max_bedrooms),
"apiApplication": "ANDROID",
"appVersion": "3.70.0",
}
2024-03-13 16:21:54 +00:00
if max_days_since_added:
if max_days_since_added not in [1,3,7,14]:
raise Exception("Invalid max days. Can only be", [1,3,7,14])
params['maxDaysSinceAdded'] = max_days_since_added
if mustNewHome:
params['mustHave'] = 'newHome'
2023-11-18 12:30:04 +02:00
response = requests.get(
"https://api.rightmove.co.uk/api/property-listing",
params=params,
headers=headers,
verify=False,
)
if response.status_code != 200:
raise Exception("Failed due to: ", response.text)
return response.json()
2023-11-18 12:30:04 +02:00
if __name__ == "__main__":
2023-11-18 12:38:54 +02:00
response = listing_query(page=1, min_bedrooms=2, max_bedrooms=2, radius=5.0, min_price=150000, max_price=700000)
resp = response
2023-11-18 12:30:04 +02:00
for d in resp["properties"]:
rl = RightmoveListing(
2023-11-18 12:30:04 +02:00
id=d["identifier"],
listing_json=d,
2023-11-18 12:30:04 +02:00
price=d["price"],
updated_timestamp=d["updateDate"],
2023-11-18 13:09:03 +02:00
lat=d["latitude"],
lon=d["longitude"],
)
rl.save()