Халява с юлы и авито

Как вы думаете, многие люди используют дома холодильники и стиральные машины? Наверное практически все. А ломается эта техника? Еще как! А всегда ли ее потом чинят? Наверное кто-то чинит. А кто-то не чинит, а хочет от нее избавиться. А как проще всего избавиться? Вынести на помойку? А если вы живете на 3…5 этаже без лифта? Может быть выкинуть в окно? ;-) Нет, гораздо проще дать бесплатное объявление типа «Отдам даром старый холодильник. Морозит кое как самовынос  и самовывоз». Объявление можно дать на авито или юлу. Указать свой номер телефона и всегда найдутся желающие взять технику. Что-то можно будет сдать в прием лома, что-то пустить на запчасти, а что-то может и починить, если есть навыки.

Только вот есть интересные моменты: сколько может найтись таких желающих и как быстро они найдутся?

Забегая вперед скажу: желающих может найтись много, и найдутся они очень быстро. В СПб, в среднем, холодильник в любом состоянии находит нового владельца за 1…2 минуты. Время очень короткое, неправда  ли? А теперь я расскажу мою историю по порядку.

Несколько лет назад, мне по работе приходилось мотаться по городу. Причем ездил я в основном на метро и на маршрутках. Сидел и копался на сайтах объявлений в поисках чего-то интересного из компьютерных раритетов и прочих штуковин. И случайно напоролся на объявление об отдаче то ли газовой плиты, то ли еще чего-то похожего. И отдавали рядом с моим домом. Решив, разжиться на халявку этой техникой я дождался станции (чтобы не так шумно было) и позвонил, но мне ответили, что все, уже отдано. А прошло минуты 3…4. Ого-го, что-то быстро. И я стал уже целенаправленно искать подобные объявления, и да, они находились, только реально что-то взять уже не выходило. Я всегда опаздывал.

Поскольку по образованию я программист, то решил как-то автоматизировать процесс поиска подобных отдач. И для начала стал искать готовое решение. Наверняка не я первый задумывался над этим вопросом. И да! Я нашел несколько программ, которые могли сами периодически делать запросы к нужным сайтам и выдавать нужные мне результаты. Запросы были платными. Или бесплатными, но, например, раз в час. Понятное дело, что за час что-то ценное раз 30 успеет уйти, поэтому раз в час это очень редко. Вот если бы раз в 15 секунд, это бы облегчило задачу, но все это стоило нехилых денег. И я решил попробовать сделать что-то свое.

Первым делом, я поставил сам себе техническое задание. Должна быть программа, которая на вход принимает запрос (например «за последний час бытовая техника со стоимостью < 500 рублей»), а на выходе получаем список объявлений со следующими колонками:

—          Название объявления

—          Цена

—          Ссылка на него

—          Дата отдачи

—          Время отдачи

—          Фото

Вот внешний вид того что у меня в итоге получилось.Вот внешний вид того что у меня в итоге получилось.

Программу я написал на С++ и умеет она следующее:

1.       Есть ini файл с настройками. В нем задаются рабочие папки. В них скачиваются фото товаров, в другой создается выходной файл. Также в этом файле настроек есть параметр загружать фото или нет, и максимальная глубина для поиска объявления в минутах.

2.       В верхней части строка со ссылкой (эта ссылка берется прямо из браузера, когда вы делаете фильтр для запроса на авито или юлу).

3.       В центре — таблица с выходными данными.

4.       В нижнем левом углу то, что ответил сайт. Нужно было для того чтобы вылавливать данные объявлений.

5.       Внизу в центе окошко интернет эксплорера, в нем я поначалу пытался вывести сам внешний вид того что получаю по ссылке. Потом от этой идеи отказался, т.к. только время терять, эксплорер штука не быстрая.

6.       Справа внизу фото того, что выделено в таблице.

Самое сложное в этой программе это разобраться в том, что выдает авито или юла в ответ на мой запрос. Много часов я просидел, копаясь в html коде, выискивая ключевые слова, по которым можно выделить нужные мне данные. Причем эти сайты еще и меняли периодически формат выдачи. Получалось только заработала программа, бах! И через 3 дня работать перестала.

Также программа имеет возможность работы через командную строку. Само окно мне было нужно только на этапе отладки. При работе просто запускается программа с нужными аргументами типа:

getyula www.avito.ru/sankt-peterburg/remont_i_stroitelstvo? f=ASgCAgECAUXGmgwReyJmcm9tIjowLCJ0byI6MX0&q=%%D0%%BE%%D1%%82%%D0%%B4%%D0%%B0%%D0%%BC&s=104

