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

Мы создадим инструмент для установки ценовых оповещений на любой товар Amazon. Не более 50 строк кода.

TL; DR: код проекта доступен здесь: https://github.com/MartinRdw/amazon-price-tracking, не стесняйтесь клонировать / развертывать на Heroku it

Для этого мы будем использовать:
- Puppeteer: библиотеку узлов, которая предоставляет высокоуровневый API для управления Chrome
- Zenaton : сервис SaaS, позволяющий быстро создавать задачи и рабочие процессы

Puppeteer позволит нам очистить страницу продукта Amazon, чтобы узнать текущую цену, а Zenaton позволит нам запускать код каждые X часов и отправлять оповещения.

Конфигурация

Чтобы начать использовать Зенатон, вам необходимо выполнить 4 шага:

curl https://install.zenaton.com | sh
  • Настройте его с помощью учетных данных Zenaton.

Мы будем использовать a.envfile, проще всего клонировать репозиторий примера здесь: https://github.com/zenaton/examples-node

git clone https://github.com/zenaton/examples-node
cp -n .env.example .env

Если вас не интересуют примеры, вы можете просто оставить файлы boot.js, client.js, .env и package.json.

Обновите .env своими учетными данными с https://app.zenaton.com/api и запустите npm i.

  • Запустить Зенатон Агент

Запустите агент и заставьте его слушать вашу конфигурацию:

zenaton start && zenaton listen — env=.env — boot=boot.js

Создание рабочего процесса

Рабочий процесс примет в качестве параметров 4 переменные:

  • Название продукта
  • URL продукта
  • Цена оповещения
  • Количество часов между каждой проверкой
touch Workflows/TrackAmazonPrice.js

Код довольно прост:

Некоторые пояснения:

Мы используем функцию ожидания Zenaton, чтобы ждать 4 часа между каждым анализом цен https://zenaton.com/documentation/node/workflow-waiting/#duration

Чтобы отправить оповещение, я решил использовать одну из новых функций Zenaton для получения сообщения в Slack: коннекторы.

Чтобы настроить новый коннектор, вам просто нужно перейти сюда: https://app.zenaton.com/connectors
Найдите Slack и нажмите Добавить.

Заменитеyour_slack_conenctor_id в коде на идентификатор, который у вас здесь:

Подробнее о разъемах здесь: https://zenaton.com/documentation/node/api-connectors

Создание задачи

Нам все еще нужно создать Task, который позволит нам узнать цену на Amazon. TheGetAmazonProductPrice нашего кода рабочего процесса.

touch Tasks/GetAmazonProductPrice.js

Здесь мы будем использовать Puppeteer:

npm -i puppeteer

Цель задания:

  • Откройте браузер Chromium
  • Перейти к URL-адресу продукта Amazon
  • Очистите веб-страницу, чтобы найти #attach-base-productselector (цена указана в этом поле)
  • Вернуть цену

Код:

Несколько используемых функций Puppeteer хорошо документированы здесь: https://github.com/puppeteer/puppeteer/blob/master/docs/api.md

Запустить рабочий процесс

Нам осталось запустить рабочий процесс.

touch launch_amazon_workflow.js

Это пример получения предупреждения, когда стоимость iPhone 11 Pro упадет ниже 1000 долларов:

Просто запустите node launch_amazon_workflow.js, чтобы запустить рабочий процесс.

withTag() позволяет нам дать имя каждому нашему рабочему процессу. Благодаря этому, вернувшись в Дашборд Зенатон, мы можем увидеть отслеживаемые товары:

Код доступен здесь: https://github.com/MartinRdw/amazon-price-tracking/tree/no-web-app

Бонус: Frontend + развертывание на Heroku

Вы можете создать интерфейс для более удобного взаимодействия с рабочими процессами Zenaton:

Он состоит из:

Код (с клиентским приложением + развертывание на Heroku) доступен здесь: https://github.com/MartinRdw/amazon-price-tracking