CS2CRAP - Инструментарий для парсинга, автоматизации поиска выгод и торговли предметами Counter Strike 2
CS2CRAP - Набор инструментов для сбора и анализа актуальных данных с рынков и автоматизации торговли предметами из игры Counter Strike 2. На данный момент данные собираются из двух источников: Steam Market и CS:GO Market.
Этот инструментарий позволяет получить всю необходимую информацию о предметах Counter Strike 2, включая их ID, hash_name, ссылки на торговой площадке Steam, цены, количество продаж за последние сутки и ссылки на изображения предметов.
В репозитории также есть функции, позволяющие сортировать предметы (к примеру не учитывая граффити, стикеры и сувенирные скины), автоматически сравнивать цены на маркетах и присылать выгодные предметы с помощью вашего бота в Telegram.
- Установили проект
- Подключили телеграм-бота или запустили скрипт
- Получили актуальную разницу цен
- Закрыли сделку и получили профит
Все найденные мной репозитории на схожую тему были устаревшими, использовали не самые актуальные и выгодные методы сбора данных и не обладали таким разнообразным функционалом.
Данный репозиторий позволяет получать самые актуальные данные предметов на данный момент. Он не зависит от сторонних сервисов и сайтов потому что данные берутся напрямую из Steam.
В этом репозитории используются методы вычисления для нахождения данных о продажах предмета volume, вместо отправки отдельного узкого запроса, ограничение на который составляет около 300-500 запросов в час.
На старте для сбора основных данных используя 5 прокси мне пришлось потратить около 9 часов работы программы для сбора данных всех предметов, выставленных на торговую площадку.
Вам не придётся. В папке /data вы можете найти уже рабочую базу со всеми предметами на торговой площадке.
- id: уникальный идентификатор предмета.
- item_name: оригинальное название предмета.
- price_buy: минимальный выставленный лот на продажу предмета.
- price_sell: максимальный выставленный лот на покупку предмета.
- volume: количество продаж предмета за последние 24 часа.
- item_href: ссылка на предмет на торговой площадке.
- image_src: ссылка на изображение предмета.
- item_name: название предмета.
- item_price: минимальный выставленный лот на продажу предмета.
- Переходим в нужную нам директорию и клонируем репозиторий:
git clone https://github.com/ValvePython/steam.git
- Для дальнейшей настройки переходим в корень клонированного нами репозитория:
cd cs2crap
Внимание! Перед использованием инструментария необходимо установить фикс вспомогательной библиотеки Steam:
- Переходим в директорию steam_bot внутри проекта:
cd cs2crap/steam_bot
- Клонируем репозиторий библиотеки Steam:
git clone https://github.com/ValvePython/steam.git
- Переходим в клонированный репозиторий:
cd steam
- Применяем изменения из pull request #454 с фиксом библиотеки:
git pull https://github.com/ValvePython/steam.git pull/454/head
- Устанавливаем библиотеку в режиме редактирования:
pip install -e .
- Для дальнейших шагов возвращаемся в корень проекта:
cd ../../../
Из корневой директории проекта выполните установку проекта в режиме редактирования:
pip install -e .
Для работы cs2crap требуются прокси. Необходимо создать файл proxies.txt в папке /data, и в него поместить список в следующем формате:
// без доступа по ip (рекомендуется):
login:password@ip:port
// с доступом по ip:
ip:port
Для использования функционала бота вы сначала должны создать его.
После успешного создания бота получаем его токен и id вашего с ботом чата, в папке cs2crap/telegram_bot создаём файл "config.json" и закидываем в него полученные данные:
{
"BOT_TOKEN": "your_bot_token",
"CHAT_ID": "your_chat_id"
}
Для начала работы с cs2crap с помощью бота запустите main.py, находящийся в пакете telegram_bot из корневой папки. Это можно сделать c помощью вашей IDE либо выполнить следующую команду в терминале:
python cs2crap/telegram_bot/main.py
После старта бот отправляет сообщение об успешном запуске.
- /update: обновление базы данных предметов (подгрузка всех предметов с торговой площадки Steam на старте или обновление к примеру после выхода нового кейса)
- /cscrap: запуск главной функции для обновления цен, их сравнения и отправки сообщений в телеграм при необходимости (эта команда потребует дальнейшего ввода желаемого диапазона цен для поиска в формате 'от-до')
- /stop: событие остановки главной функции /cscrap
- /methods: вывод включенных методов торговли
- /stm2stm: включение/выключение метода торговли Steam -> Steam
- /csm2stm: включение/выключение метода торговли CS:GO Market -> Steam
- /stm2csm: включение/выключение метода торговли Steam -> CS:GO Market
Перед запуском главных функций измените название .csv файла, находящегося в /data, с "items_database_backup (???).csv" на "items_database.csv" (или копируйте его для сохранения backup файла) или выполните команду /update для создания нового "items_database.csv" (имейте в виду, что этот процесс может занять много времени, так как для корректной работы необходимо получить все предметы Counter Strike 2 с торговой площадки Steam).
После того как у вас есть готовая база данных предметов items_database.csv в корне проекта вы можете запускать главные функции: /update для обновления items_database.csv и /cscrap для поиска выгодных предметов.
- Получение базы данных всех предметов Counter Strike 2 на торговой площадке Steam item_name, item_href и image_src.
- Получение идентификатора предмета по item_href.
- Получение объема продаж предмета volume за последние 24 часа используя item_href предмета.
- Получение цен предмета price_buy, price_sell, по его id.
Функция для получения запросов принимает значения от и до, соответствующие порядку отображения предметов на торговой площадке:
- start_from - 0, начинаем с первой страницы.
- items_count - указываем значение 21100, большее чем на данный момент показывает нам Steam.
- sort_column - сортировка по популярности или цене
- sort_dir - сортировка по возрастанию или убыванию
update_database(
start_from = 0,
items_count = 21100,
sort_column = "popular", # "popular" or "price"
sort_dir = "desc", # "asc" or "desc"
) -> None:
Во время работы этой функции частыми явлениями являются исключения запросов "429 Client Error: Too Many Requests for url", сами по себе сервера Steam не славятся бесперебойностью, если процесс получения данных продолжается схожие выводы в консоль можно игнорировать, однако в случае продолжения получения ошибок в течении долгого времени лучше остановить работу программы и пополнить запас качественных прокси серверов для лучшей стабильности и меньшей затраты времени.
- price_range: желаемый диапазон цен для поиска
- STM2STM: флаг сравнения цен для перепродажи предмета внутри Steam
- CSM2STM: флаг сравнения цен для перепродажи предмета из CS:GO Market в Steam
- STM2CSM: флаг сравнения цен для перепродажи предмета из Steam в CS:GO Market
- stop_cscrap_event: событие для остановки поиска командой /stop в чате с ботом
cscrap(
price_range=(-1, float("inf")),
STM2STM=True,
CSM2STM=False,
STM2CSM=False,
stop_cscrap_event=asyncio.Event,
):
- pandas == 2.1.4
- beautifulsoup4 == 4.12.2
- requests == 2.31.0
- colorama == 0.4.6
- aiogram == 3.3.0
Также в новых ветках разработки бота для Steam была использована библиотека steam 1.4.4, однако она перестала корректно работать после обновления логики авторизации на стороне сервера Valve. В этом проекте была использована починенная версия.
На данный момент проект находится в активной стадии разработки, однако в силу того, что у меня две руки, так ещё и немного изогнутые, разработка идёт медленно.
В процессе разработки я стараюсь сразу убирать проблемные места, прописывая тесты внизу каждого модуля и перебирая возможные случаи способные вызвать сбой. Код который вы видите здесь уже был проверен несколько раз, но если вы вдруг найдёте что-то, предлагайте изменения или свяжитесь со мной.
На данном этапе буду рад поддержке, ремаркам в коде и подзатыльникам от поистине шарящих.
Также ищу товарищей по цеху, проект уже давно нуждается в хорошей команде.
По всем вопросам: ferjenkill@gmail.com