Как создать простого поискового бота за 30 минут

1656607215 kak sozdat prostogo poiskovogo bota za 30 minut

Квинн Лэнгилл

1*pMm3_L9RmFcb0KLJT1SirQ

Квартирная охота отстойна, особенно в Монреале. Это руководство покажет вам, как создать бота, который будет на вершине охоты для вас. Таким образом, вам больше никогда не придется до бесконечности обновлять свои поисковые запросы.

Контекст

В отличие от других городов, большинство людей, арендующих квартиры в Монреале, имеют одинаковый срок аренды. Новые договоры аренды начинаются в июле, длятся 12 месяцев и истекают 30 июня. Хотя можно утверждать, что это упрощает многие вещи – например, доступность и ожидания – это также означает, что конкуренция резко.

Каждый день я просыпался, обновлял свои 10 открытых страниц Kijiji и посылал электронные письма с запросами обо всех новых объявлениях. Я бы делал это снова во время обеда, ужина и перед сном. Уровень ответов был низким – значительно ниже 10%. Когда кто-то отвечал, его ответ обычно был мрачным.

Моим следующим шагом было поднять ставку и фактически поднять трубку. Звонок немного улучшил мои шансы. Арендодатели были более отзывчивыми, и на этот раз впереди меня обычно было меньше 10 человек. Но точно больше 5. Возвращаемся к чертежной доске.

Однажды, жаловавшись коллеге, что все мое время съедает эта квартирная охота, я озарила. Я могу решить эту проблему с помощью компьютера.

Когда я вернулся домой, я написал небольшую программу, которая наблюдает за поисками перемен Киджи. Когда он видит их, он отправляет текст службы коротких сообщений (SMS) на мой телефон с соответствующей информацией. Остальная статья объяснит, как я это сделал.

Примечание: для тех, кому не интересен учебник, я разместил скребок Kijiji как репозиторию с открытым кодом здесь: ?

Строительная площадка-патруль

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

Настройка

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

Далее создадим файл src каталог, в котором будет жить наш код.

Внутриsrc справочник, сделать ан index.js файл, куда попадет наш скрипт.

Вы можете сделать это так:

$ npm init // this will ask a few questions$ mkdir src$ cd src && touch index.js

Написание сценария

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

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

Для этого нам нужно установить библиотеку запросов:

$ npm install request-promise

а затем добавьте следующее index.js:

Как только это будет сохранено, мы можем бежать $ node src/index.js и мы должны увидеть некоторую HTML-разметку в нашей консоли. Первый шаг завершен – легко!

Поскольку нас волнует только то, когда содержимое меняется, давайте создадим простой ответ. Таким образом мы можем сравнить ответ и сравнить хэши. Если нам нужно зарегистрировать наши результаты, это будет гораздо менее громоздким, чем необработанная разметка.

Для этого мы можем использовать инструмент хеширования под названием checksum:

$ yarn add checksum

и затем:

Ладно, это сработало! Наши 1500 строк HTML были сокращены до 32 цифр. Теперь давайте обратим его в многократную функцию:

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

Если они отличаются, оно вернется true. Это сработало замечательно… как, немного слишком замечательно. Как вы увидите, оно возвращается true каждый раз?

После дальнейшей проверки ответа по выбору мы видим, что Kijiji имеет отметку времени в заголовке. Это означает, что хеш будет разным при каждой выборке. Важно отметить, что это также произошло из-за ротации рекламы и кучу другого динамического содержимого.

Вывод из вышеприведенного контроля состоит в том, чтобы всегда внимательно проверять свой ответ, когда имеете дело с API, который вы не писали.

Это означает, что нам понадобится получить доступ к мелким фрагментам разметки, поэтому установите пакет третьей стороны, чтобы помочь проанализировать ответ. Cheerio — это библиотека, которая может принимать HTML-разметку и преобразовывать ее в доступный JavaScript API. Его целью было помочь jQuery разработчики не используют jQueryно намерения переоценены.

Для нас это будет поддельный набор инструментов разработчика Chrome!

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

Если мы проверим объявление, то увидим, что у всех поисковых ответов есть классы. .search-item и .regular-ad. Идеально!

Мы можем выбрать те из Cheerio так:

Так же, как мы планировали, это хлопает множество аккуратно организованных объектов. Согласно документации Cheerio, все атрибуты элемента вложены в ключ под названием attribs. Если мы вернемся к инструментам разработчика Chrome, увидим, что каждое объявление имеет уникальный атрибут данных, который называется идентификатором. Давайте нацелить на это – замените код в вашем checkURL функция со следующим:

rp(siteToCheck).then(response => {  const $ = co.load(HTMLresponse);  let apartmentString = "";
  // use cheerio to parse HTML response and find all search results  $(".search-item.regular-ad").each((i, element) => {    console.log(element.attribs["data-ad-id"]);  });});

Хорошо мы получаем список уникальных идентификационных номеров. Эти идентификаторы являются единственной информацией, интересующей нас на странице.

Давайте вернемся к нашему первоначальному плану сравнения хешей, за исключением того, что мы хешируем только уникальные идентификаторы:

Идеально! Он работает точно так же, как задумано. Когда кто-то публикует новое объявление (или удаляет старое объявление, оговорки по контролю за порядком идентификаторов), мы печатаем true в нашей консоли. Осталось только настроить наш инструмент SMS.

Отправка SMS с терминала

Это действительно намного проще, чем кажется. Для этого мы будем использовать стороннее программное обеспечение под названием Twilio. Он делает многое, но одной из его основных функций является отправка SMS. Как бонус, он также имеет отличный JavaScript API! Чтобы закончить учебник, вам понадобится одна из их учетных записей – бесплатной пробной версии будет более чем достаточно, чтобы поиграть – и, возможно, даже получить новую квартиру.

Хорошо, для начала нам нужно запустить:

$ yarn add twilio

оттуда, в index.js давайте добавим Twilio и определим новую функцию под названием SMS:

const twilio = require(twilio);
// you'll need to get your own credentials for this oneconst client = new Twilio("accountID", "authKey");
function SMS({ body, to, from }) {  client.messages    .create({      body,      to,      from    })    .then(() => {      console.log(`? Success! Message has been sent to ${to}`);    })    .catch(err => {      console.log(err);    });} 

Эта простая функция занимает два номера телефона (to и from) и сообщения (body). Вместо того чтобы консоль регистрировала результат нашего checkURL функцию, мы можем вызвать SMS с любым сообщением, которое мы хотим:

Вот и все! Каждый раз, когда наш скрипт видит изменение между хэшами сайта, он будет отправлять текстовое сообщение с URL прямо на ваш телефон?

Счастливой охоты!

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

В конце концов, я хотел бы внести в него некоторые дополнения – первое из которых будет делать его более общим, а не просто скребком Kijiji. Это достаточно просто, поэтому это будет отличный проект для новых участников.

Не стесняйтесь вносить свой вклад любым способом, который считаете нужным?

Кроме того, если кому-то было интересно, я только что подписал договор аренды в минувшее воскресенье. Квартира, которую я в итоге арендовала, была с первого же обновления, которое мне прислал патруль — это была судьба.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *