Перейти к содержимому

Сравнение цен маркетов

Поиск предмета → таблица цен продавцов и заявок покупателей → дневной график выбранного маркета. Сервер приложения хранит ключ и кеширует публичные данные; браузер получает только нужные поля.

  1. GET /v1/items?q=…&limit=20 после debounce, не на каждое нажатие клавиши.
  2. GET /v1/items/{item_id}/markets для выбранного предмета.
  3. GET /v1/items/{item_id}/history для одного маркета и выбранного диапазона.

Сортируй asks по amount по возрастанию, bids — по убыванию. Отображай их отдельно. Форматируй деньги по minor_units. Не объединяй Steam wallet balance и выводимые денежные балансы.

  • Поиск возвращает предметы из API, а не зашитые демонстрационные цены.
  • При смене фазы используется её item_id.
  • Пустая история показывает понятное пустое состояние.
  • На графике нет точек, которых API не вернул.
  • При 429 учитывается Retry-After, при 401 запросы останавливаются.
  • Ключ отсутствует в HTML, клиентском bundle, URL и логах.
  • Повторный показ того же предмета использует кеш; 100 зрителей не создают 100 upstream-запросов.

Это сравнение наблюдаемых предложений, не торговый бот и не обещание прибыли.

Скачай Market comparison starter и SDK из Downloads. Имена файлов и SHA-256 указаны в манифесте (examples и artifacts). Проверь контрольные суммы, распакуй пример в новую папку, установи локальный архив SDK командой npm install --ignore-scripts /path/to/archive.tgz, задай CSFOLDER_API_KEY в серверном окружении и запусти npm start. Открой http://127.0.0.1:4319. Нужен Node.js 22+; подробности есть в README архива.

Интерфейс примера на английском. Данные приходят из API, демонстрационных цен нет. История — отдельные точки дневных asks за последние 30 дней UTC и таблица значений. Есть пагинация поиска, предметы только с bids, неизвестные timestamps и пустая история. Цены и история кешируются на 30 минут, поиск — на 30 секунд. При 401/403 или исчерпании месячной квоты нужно исправить ключ/тариф и перезапустить сервер; 429 приостанавливает запросы на Retry-After, повтор — вручную. Фонового polling нет.

Это локальный пример, не готовый публичный прокси. Для публичного приложения нужны авторизация пользователей, защита от злоупотребления и общий кеш/лимитер между репликами. Не открывай пример наружу через туннель без этих мер. Архив не создаёт API-доступ: сначала проверь статус релиза.