- PVSM.RU - https://www.pvsm.ru -

Что случается, когда программист занимается подбором автомобилей

Открыли мы с другом компанию по подбору автомобилей с пробегом. Если никогда не слышали о таком — мы помогаем людям не купить «ведро». Увы, в Москве большинство машин, предлагаемых на вторичном рынке, заслуживают именно такой оценки.

Чтобы найти достойный экземпляр приходится обработать иногда за сотню объявлений. Происходит это примерно так: смотрим фотографии, описание, отмечаем какие-то нюансы, после чего звоним продавцу и задаём более двадцати вопросов. Далее уже решаем, стоит ли смотреть машину вживую.

image [1]

А теперь ближе к скриптам

Сначала мы записывали результаты разговора с продавцами на бумагу. Минусы очевидны: ворох разрозненных записей на разных листах, а если кто-то из продавцов сам перезвонит, то нет никаких шансов найти его объявление и наши записи о нём.

Логичным был переход на Google-таблицы. Чтобы не копипастить вручную пробег, цену и другую информацию из объявления я написал парсер для auto.ru и Авито. Работал он так: заходишь на страницу с объявлением, щёлкаешь букмарклет, автоматически открывается номер телефона продавца, вся информация через табуляцию собирается в текстовое поле, откуда легко копируется и вставляется уже по колонкам в Google-таблицу.

Технические трудности

  1. На auto.ru стоит Content Security Policy, запрещающая загрузку скриптов через незащищённое соединение.
    Решение: получил SSL-сертификат на своём хостинге [2].
  2. Позже на auto.ru вообще запретили загрузку скриптов с чужих доменов.
    Решение: зайти в браузер Firefox, набрать about:config, найти пункт security.csp.enable, установить false. В других браузерах такой возможности я не нашёл, поэтому Огненный лис стал основным браузером.
  3. В принципе, можно вообще не заходить самому на страницу объявления, а поручить это виртуальному браузеру на сервере. Но тут рано или поздно вылезала капча, и борьбу с ней мы уже посчитали нецелесообразной. Тем более, надо же оценить объявление, добавить свой комментарий.

В итоге, у нас по каждому заказу была внушительных размеров таблица: в ней было множество колонок (для каждой характеристики автомобиля, для каждого задаваемого продавцу вопроса) и десятки строк (по числу объявлений). К этой таблице мы стали давать доступ нашим клиентам, чтобы было проще общаться и чтобы было сразу видно, почему не едем смотреть тот или иной «не битый не крашеный» автомобиль.

image [3]

Можно было бы использовать API Google-таблиц, чтобы сразу парсить объявления в них. Я уже почти начал изучать API, но понял, путь тупиковый: когда объявлений в таблице под сотню, работать с ней почти нереально. К тому же, в Google-таблицах много избыточного функционала, но нет того, что нужно нам. Один сотрудник даже купил себе новый ноут, но не помогло — таблицы всё равно страшно тормозили.

Кстати, несколько слов об организации нашей работы. В какой-то момент меня очень утомило звонить по объявлениям, натыкаться на эти бесконечные комиссионки, задавать одни и те же вопросы. Мы решили нанять на эту работу удалённых сотрудников-обзвонщиков.
Ребята нашлись, каждого я научил, как выявлять обман, как правильно спрашивать про подвеску, про число собственников и т.д. Ответы продавцов они сохраняли через Google-форму, далее я ответы проверял и вставлял в основную таблицу, которую уже видел клиент. Слишком много действий.

Руки мои чесались давно, я до последнего надеялся обойтись без создания своего интерфейса, на который уйдут дни и ночи…

Так появился интерфейс

Он состоит из двух основных страниц:

  1. Главная страница. Здесь мы ведём учёт текущих заказов, записываем критерии, вставляем ссылки на выдачу объявлений по этим критериям и т.п.
    image [4]
  2. Страница заказа. Здесь отображаются все объявления, добавленные в базу данных и закреплённые за этим заказом. Прикрепление к заказу происходит в момент парсинга автоматически, по модели автомобиля. Тут же отображаются фотографии из объявления, теперь всё доступно из одного места.
    image [5]