Ждем несколько секунд, и в нужной папке появляется список считанных объявлений. Примерно такого вида:

Конденсаторы электролитические в Санкт-Петербурге^0^61473e5d65e56272db555687^youla.ru/sankt-peterburg/kompyutery/komplektuyushchie/kondiensatory-eliektrolitichieskiie-61473e5d65e56272db555687^19.09.2021^вчера в 16:42^https://cdn0.youla.io/files/images/360_360/61/47/61473d2c2198aa09e722fa98–1.jpg^

Принтер в Санкт-Петербурге^0^614737a08e8be43dcb7a9625^youla.ru/sankt-peterburg/kompyutery/printery-i-skanery/printier-614737a08e8be43dcb7a9625^19.09.2021^вчера в 16:14^https://cdn0.youla.io/files/images/360_360/61/47/6147376b4690232961014f1c-1.jpg^

Сказки на дисках в Санкт-Петербурге^0^613dec044f9215143d7e3473^youla.ru/sankt-peterburg/kompyutery/nakopiteli-dannyh-i-kartridery/skazki-na-diskakh-613dec044f9215143d7e3473^19.09.2021^вчера в 12:22^https://cdn0.youla.io/files/images/360_360/61/3d/613deb4747c59627c62b53b7–1.jpg^

Компьютерные провода, зарядные кабели в Санкт-Петербурге^0^60291fddcfc4c5010e3f8da3^youla.ru/sankt-peterburg/kompyutery/aksessuary/kompiutiernyie-provoda-60291fddcfc4c5010e3f8da3^19.09.2021^вчера в 11:25^https://cdn0.youla.io/files/images/360_360/61/10/6110526f2d92756d7058ec32–1.jpg^

ПРОВОДА И ПЕРЕХОДНИКИ в Санкт-Петербурге^0^5e89d412f094f3785025dd93^youla.ru/sankt-peterburg/kompyutery/komplektuyushchie/provoda-i-pieriekhodniki-5e89d412f094f3785025dd93^19.09.2021^вчера в 10:02^https://cache3.youla.io/files/images/360_360/5e/89/5e89d3e12aecd6cfa46980f0.jpg^

Камера к компьютеру в Санкт-Петербурге^0^5949f95e226e483a045e0ff2^youla.ru/sankt-peterburg/kompyutery/aksessuary/kamiera-k-kompiutieru-5949f95e226e483a045e0ff2^19.09.2021^вчера в 9:39^https://cache3.youla.io/files/images/360_360/59/49/5949f95c132ca58add664ef6.jpg^

Крышками разделены поля. Идут: название, цена, ID объявления (т.е. его уникальный номер), дата, время, ссылка на фото.

Итак, первая часть моего проекта была реализована. Я получил выполняемый файл, который находил крупицы золота в горах пустой породы. Теперь надо было создать для него какую-то запускалку. Т.к. я долго уже программирую на 1С, я решил не изобретать велосипед, а создать простейшую конфигурацию, которая вела бы все работы по поиску и выдаче информации. С самого начала я надеялся, что пользоваться этим буду не я один и создал следующие справочники:

— клиенты. Список клиентов, для каждого задается наименование, таблица ссылок для проверки. Для каждой ссылки задается частота проверки.

— прайс лист. Это то место где задается соответствие между частотой проверки и стоимостью одной проверки.

— сайты. Просто список обрабатываемых сайтов. Чисто для красоты. Ведь можно и auto.ru и bn (бюллетень недвижимости) сканировать и еще может чего.

— скачанные объявления. База скачанных. Чтобы собирать статистику, и вообще интересно рыться что было.

Также я добавил подчиненный справочник для клиентов — скачанные именно для него объявления. Сделал простенький биллинг: поступление средств, списание средств исходя из подписок клиента.

Далее встал вопрос, как переслать клиенту ссылки на его запросы. Для начала я решил использовать почту. СМС это дорого, на whats app какие-то сложности отсылать. Я решил начать с простого способа.

