Оффтоп Philipp Kontsarenko
7 989

Вместо агента: разработчик автоматизировал поиск жилья в Кремниевой долине при помощи Slack-бота

Разработчик из Бостона Вик Паручури описал в своём блоге процесс поиска жилья в Сан-Франциско. Чтобы не тратить время на сортировку объявлений на различных сайтах недвижимости, программист создал Slack-бота, который следил за новыми объявлениями и проверял их на соответствие критериям поиска.

Разработчик Вик Паручури переехал из Бостона в Кремниевую долину весной 2016 года. «Моя девушка и я слышали все возможные истории ужасов о рынке недвижимости Сан-Франциско. То, что Google по запросу "Как найти жилье в Сан-Франциско" выдает такое множество страниц с советами, только подтверждает это», — пишет Паручури.

Хорошее жилье в Долине долго не пустует — обычно апартаменты достаются первому пришедшему с комплектом документов и предоплатой, обратил внимание разработчик. Сначала он начал поиск с изучения популярных сайтов с предложениями аренды: Padmapper, LiveLovely, Craigslist.

Однако все они не имели онлайн-ленты, в которой бы объявления появлялись по мере их добавления арендодателями, и не предлагали сортировки по необходимым критериям — например, транспортная доступность и район. Помимо этого, многие объявления изначально появлялись на Craigslist, после чего дублировались на других сайтах.

Разработчик решил автоматизировать процесс и составил требования к предполагаемому механизму поиска:

  • получать уведомления в реальном времени как только объявление появляется на Craigslist;
  • фильтровать объявления по районам;
  • фильтровать объявления по транспортной доступности;
  • сравнивать объявления;
  • иметь возможность сразу связаться с арендодателем.

В результате Паручури приступил к разработке алгоритм для поиска, который будет:

  • отслеживать новые публикации на Craigslist;
  • проверять публикацию на соответствие необходимым критериям;
  • отправлять сообщение в Slack со списком доступных апартаментов.

Сервис Craiglist не имеет собственного API, поэтому разработчик использовал скрипт, который отслеживал новый контент на страницах сервиса и формировал из него записи в таблицу: дата добавления, координаты местоположения, наличие изображения, название, стоимость и URL.

Затем разработанный Паручури скрипт проверял запись на соответствие критериям поиска. Например, разработчик со своей девушкой сформировали список районов, наиболее пригодных для жизни и отметили их на карте в сервисе BoundingBox. Таким образом они получили GPS-координаты, которые и сравнивали с GPS-коордианатами апартаментов на Craigslist.

Часть арендодателей не указывает точный адрес апартаментов, а использует название района. Для таких случаев разработчик также предусмотрел фильтрацию, составив список районов, подходящих для жизни.

Далее Паручури проверял запись на соответствие критерию транспортной доступности. По Google Maps он собрал координаты транспортных узлов Сан-Франциско и затем создал скрипт, который сравнивал расстояние между апартаментами и остановкой общественного транспорта.

Полученный результат отправлялся в виде сообщения через Slack-бота. Каждое сообщение содержало название места расположения апартаментов, стоимость аренды, расстояние до ближайшей остановки транспорта и название объявления со ссылкой.

По словам Паручури, благодаря боту ему удалось найти жилье намного быстрее, чем если бы он занимался сортировкой объявлений вручную. «В результате мы арендовали отличные апартаменты, стоимость которых была выше той, что мы планировали, однако ниже того, что предлагает рынок жилья в Сан-Франциско».

В своём блоге разработчик подробно описал процесс создания бота. Весь код Паручури опубликовал на Github.

Слишком высокая стоимость жилья в Сан-Франциско заставляет сотрудников, начинающих свою карьеру в компаниях Кремниевой долины, искать альтернативные варианты для аренды. Например, некоторые разработчики адаптируют грузовики и микроавтобусы для жизни на парковке рядом с офисом.

Статьи по теме
Фотогалерея: Где начинающие карьеру разработчики и дизайнеры живут в Кремниевой долине
{ "author_name": "Philipp Kontsarenko", "author_type": "editor", "tags": [], "comments": 9, "likes": 16, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 17967, "is_wide": true, "is_ugc": false, "date": "Sun, 28 Aug 2016 13:10:23 +0300" }
{ "id": 17967, "author_id": 4, "diff_limit": 1000, "urls": {"diff":"\/comments\/17967\/get","add":"\/comments\/17967\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/17967"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

9 комментариев 9 комм.

Популярные

По порядку

Написать комментарий...
7

В чем смысл статьи?Программми ст умеет программировать???
Пармить по таймауту страницу и отправлять в slack это прям достойно статьи.

Ответить
0

Я до сих пор не понимаю, как выживает сервис craigslist , на мой взгляд сайт полный треш, никакого удобства.
Похоже нужно самому поехать и сделать там аля avito

Ответить
4

И умереть, как умерло бесчисленное число стартапов.
В сервисах вроде Авито изначальная пользовательская база решает всё.

Ответить
1

мега-повод для Долины - местные программеры умеют в парсеры! : )))

Некоторые еще к ним пуши прикручивают, а высший скилл - по API в слэк результаты скидывать! ВАУ!!! Y Combinator ждет парня!

Д*Б*

Ответить
0

Есть ли аналог для Авито?

Ответить
1

В авито есть подписка на результаты поиска: получаешь уведомление, если появляется новая квартира по заданным критериям поиска

Ответить
0

Когда телеграм только запустил ботплаиформу, то был бот который все новые объявления по ключевым словам и заданным параметрам парсил. Но потом он умер и больше мне не отвечал. Аналога не нашёл, мб кто-то знает?

Ответить
0

Годное решение, ручной труд должен умереть :)

Ответить

Комментарий удален

0

делал такое же

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Команда калифорнийского проекта
оказалась нейронной сетью
Подписаться на push-уведомления