Wishlisted Games Devlog #6: новая цена, бот в телеграм, система бейджей, процент скидки

Путь к очередному релизу был долгим, поэтому спешу познакомить вас со списком обновлений!

Wishlisted Games – это сервиc поиска низких цен на ключи активации для игр из списка желаемого в Steam

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

Фильтр "New price"

Задумка старого фильтра (кнопка с подсказкой New price since yesterday) была в том, чтобы возвращаясь на сайт ежедневно, иметь возможность увидеть те игры, чья цена изменилась относительно прошлого просмотра списка игр. Это позволяло пользователю сократить список игр только до тех, которые стоят внимания сегодня, вместо того, чтобы скроллить всю ленту в поиске чего-нибудь прикупить (ведь он и так делал это вчера).

Выдача при включённом фильтре "New price since yesterday"
Выдача при включённом фильтре "New price since yesterday"

Внимательно изучив код и ещё (несколько) раз подумав, я пришёл к выводу, что в работе этого фильтра полно противоречий, начиная от логики и заканчивая уходом от изначальной идеи. Утверждение "прошлый просмотр" я для себя понимал, как просмотр за вчерашний день (что было отражено в названии фильтра), игнорируя тот факт, что бывают игры, цены на которые меняются и в течение дня: утром – старая (относительно вчера), а вечером – новая (относительно утра).

Плюс имеет место быть ситуация, когда мой парсер начинает игнорировать некоторые игры – он актуализирует только те, которые просматривались в последние N дней. В этом случае база данных (БД) будет устаревшей и в день, когда кто-то снова запросит поиск цен для устаревших игр (что заставит парсер опять работать), под этим фильтром появятся игры, чья цена изменилась относительно той, которая была сохранена в последний раз, а не со вчерашней (ведь её просто нет в БД).

Поэтому я собрался с мыслями и родил новый фильтр "New price", который делает именно то, о чём он и говорит: выводит список игр, чья сегодняшняя цена отличается от предыдущей, будь то вчерашняя\позавчерашняя или обновлённая в течение дня.

Выдача при включённом фильтре "New price"
Выдача при включённом фильтре "New price"

Важная оговорка заключается в слове "сегодняшняя". Это значит, что если сегодня (относительного вашего локального времени) парсер ещё не отработал, то вы увидите пустой список. Мне показалось это логичным, потому что это единственный способ спрятать те игры, чья цена обновилась и держится такой несколько дней. Скорее всего вы не хотите видеть такую игру каждый день, а лишь в тот день, когда её цена изменилась, то есть – сегодня.

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

Фух, написал много, т.к. было важно донести значимость обновлённого фильтра, но если вкратце – это отличный инструмент для мониторинга новых цен на игры, схожий по принципу работы с уведомлениями, которые вы получаете на телефон от клиента Steam, когда игра получает скидку. И раз по сути это и есть уведомления, запрашиваемые вручную, то было бы неплохо получать их... автоматически. И теперь эта возможность тоже реализована!

Бот в телеграм

Нового фильтра всё ещё может быть недостаточно, чтобы понять, является ли цена выгодной для покупки, потому что видя на сайте обновлённую цену для какой-то игры, хочется знать в какую сторону она поменялась относительно предыдущей, а так же – больше это или меньше относительно вчерашней\позавчерашней.

Развивая идею помощи пользователю в анализе новых цен на ключи рассмотрим следующий пример. Вчера игра стоила 10р, а сегодня утром выросла до 30р, но вечером упала до 20р. Таким образом, на момент текущего просмотра игры на сайте, её текущая цена (20р) относительно прошлой (30р) пошла на спад, но относительно вчерашней (10р) – выросла. Следовательно, можно было бы принять решение подождать скидку получше. Но проблема в том, что в этом случае сайт не даёт информации о вчерашней цене, а только о прошлой (в случае примера – утренней).

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

Тогда почему бы не хранить подобную историю на стороне пользователя? Для этого я создал бота в телеграм, в котором можно подписаться (естественно, бесплатно) на рассылку списка игр по фильтру "Новая цена". При оформлении такой подписки вы раз в день (для большинства это произойдёт утром) будете получать актуальный список игр с новой ценой. Сам список вряд ли получится слишком большим (на мои 138 игр приходит от 5 до 10 обновлений), что позволит удобно и быстро с ним ознакомиться. Более того, вся история будет храниться у вас с ботом в переписке, что сыграет роль персональной истории.

Общение с ботом
Общение с ботом

Перед оформлением рассылки можно попросить бота прислать пример рассылки на основании вишлиста:

Пример рассылки
Пример рассылки

Ещё бот умеет показывать историю обновлений на проекте:

История обновлений по команде /devlogs
История обновлений по команде /devlogs

А так же через него можно оставить фидбек по работе сайта или бота:

Возможность оставить фидбек по команде /feedback
Возможность оставить фидбек по команде /feedback

Если вам вдруг показалось, что всё сломалось, то можно сделать сброс профиля:

Сброс профиля по команде /restart
Сброс профиля по команде /restart

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

Ссылочку оставляю https://t.me/WishlistedGamesBot. Кстати, бот достаточно болтливый в момент рассылки, поэтому рекомендую сразу его замутить.

Система бейджей

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

1. Разница в цене – появляется для игр, получивших новую цену (те игры, которые попадают под фильтр "New price"). Если навести курсор, то можно увидеть численное значение, а цвет подскажет направление движения цены: зелёный – вниз, красный – вверх:

Бейдж "Разница в цене"
Бейдж "Разница в цене"

2. Историческая скидка – появляется, когда текущий процент скидки соответствует максимально\минимально зафиксированному за всё время наблюдения за игрой. В отличие от предыдущего бейджа, который по сути является переосмыслением старой иконки, историческая скидка это новый параметр и чтобы он начал работать во всю "мощь", требуется время на наполнение базы. Поэтому сейчас он будет отображаться достаточно часто. Если навести курсор, то можно увидеть направление движения скидки, о чём так же говорит и цвет: зелёный – высокая, красный – низкая:

Бейдж "Историческая скидка"
Бейдж "Историческая скидка"

Кстати, забавный момент: игры с выгодной исторической скидкой подписываются как "исторически высокая скидка", что в контексте работы с ценой может сбить с толку. Не придумал, как обозвать иначе, есть идеи?

3. Устаревшая цена - появляется для тех игр, чья цена остаётся неизменной больше месяца. Данный индикатор служит показателем того, что, наверное, не стоит ждать понижение цены на такие игры и при большом желании поиграть, имеет смысл купить уже сейчас:

Бейдж "Устаревшая цена"
Бейдж "Устаревшая цена"

Прочие изменения

  • На карточке игры теперь выводится процент скидки. Несмотря на то, что на сайте выводятся только игры, выгодные для покупки (иными словами – на скидках), есть некоторые исключения. Например, игры, недоступные для прямой покупки в магазине Steam, но которые возможно активировать ключом. Они попадают в общий список, т.к. по сути мы можем купить то, что не продаётся, и в философии сайта это тоже является выгодной покупкой. Для таких игр размер скидки выводиться не будет, т.к. за базовое значение берётся цена без скидок в Steam. А раз игра не продаётся, то и цены у неё нет:
Размер скидки на карточке игры
Размер скидки на карточке игры
  • Блок с ценами теперь выровнен относительно таких же блоков на соседних карточках:
До выравнивания
До выравнивания
После выравнивания
После выравнивания
  • Мелкие правки текста

Ближайшие планы

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

Ой, извините!
Ой, извините!

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

Ссылки

  • Wishlisted Games – поиск самых низких цен для вишлиста в Steam:
  • Бот, в котором можно подписаться на рассылку новых цен:
  • Предыдущий devlog:

Целью данной статьи не является реклама и продвижение сайтов по продаже ключей активаций. Wishlisted.games не продаёт ключи, а только ищет их на других платформах. Автор не несёт ответственности за возможные проблемы (хоть сам их и не имел) с доставкой цифровых продуктов покупателю и не имеет никакого отношения к администрации этих сайтов. Будьте внимательны при покупке ключей, обращайте внимание на регион и площадку активации (Steam, GOG, и т. д.). Крайне необходимо, чтобы они совпадали с настройками в лаунчере. Так же имейте в виду, что многие магазины в момент покупки добавляют комиссию платёжной системы к цене, которую вы видите перед покупкой.

11
2 комментария

Исторически высокая скидка = максимальная скидка за все время / максимальная скидка с даты выхода

У меня нет данных о цене с момента выхода, да и эта формула не верна, т.к. цены имеют тенденцию меняться и будет неправильно за базу брать цену на момент выхода игра. К слову, этот функционал уже давно реализован)