А соль вся в анкете. Она есть под каждым объявлением, там множество вопросов и, соответственно, полей. С мгновенным сохранением и указанием авторства. Провёл мышкой по чужому сообщению — оно посветлело. Прочёл, значит. Анкета также служит чеклистом проверки автомобиля, чтобы ненароком не забыть проверить нахождение в одной из залоговых баз и т.п. Клиент следит за нашей работой через персональный доступ, по каждому объявлению видит наше резюме.

Назначение статусов в интерфейсе происходит одной кнопкой, с возможностью потом объявления по статусу фильтровать. Здесь же диагносты пишут свои отчёты после осмотра. Но если машина попадает в категорию «надо брать», то сразу звонят клиенту — хорошие машины уходят за считанные часы, решение о покупке и оставлении предоплаты нужно принимать быстро.

image [6]

Автокод

В Москве и области действует официальный портал Автокод, на котором можно посмотреть историю автомобиля, как то: число владельцев и даты владения, зафиксированные ДТП и страховые случаи, год выпуска и наличие ограничений. Эта информация избавляет нас от напрасного катания по городу.

image [7]

Естественно, как настоящий лентяй, я встроил проверку по Автокоду в свой интерфейс. Работает это так: в соответствующие поля вбивается госномер/VIN и номер СТС, далее отправляется запрос к серверу, где виртуальный браузер PhantomJS проходит авторизацию на портале от одного из пяти аккаунтов (чтобы капча пореже выскакивала), вбивает реквизиты автомобиля, парсит ответ и заодно делает скриншот. Скажете, что за ерунда? Можно ведь и так зайти да проверить! Да, но когда «пробиваешь» десятки машин в день, однажды написанный скрипт очень экономит время.

Главная цель интерфейса и работы обзвонщиков: наш диагност должен быть первым на осмотре лучшего автомобиля. То есть, пока диагност проверяет машину, обзвонщик из дома прозванивает свежие объявления и выбирает следующий вариант для осмотра, пускай даже из другого заказа. У конкурентов, например, не так: диагносту даётся заказ и вперёд. Что-то нашёл — молодец. Были варианты лучше? А кто его знает…
Однажды к нам хотел устроиться диагност, работавший у конкурентов. Говорил, если машина подходящая, но продавец не торговался по телефону, то он к нему вообще не ехал, потому что компания ему платила процент с торга. Впрочем, это уже другая тема.

Предварительный анализ

image [8]

С чего вообще начинается подбор автомобиля мечты?
В большинстве случаев, вы уж не обижайтесь, с процедуры «осаживания». То есть, если клиент хочет Camry XV50 за 900 тысяч рублей, то мы терпеливо объясняем, что это машины нижней ценовой категории в соответствующем состоянии. Чтобы определить, какой бюджет достаточен для покупки того или иного автомобиля, мы прибегаем опять-таки к нашему парсеру. Он берёт цены всех автомобилей в выдаче auto.ru и считает по каждому году выпуска среднее и медианное значения. Отталкиваясь от этих цифр нам намного проще определить, стоит ли браться за подбор в том или ином бюджете. Да, бывают исключения и аномалии, но лучше с цифрами, чем без.

Автор: Pontific

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/223145

Ссылки в тексте:

[1] Image: https://habrastorage.org/files/849/5b1/713/8495b1713ee94ab9879d3feedc424709.png

[2] хостинге: https://www.reg.ru/?rlink=reflink-717

[3] Image: https://habrastorage.org/files/7d3/13a/5a6/7d313a5a638641fbbd35bf5efa28dbdb.png

[4] Image: https://habrastorage.org/files/253/fe0/b70/253fe0b701624867936941910e950d38.png

[5] Image: https://habrastorage.org/files/53d/f75/bdf/53df75bdf33c40da8193ad029ca9b4f8.png

[6] Image: https://habrastorage.org/files/ebe/5f2/25e/ebe5f225e9f44a648ded6c263eeec506.png

[7] Image: https://habrastorage.org/files/cac/670/c43/cac670c43a9f49c98c235855aea0ff10.png

[8] Image: https://habrastorage.org/files/70e/207/0a0/70e2070a0cbc43c9987585c32338fffb.png

[9] Источник: https://geektimes.ru/post/283852/