main page
russian english
Блоги » Pir4te »

Как я мониторю… MFC Wishlist

Как я мониторю… MFC Wishlist
09 сен 2022 07:12:20

Стадия 1. Вводная.
В какой-то момент я решил, что мне нужны все персонажи Gundam выпущенные MegaHouse. Так как в большинстве своем это экземпляры, выпущенные в прошлом (вторичный рынок), я каждый день отсматривал раздел pre-owned магазина amiami.com на предмет нужных фигурок. Спустя время я обнаружил что мероприятия по посещению раздела ежедневно тратят довольно много времени и решил немного его освободить.

Стадия 2. Python и его друзья.
Сначала был Python. Точнее скрипт на Python, под скриптом я подразумеваю небольшую программу которая выполняет определенную последовательность действий, который вместо меня и уже каждый час “отсматривал” фигурки по ссылке https://www.amiami.com/eng/search/list/?s_cate_tag=1&s_maker_id=24&s_st_condition_flg=1&s_originaltitle_id=12790. Если во время выполнения обнаруживалось что-то чего не было во время предыдущего выполнения, то скрипт присылал мне сообщение в чат, содержащее информацию о “новинке”.


Пример старого сообщения.

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

Тогда пришла идея перед тем, как делать какие-то запросы к магазину, сначала получать информацию из wishlist и уже потом по обнаруженным там позициям делать выборку в магазине. На этом моменте меня окончательно добила “профессиональная деформация” и я решил для всего этого … использовать систему мониторинга Zabbix.

Но без скриптов все равно не обошлось =) Новый скрипт на Python, запускается по расписанию каждый час и делает примерно следующее:
1. Идет на страницу https://myfigurecollection.net/users.v4.php?current=categoryId&mode=view&username=Pir4te&tab=collection&status=0&rootId=0 и получает ссылки на все фигурки что находятся у меня в виш листе.
2. Посещает каждую из полученных ранее ссылок и забирает информацию: идентификатор фигурки, имя фигурки, категорию, цену, Jan.
3. Формирует из всей полученной информации текст в формате json. Выглядит так и я намеренно указал только одну фигурку иначе текста было бы очень много.

4. Посылает данный текст в систему мониторинга для последующей обработки.

Снимок экрана с получаемыми данными

Небольшое отступление и пояснение почему именно эти данные меня интересуют
- На основании id фигурки легко сделать ссылку на данную фигурку и ее основное изображение на MFC, это нужно чтобы в уведомлении было фото того, что можно купить.
- Я думаю, с именем все понятно и не нужно ничего расписывать.
- Категория нужна для фильтрации, можно просто не искать некоторые категории, можно искать или не искать в определенных магазинах.
- Цена для обозначения выгодности покупки в уведомлениях.
- Jan самое важно и без него бы ничего не работало, ключевое слово для поиска в магазинах.

Возвращаемся к основному повествованию. Zabbix считывает полученный json и на основании «правил обнаружения» создает объекты мониторинга.
У меня создано несколько правил.
1. Обнаружение фигурок. Если категория Prepainted.
2. Обнаружение моделей. Если категория Model Kits.
3. Обнаружение объектов, для которых не определен Jan. Как и следует из названия, если jan отсутствует, то уведомляю себя, что неплохо бы найти соответствующий jan в интернете и обновить информацию на MFC.
Перечень правил в Zabbix

Разные правила дают возможность назначать объектам мониторинга разные проверки(шаблоны). В нашем случае объект мониторинга это отдельная фигурка, а проверка — это поисковый запрос в определенный магазин. Соответственно имея несколько правил, я могу назначать какой-то конкретный магазин только определенной категории, например Prepainted только amiami, а модели только rakuten. Но в текущий момент мои правила работают одинаково.

Объект созданный правилом

Шаблоны поиска в целом работают по одному принципу не важно для какого магазина.
1. Zabbix делает запрос, подобно браузеру, на определенную страницу магазина, которая содержит результаты поиска по ключевому слову и параметрам, в качестве ключевого слова используется jan, в качестве параметров наличие фигурки в данный момент. Например, https://search.rakuten.co.jp/search/mall/4535123830570/ на ракутене.
2. На загруженной странице ищется цена лота, при наличии нескольких вариантов минимальная цена, и сохраняется в системе.
3. Если нам повезло и что-то можно приобрести сейчас, и система мониторинга присылает уведомление в чат.

Перечень проверок
Перечень "уведомлений"

Пример текущего сообщения.

Чем более привлекательная цена, тем более “заметным” становится уведомление.
- Синее если товар в наличии.
- Желтое если цена ниже, чем та, что заявлена на MFC.
- Красное если цена на 20% ниже заявленной на MFC.

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

Проблема - JAN коды могут отличатся для разных релизов одной фигурки, но MFC хранит только один.
Обходное решение - смирится с данной ситуацией и время от времени посещать магазин самому или создавать объект мониторинга вручную.

Проблема - Есть фигурки который нет на MFC, например Myethos, но мониторить таковые хочется.
Обходное решение - ручное создание объектов мониторинга, долго и не очень удобно, но зато работает.

Проблема - Владелец ресурса не хочет, чтобы его ресурс посещали скрипты и роботы и всячески мешает автоматическим проверкам.
Обходное решение - смирится и ходить самостоятельно или придумывать как замаскировать робота под человека и научить обходить проверки. Вот недавно глобальный amiami.com внедрил дополнительную проверку и автоматические проверки перестали работать. В следствии чего я переехал на мониторинг amiami.jp и перепланировал проверки по времени. Раньше весь вишлист проверялся одновременно каждый час, а теперь каждый экземпляр проверяется в отведенную для этого минуту часа =)

Стадия N+1. Ох мечты, мечты.
В планах научить систему смотреть рынок полки и пару дополнительных японских магазинов, но там хак с JAN не получится.
И переделать уведомления на более красивые и универсальные.

P.S. Если кому-то интересно более подробное описание технической реализации, то я готов поделиться.

P.P.S. Если что-то из описанного трудно для восприятия не стесняйтесь об этом написать, я попробую исправиться и написать более понятным языком.
49 2
Поделиться
Автор
Полка Профиль Фигурки Аниме Блог Фото Активность Отзывы Магазин
Отправить ПМ