Обновление Досадно, продолжая работать над этим, я застрял из -за подробностей, перечисленных здесь: https://medium Анкет Короче говоря, Zoopla больше не активно поддерживает API, что означает, что клавиши API просто случайно перестают работать без предупреждения. Вернемся к чертежной доске, я полагаю …
Для небольшого праздничного проекта я хотел попытаться построить что -то, чтобы помочь с нерабочевой вещью, которую я нашел, была неэффективной – поиск недвижимости. Мой партнер и я надеемся в ближайшее время купить место, и мы обнаружили, что это разочаровывает, пытаясь не отставать от страниц недвижимости, плюс, кому не нравится находить что -то, что немного раздражает, а затем часами пытаясь избавиться от этого зуд!
Эта статья является первой из нескольких (в зависимости от того, что я захожу), и я добавлю ссылки на последующие документы внизу. Вещи, которые будут рассмотрены позже, будут включать интеграцию с AIPI Airtable для хорошего представления с изображениями в электронном таблице, используя Lambda и CloudFormation, чтобы сделать работу повторяемой для других, а затем использование событий CloudWatch и Eventbridge для автоматизации процесса!
Первоначальное исследование
Моя первая мысль была, что веб -скребок может быть хорошим вариантом, и сайт, который я использую чаще всего при рассмотрении свойств, является правой. Тем не менее, небольшой гугл быстро приведет меня к этому разделу «Th & C RightMove»:
Вы не должны использовать или пытаться использовать какую -либо автоматизированную программу (включая, без ограничений, любого паука или другого веб -гусеника) для доступа к нашей системе или на этом сайте. Вы не должны использовать какую -либо технологию соскоба на сайте. Любое такое использование или попытка использования автоматизированной программы должно быть неправильным использованием нашей системы и этого сайта. Получение доступа к любой части нашей системы или этого сайта с помощью любых таких автоматизированных программ строго несанкционировано.
От Условия использования RightMove
Так что это был конец этой мысли …
Zoopla является еще одним часто используемым объектом недвижимости в Великобритании, так что это был следующий вариант. У них есть освежающее мнение о развитии третьей стороны, и они имеют Обширный API С тем, что я видел до сих пор, чтобы быть хорошим набором документов, так что это казалось хорошим местом для начала!
Широкий план
Первая версия для этого не будет без сервера, просто чтобы убедиться, что я правильно понял. Я хочу иметь возможность запросить Zoopla, используя сценарий через реплику узла, а затем иметь возможность отправлять результаты в подходящее место для просмотра. Я играл с несколькими идеями, но я думаю, что для начала с Airtable (на бесплатной версии!) Достаточно хорошо. Это означает, что это не будет полностью без серверного решения, но мы можем потенциально заменить его дальше вниз по линии. Оттуда я использую лямбду, чтобы провести связь с Zoopla/Airtable, а затем установлю ее на определенную частоту, используя Cloudwatch Cron-Event.
Шаг 1: тест Zoopla
Первым шагом здесь было зарегистрироваться для Zoopla Developer API для ключа API, необходимых для заработки. Это было довольно просто, просто нуждались в некоторых стандартных деталях и некоторой склонности к тому, что вы хотите с этим делать. Затем, чтобы увидеть, какие результаты я получу, я быстро проверил Списки свойств конечная точка используя почтальон. Добавление куча полей, которые я чувствовал, было бы полезно (почтовый индекс, RADIUS, listing_status, Maximum_price, Minimum_beds и, конечно, API_KEY), показало довольно обширный результат (см. Ниже).
Шаг 2: Код прототипа
Несмотря на то, что я хочу получить это в Lambda, я подумал, что лучше всего попробовать с помощью JavaScript-Script локально, чтобы повторить то, что я сделал с почтальником, и позволил мне отделить параметры для запроса.
Чтобы разделить логику параметров, используемых для конкретного запроса и самого запроса, пока я написал параметры, с которыми я хочу проверить на локальном Params.json Файл, который выглядит так:
{
"api_key": "INSERTAPIKEYHERE",
"radius": 1,
"listing_status": "sale",
"maximum_price": 1221000,
"minimum_beds": 1,
"postcode": "NW1 6XE",
"page_size": 10
}
(Я, конечно, изменил демонстрационные параметры здесь, чтобы быть для Шерлока Холмса, который из -за повышения цен на жилье теперь будет связан с бюджетом 0,001221b £ для недвижимости на улице Бейкер)
Эти параметры могут затем использоваться вместе с Axios, чтобы запросить конечную точку Zoopla, как SO:
const axios = require("axios");
const fs = require("fs");
const propertyListingUrl = "https://api.zoopla.co.uk/api/v1/property_listings.js";
const getParams = async () => {
const params = await fs.readFileSync("./params.json");
return JSON.parse(params);
};
const buildConfig = async () => {
return {
params: await getParams(),
url: propertyListingUrl,
headers: {},
method: "get"
};
};
const axiosRequest = async config => {
const result = axios(config);
return result;
};
const queryZooplaPropertyListing = async () => {
const config = await buildConfig();
const result = await axiosRequest(config);
return result.data;
};
module.exports = {
queryZoopla: queryZooplaPropertyListing
};
Здесь, в главном Queryzooplapropertylisting Функция Мы создаем нашу конфигурацию, которая включает в себя чтение в наших параметрах из ./params.json , затем мы используем эту встроенную конфигурацию с Axios, чтобы запросить списки свойств с URL Zoopla (обратите внимание, что я добавил .js на URL, чтобы получить ответ JSON!)
Это использует функциональность асинкваита Node, так как как чтение файлов, так и сам запрос Zoopla являются асинхронными процессами.
После того, как обещания разрешились, экспортируемый Queryzoopla Функция должна затем возвращать объект, который выглядит так:
{
"country": "England",
"result_count": 196,
"longitude": -0.158541,
"area_name": " NW1",
"listing": [
{
"country_code": "gb",
"num_floors": 0,
"image_150_113_url": "https://lid.zoocdn.com/150/113/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"listing_status": "sale",
"num_bedrooms": 2,
"location_is_approximate": 0,
"image_50_38_url": "https://lid.zoocdn.com/50/38/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"latitude": 51.525627,
"furnished_state": null,
"agent_address": "24 Charlotte Street, London",
"category": "Residential",
"property_type": "Flat",
"longitude": -0.162988,
"thumbnail_url": "https://lid.zoocdn.com/80/60/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"description": "360' virtual tour available. A very well presented second floor apartment set within a popular gated development located just moments away from the open spaces of Regent's Park, Baker Street & Marylebone stations and numerous shops, bars and restaurants. The property is quietly located overlooking the courtyard gardens comprising two bedrooms, two bathrooms, a reception room, seperate kitchen with integrated appliances and 2 x private balconys. The apartment is sold with an underground parking space. As a resident of the building benefits include concierge, access to a communal gym, a swimming pool and landscaped communal gardens. Alberts Court is set within the modern Palgrave Gardens development to the west of Regent's Park. The Leaseholders are currently in the process of purchasing the freehold.The building provides easy access to the West End, The City and various transport links around and out of London.",
"post_town": "London",
"details_url": "https://www.zoopla.co.uk/for-sale/details/55172443?utm_source=v1:8aaVEj3AGALC-xWzf7867y2rJwMs0-2Y&utm_medium=api",
"short_description": "360' virtual tour available. A very well presented second floor apartment set within a popular gated development located just moments away from the open spaces of Regent's Park, Baker Street & Marylebone stations and numerous shops, bars (truncated)",
"outcode": "NW1",
"image_645_430_url": "https://lid.zoocdn.com/645/430/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"county": "London",
"price": "1200000",
"listing_id": "55172443",
"image_caption": "Picture No. 13",
"image_80_60_url": "https://lid.zoocdn.com/80/60/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"status": "for_sale",
"agent_name": "Hudsons Property",
"num_recepts": 1,
"country": "England",
"first_published_date": "2020-07-09 08:44:51",
"displayable_address": "Alberts Court, 2 Palgrave Gardens, Regent's Park, London NW1",
"floor_plan": [
"https://lc.zoocdn.com/4cb0366075b14e99efe3a1a7b24a608f4c7a92f0.jpg"
],
"street_name": "Alberts Court",
"num_bathrooms": 2,
"agent_logo": "https://st.zoocdn.com/zoopla_static_agent_logo_(62918).jpeg",
"price_change": [
{
"direction": "",
"date": "2020-06-28 22:30:07",
"percent": "0%",
"price": 1200000
}
],
"agent_phone": "020 3641 7089",
"image_354_255_url": "https://lid.zoocdn.com/354/255/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"image_url": "https://lid.zoocdn.com/354/255/2cd80711fb52d57e85068b025920836abb906b89.jpg",
"last_published_date": "2020-07-09 08:44:51"
}
],
"street": "",
"radius": "0.5",
"town": "",
"latitude": 51.523659,
"county": "London",
"bounding_box": {
"longitude_min": "-0.170158861045769",
"latitude_min": "51.5164304665016",
"longitude_max": "-0.146923138954231",
"latitude_max": "51.5308875334984"
},
"postcode": "NW1 6XE"
}
И вуаля. Шеленкая 2 кровати, 2 ванная комната возле Бейкер -стрит для Шерлока, чтобы переехать! С целой кучей дополнительных данных для загрузки. Оценка этого будет первой частью следующего шага, поскольку мы стремимся доставить эти данные в Airtable, так что следите за обновлениями!
Вы можете увидеть этот код полностью в https://github.com/jcts3/serverlessPropertyHelper/tree/workingLocalQuery
Оригинал: “https://dev.to/jcts3/building-a-serverless-uk-property-helper-using-zoopla-part-1-not-serverless-yet-9nd”