Рубрики
Без рубрики

Как построить простой поиск Бот за 30 минут

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

Автор оригинала: FreeCodeCamp Community Member.

Quinn Langille.

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

Контекст

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

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

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

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

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

Примечание: Для тех, кто не заботится о уроке, я поставил kijiji Scraper вверх как repo с открытым исходным кодом здесь 😕

Строительный патруль

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

Настраивать

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

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

Внутри SRC каталог, сделай index.js Файл, где пойдет наш скрипт.

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

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

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

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

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

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

$ npm install request-promise

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

Как только это сохранено, мы можем запустить $ Node SRC/index.js И мы должны увидеть некоторую разметку HTML в нашей консоли. Шаг один полный – легко!

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

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

$ yarn add checksum

а потом:

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

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

Если они разные, это вернется правда Отказ Это отлично сработало … Нравится, слишком велико. Как вы увидите, он возвращает правда каждый раз ?

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

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

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

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

В качестве предварительной необходимости использовать Cheerio таким образом, нам нужно знать, что искать в нашей разметке. Итак, давайте разомним откройте Chrome и осмотрите наш URL.

Если мы проверяем на рекламе, мы можем видеть все поисковые ответы имеют классы .earch-item и .regular-ad Отказ Идеально!

Мы можем выбрать тех, кто с самым относится к черту:

Также как мы планировали, это выписывает массив аккуратно организованных объектов. Согласно документации Cheario, все атрибуты элемента вложены в ключ под названием Атрибуки Отказ Если мы вернемся к инструментам разработчика 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"]);  });});

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

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

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

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

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

Хорошо, чтобы начать нам нужно запустить:

$ 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);    });} 

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

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

Хорошей охоты!

Фактический скрипт, который я построил, немного сложнее, чем приведенный выше пример – я положил его в виде REPO с открытым исходным кодом на Github Отказ

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

Не стесняйтесь вносить вклад каким-либо образом, вы видите в форме?

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

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

Оригинал: “https://www.freecodecamp.org/news/how-to-build-a-simple-search-bot-in-30-minutes-eb56fcedcdb1/”