Какое-то время ушло на отладку, вылавливание ошибок и в результате начала работать рассылка с отдачами с юлы. Юла была хороша тем, что в фильтре запрос можно было прямо указать: «за последний 1 день». И все старые объявления даже не появлялись в выдаче. В общем, программа работала на моем домашнем компе и я начал получать какие-то ссылки. Юла была населена гораздо меньше, чем авито и практически в 100% случаев я открывал объявления и там было »0 просмотров». Т.е. я был первый. Если долго не щелкать клювом и быстро перезванивать, то почти всегда можно было получить то, что отдавали. Так я примерно с год паразитировал на юле и много чего получил. Перечислю что вспомню: бытовка (оплатил только доставку ее мне на участок), десяток кровельных сэндвич панелей,  штук 8 холодильников и примерно столько же стиральных машин. Причем я брал только исправные или с легкими дефектами, которые я сам мог исправить и недалеко от меня. Много электроинструмента: болгарку, паркетку, перфораторы, дрели. Кухонно-бытовую технику: соковыжималка, кофе-машина, мойка воздуха, обогреватели, газовые и электроплиты, пылесос моющий, стабилизатор на 5 кВт. Много чего компьютерного: то гора просто памяти DDR  и DDR2. То целый офис компов, то 10…12 ЖК мониторов, один раз я 2 дня вывозил с прицепом склад банка (серверные шкафы, стойки, мини АТС, сейф, мониторы, счетчики монет, блоки питания БРП, принтеры). Даже чуть не отдали настоящий банкомат. Один раз отдали 2 сейфа, потом еще один оружейный. В общем, все не упомнить, но отдач было много. Конечно, не всегда отдавали бесплатно. Часто за шоколадку или фрукты. Или, например, вынести на помойку гору хлама, а что-то ценное в награду J Часто отдавали неисправное. Пришлось учиться диагностировать и чинить бытовую технику. И слюду я для микроволновок переставлял, стиралки чинил, отмывал что-то сильно грязное. Что-то оставлял себе, что-то продавал, что-то потом менял. В общем, жизнь интересная. Каждый день какие-то приключения, приходится решать: за чем ехать, а что оставить конкурентам. Часто покупал на юноне запчасти для ремонта. Так один раз отдавали газовые баллоны, не бытовые, которые по 50 л пропан, а высокие на 40 л. Было 2 баллона с кислородом, один с ацетиленом, пара с хладоном, один из под гелия и пара пропановых. Чтобы все вывезти пришлось нанимать газель. Затем купил горелку, редукторы, обратный фильтр и соорудил сварочный пост. Пробовал себя в газосварке, и даже получалось.

Юла, это конечно хорошо, но был еще неизведанный континент под названием авито, и мне хотелось проверить, что отдают там. И может там еще больше отдач, чем на юле?

Avito под мою дудку ;-)

Я начал разрабатывать не паханное поле интересных отдач на авито и выяснил что я не один такой :-(Если на юле моя программа присылала мне уведомления о новых отдачах чего-то интересного (бытовая техника, компьютеры, инструменты и т.п.) и я там всегда был первый, то авито уже не первый и сильно не первый. Открываю объявление, которое выложили 4 минуты назад, хопа, а там уже 30 просмотров. Холодильники, например, там отдавали по 8 штук за день, но успеть на них совсем не получалось. Холодильник уходит минуты за полторы — две. Или открываю объявление, а оно уже снято. И тогда я решил как-то это улучшить. Первое что пришло в голову, это то, что неплохо бы если телефон из объявления шел ко мне уже вытащенный с авито сразу в письме. Но это совсем сделать не просто. В обычной версии авито телефон хранится в виде картинки, и ее еще получить надо, а потом распознать. Но есть мобильная версия сайта! А там телефоны просто цифрами. Это уже лучше. Но для отлова этих цифр мне пришлось целое направление IT осваивать. Для начала понять, как отдается телефон. Для этого пришлось установить программу фидлер (она отслеживает HTTP трафик (ну и HTTPS)) и выдает он что-то типа такого:

Запросы в фидлереЗапросы в фидлереА вот как это выглядит в 1СА вот как это выглядит в 1С

Так что она стала по ID объявления (а его легко получить просто обычным запросом с сайта) выдавать номер телефона из такого объявления:

А это само объявлениеА это само объявление

Теперь настала новая пора. Меня не устраивала по скорости работа почты. На нее я слал уведомления о новых отдачах. И я, немного почитав интернет, перешел на телеграмм. У него открытое api и послать на него сообщение с картинкой как нефиг делать. Для универсальности я для каждого клиента установил способ информирования (то, это или оба сразу) и галочку «Слать номер телефона». Беда в том, что в авито тоже не лохи сидят и периодически эта система начинает глючить. Номер не определяется и пишут: «Что-то подозрительное с вашего ip творится, уж не робот ли там телефоны собирает!». Но это я уже в процессе работы буду как-то придумывать, как обходить. Типа случайную задержку вставлять или с разных аккаунтов писать или прокси сервера использовать.

Продолжение работы над программой информирования

После победы над системой выдачи телефона с авито прошло какое-то время, и я внес в мою систему большое количество доработок:

1. Каждому клиенту отдельно можно задать способ информирования (почта или телеграмм).

2. Доработал работу с русскими буквами в HTTP запросах.

3. Модернизировал логику работы основного модуля (он на с++ написан), который запросы создает и на выходе дает базу объявлений по входному запросу (дата подачи, время подачи, уникальный идентификатор, цена, ссылка на фото и т.п.). Модуль теперь отрабатывает намного быстрее. А это очень важно! Пока там что-то запрашивает товар уже ушел.

4. Сделал «белый список». Объявления с товарами по этим ключевым словам в первую очередь пытаются определить номер телефона, чтобы сэкономить драгоценные секунды. Телефон идет прямо в сообщении телеграмма.

В итоге программа стала работать быстрее и стабильнее. Ушли обидные ошибки, из за которых нарушалась работа. В среднем, как показала практика, за день можно реально получить 1…4 интересные отдачи. Так, например, получено:

22.08 напольный вентилятор

23.08 стиральная машина Candy, бензокоса, стиральная машина Samsung

24.08 холодильник Минск крутой высокий двухкомпрессорный

25.08 стиральная машина LG с прямым приводом!!!

27.08 отдавали металлический гараж, но я на него не успел!

29.08 газовая плита, сетевой фильтр, стальная ванна, посудомойка

30.08 еще одна газовая плита

31.08 алюминиевая стремянка, морозильный ларь

1.09 3 баллона из под фреона

3.09 5 терморегуляторов для теплого пола

4.09 лазерное МФУ, wifi роутер ксяоми. Крутой 5Ghz, 4 антенны, USB вход,

ресивер Ямаха и комплект акустики (две огромных колонки и центральная поменьше)

5.09 мешок вентиляторов для компьютера

6.09 20» жк минитор Самсунг исправный

7.09 газобалонное оборудование для а/м с газом внутри, два радиатора отопления на лом

Вот такие прибытки. Причем я старался все это брать недалеко от района проживания, многое неисправно, что-то можно починить, что-то на детали, что-то в металлолом.

В среднем каждый день отдают по 4…6 холодильников, часто исправных.

Дальнейшее развитие

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

1. Ускорил все, что можно при запросе к авито (сортирую по времени подачи, ввел максимальную глубину. Т.е. все, что старше N минут не выдавать, не тратить время на их разбор)

2. Картинки не гружу (они сами валятся потом уже в телеграмм)

3. Ввел реально работающий черный список. Если в заголовке объявления встречается хоть одно слово из этого списка (диван, футляр, чехол, кактус и т.п.) то объявление пропускается

4. Доработал белый список. Если объявление в него попадает, то программа вытаскивает телефон и передает его мне в самом сообщении

5. Передаю текст в телеграмм в HTML формате. Т.е. название объявления как гиперссылка, если по нему кликнуть, то открывается само объявление на авито или юле

6. Прикрутил голосовой информатор. Теперь приятный женский голос сам читает мне что отдают. Я при этом могу заниматься своими делами и не надо отвлекаться и тыкать в телефон

Много сил было потрачено на хождение вокруг авито, чтобы не перегружать его запросами. Если немного больше запрашиваться или логиниться поминутно, то блокируют. Или навсегда или на сутки. Эмпирически определил тот минимум, который позволяет тянуть оттуда информацию, оставаясь «как бы просто быстрым пользователем-человеком». :-) Ну вот сижу на авито, нажимаю кнопку поиска чего-то там, и просто очень быстро читаю все новые объявления!

image-loader.svg

На рисунке привожу скриншот с телефона, как выглядят теперь отдачи. Название — гиперссылка, цена, дальше уже сам телеграмм выводит вертикальную черту и дает расшифровку.

Планы

Все-таки, бывает трудно быстро среагировать и срочно бросить все дела и звонить по номеру из объявления. Поэтому в планах написать небольшую программку уже под андроид, чтобы она при входящем сообщении в телеграмме, в котором есть телефонный номер, САМА ЕГО НАБИРАЛА. При этом выдавая какой-то звуковой сигнал. Т.е. полностью был исходящий звонок без участия оператора. Я при этом могу просто отвечать голосом по громкой связи и спрашивать в силе ли еще ваше предложение.

А может программа и сама разговор сможет вести? А радиоуправляемая газель с роботами поедет забирать холодильник?

© Habrahabr.ru