Вы находитесь на странице: 1из 29

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ

ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ «МИСиС»

ИНСТИТУТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И КОМПЬЮТЕРНЫХ


НАУК (ИТКН)

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ (АСУ)

ОТЧЕТ ПО ПРОИЗВОДСТВЕННОЙ ПРАКТИКЕ

«Разработка бота-парсера в Telegram для торговой площадки Steam скинов из


игры CS GO»

Выполнил:
студент группы БИВТ-20-5
Зардания Данил Даурович

Проверил:
к.т.н., с.н.с.
Микитенко Игорь Иванович

Москва, 2023
Оглавление
Введение.........................................................................................................................................3
1. Анализ предметной области..................................................................................................4
2. Задание на практику...............................................................................................................5
3. Требования к системе............................................................................................................6
4. Проектирование......................................................................................................................7
5. Средства реализации............................................................................................................10
6. Реализация.............................................................................................................................11
7. Тестирование........................................................................................................................15
8. Заключение...........................................................................................................................16
Список источников......................................................................................................................17
Приложения..................................................................................................................................18

2
Введение
В современном мире компьютерные игры приобрели огромную
популярность и стали важной частью культуры молодежи. Одной из самых
популярных игр является Counter-Strike: Global Offensive (CS:GO),
многопользовательский шутер от первого лица. CS:GO предлагает игрокам
уникальный опыт соревновательного онлайн-гейминга и имеет развитую
экономическую составляющую, связанную с торговлей внутриигровыми
предметами, такими как скины (внешний вид оружия).

Steam, платформа цифровой дистрибуции компьютерных игр, является


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

Целью данного проекта производственной практики является разработка


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

В рамках проекта будут использованы современные технологии


разработки программного обеспечения, включая работу Telegram Bot API, а
также методы анализа данных.

Результаты данного проекта будут полезными как для активных игроков


CS:GO, желающих эффективно управлять своими активами на торговой
площадке Steam, так и для разработчиков других инструментов и сервисов,

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

Данный проект не только представляет актуальность в контексте


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

4
1. Анализ предметной области

Разработка требует глубокого понимания предметной области, включая


основные аспекты игры, экономические факторы и особенности торговой
платформы Steam.

Counter-Strike: Global Offensive (CS:GO) – это популярная


многопользовательская онлайн-игра в жанре шутера от первого лица. Игра
развивается компанией Valve Corporation и имеет множество активных
игроков по всему миру. В CS:GO игроки могут сражаться друг с другом в
командных матчах и соревнованиях. Важным аспектом игры являются
внутриигровые предметы, такие как скины, которые изменяют внешний вид
оружия и делают его уникальным.

Steam – это платформа цифровой дистрибуции компьютерных игр,


созданная компанией Valve. С помощью Steam, пользователи могут
покупать, продавать и торговать скинами, включая скины из игры CS:GO.
Steam позволяет разработчикам взаимодействовать с платформой и получать
информацию о предметах, ценах и других данных.

Скины – это внутриигровые предметы, которые изменяют внешний вид


оружия в игре CS:GO. Они имеют различные уровни редкости и качества, что
влияет на их стоимость. Скины могут быть приобретены через игровой
магазин, получены в результате игровых достижений или приобретены на
торговой площадке Steam.

Telegram – популярный мессенджер с богатым функционалом, включая


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

5
Торговля скинами CS:GO образует сложную экономическую систему, где
цены на скины могут значительно варьироваться. Факторы, влияющие на
цены, включают популярность скина, его редкость, спрос и предложение на
рынке, а также события и обновления в игре CS:GO. Анализ этих факторов
может помочь в прогнозировании изменений цен и принятии обоснованных
решений при торговле.

Анализ предметной области позволяет понять, что существует


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

6
2. Задание на практику

Целью данного проекта является создание функционального и


эффективного инструмента, который облегчит процесс отслеживания и
анализа цен на скины CS:GO на торговой площадке Steam. Проект направлен
на удовлетворение потребностей активных игроков и торговцев скинами.

Для достижения поставленной цели определены следующие задачи:

1) Разработка и реализация бота-парсера: Необходимо разработать


программу, которая будет взаимодействовать с платформой Steam и получать
информацию о скинах CS:GO, их ценах и изменениях. Бот-парсер должен
быть интегрирован с Telegram, чтобы предоставлять пользователю доступ к
полученным данным. [1]

2) Реализация функциональности парсинга данных: Бот-парсер должен


осуществлять парсинг данных о скинах CS:GO с торговой площадки Steam.
Это включает получение информации о наличии скинов, их ценах, редкости,
качестве и других характеристиках. Парсинг данных должен быть
эффективным и обновлять информацию в режиме реального времени. [5]

3) Реализация функциональности поиска: Бот-парсер должен


предоставлять возможность пользователям осуществлять поиск скинов
CS:GO. Пользователи смогут настраивать параметры поиска,
соответствующие их предпочтениям.

4) Реализация функциональности анализа данных: Бот-парсер должен


проводить анализ полученных данных о ценах на скины CS:GO. Это
включает расчет различных статистических показателей, таких как средняя
цена, изменения цен со временем и другие. Анализ данных поможет
пользователям получить информацию о текущей ситуации на рынке скинов и
принять обоснованные решения при торговле.

7
5) Создание дружественного интерфейса: Бот-парсер должен иметь
интуитивно понятный и удобный интерфейс, который позволит
пользователям легко взаимодействовать с ним и получать нужную
информацию о скинах CS:GO. Интерфейс должен быть простым и понятным
даже для непрофессиональных пользователей. В интерфейсе должны
присутствовать 7 кнопок (Ножи, Перчатки, AWP, AK-47, M4A1-S, M4A4,
Поиск по названию).

В результате выполнения поставленных задач будет создан


функциональный бот-парсер в Telegram для торговой площадки Steam
скинов из игры CS:GO. Этот инструмент будет облегчать процесс
отслеживания цен на скины, предоставлять актуальную информацию и
помогать пользователям принимать обоснованные решения при торговле.

8
3. Требования к системе

Необходимо определить требования к функциональности,


производительности, безопасности и пользовательскому интерфейсу
системы.

Функциональные требования:

- Парсинг данных: Система должна быть способна парсить данные о


скинах CS:GO с торговой площадки Steam, включая информацию о ценах и
других характеристиках.

- Анализ данных: Система должна проводить анализ полученных данных


о ценах на скины, включая расчет статистических показателей и
предоставление информации о изменениях цен со временем.

- Поиск: Система должна предоставлять возможность пользователям


осуществлять поиск скинов CS:GO по названию.

Требования к производительности:

- Эффективность парсинга данных: Система должна обеспечивать


быстрый и эффективный процесс парсинга данных о скинах CS:GO с
торговой площадки Steam, чтобы обновления информации происходили в
режиме реального времени.

- Быстродействие анализа данных: Система должна обеспечивать


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

Требования к пользовательскому интерфейсу:

- Простота использования: Интерфейс системы должен быть интуитивно


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

9
- Наглядность и понятность: Интерфейс должен предоставлять
информацию о скинах CS:GO и их ценах в наглядной и понятной форме,
позволяя пользователям быстро ориентироваться в предоставляемых данных.

Требования к поддержке:

- Обновления и поддержка: Система должна быть разработана с учетом


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

Удовлетворение этих требований обеспечит функциональность,


производительность, и удобство использования системы для пользователей.

10
4. Проектирование

Для проектирования бота необходимы нарисовать блок-схему, которая


будет описывать основные блоки и их взаимодействие в боте-парсере. (Рис.
1.)

11
Рис. 1. Блок-схема основной работы бота-парсера.

Блок-схема описывает работу бота, где пользователь выбирает нажатием


кнопки тип скина, после чего бот парсит с веб-версии Steam первые 20
скинов этого скина, в том числе его данные (ссылка, название, цена и тд.),
после чего выводит все это. По окончанию работы, пользователь может
продолжить парсить тот же тип скина, или перейти к другому. Так же
отдельно функцией будет подчитываться средняя цена этого скина, за
последние месяц. Работа функции описывается отдельной блок-схемой. (Рис.
2.)

12
Рис. 2. Блок-схема функции подсчета средней цены.

Для описания поиска скина нарисован отдельная блок-схема,


описывающая работу поиска, где после ввода названия скина пользователем,
происходит цикл до тех пор, пока не найден скин с таким названием. (Рис. 3.)

13
Рис. 3. Блок-схема поиска цена.

Для проектирования интерфейса бота было нарисован макет, состояищий


из чата в Telegram с кнопками и сообщениями пользователя и бота.

14
Интерфейс бота интуитивно понятный, удобный в использовании и
предоставляет пользователю все необходимые функции. (Рис. 4.)

Рис. 4. Макет интерфейса бота.

Такой проект бота-парсера в Telegram для торговой площадки Steam


скинов из игры CS:GO позволит пользователям легко получать информацию

15
о скинах и проводить анализ данных о ценах, помогая им принимать
информированные решения при торговле скинами CS:GO.

16
5. Средства реализации

Python является широко используемым языком программирования,


который предлагает простой и понятный синтаксис. Он обладает богатым
набором библиотек и фреймворков, которые могут быть использованы для
разработки бота-парсера, включая работу с Telegram API. [3]

Telegram Bot API предоставляет набор инструментов и интерфейсов для


разработки ботов в Telegram. Он позволяет создавать ботов, управлять их
поведением, отправлять и получать сообщения, а также взаимодействовать с
пользователями. [4]

Для парсинга данных с торговой площадки Steam и анализа цен на скины


CS:GO можно использовать различные библиотеки Python, такие как requests
для работы с HTTP-запросами. [2]

Использование указанных средств позволит эффективно реализововать


функциональности бота-парсера в Telegram для торговой площадки Steam
скинов из игры CS:GO. Python и соответствующие библиотеки обеспечат
гибкость и мощные инструменты для работы с API, парсинга и анализа
данных. Telegram Bot API позволит взаимодействовать с платформами
Telegram и Steam для получения данных о скинах и отправки уведомлений.
Библиотеки для парсинга облегчат процесс извлечения и обработки
информации о скинах и ценах.

17
6. Реализация

Перед тем как реализовывать непосредственно код для бота, необходимо


зарегистрировать нового бота в Telegram, следуя инструкциям Telegram
BotFather. Токен на скриншоте скрыт для безопасности. (Рис. 5.)

Рис. 5. Скриншот регистрации нового бота в BotFather.

После регистрации нового бота и получения токена, можно перейти к


установлению необходимых библиотек. В среде разработки PyCharm
установим requests для парсинга и aiogram для работы с Telegram. (Рис. 6.)

18
Рис. 6. Установка библиотек requests и aiogram.

Затем непосредственно перейдем к кодированию бота, где привяжем код


с ботом при помощи токена, пропишем кнопки (Ножи, Перчатки, AWP, AK-
47, M4A1-S, M4A4), при нажатии которых, будут парсятся данные о скине из
веб-версии Steam и подчет средней цены этого скина, а также осуществлять
поиск по названию скина (Поиск по названию).

Сам код отображен в Приложении 1.

Продемонстрируем начальную страницу бота. Исходя из скриншота мы


видим, что наши кнопки отображены корректно (Рис. 7.)

19
Рис. 7. Демонстрация начальной страницы бота.

Продемонстрируем работу парсинга нажатием кнопки «Ножи». Бот


парсит скины из веб-версии Steam, отправляет в виде сообщения название
скина, его ссылку, изображение, цену, а также считает среднюю цены за
последний месяц. (Рис. 8.)

20
Рис. 8. Демонстрация парсинга.

Продемонстрируем поиск скина по названию нажатием кнопки «Поиск по


названию», а затем отправим название скина. Бот находит и парсит данные
об этом скине. (Рис. 9.)

21
Рис. 9. Демонстрация поиска.

После успешной реализации всех компонентов бота-парсера, он готов к


использованию для получения информации о скинах CS:GO и обеспечения
удобного взаимодействия с торговой площадкой Steam в Telegram.

22
7. Тестирование

Тестирование является важным шагом для обеспечения надежной и


стабильной работы системы. В процессе тестирования были проверены все
функциональные блоки. Вот основные виды тестирования, которые были
проведены:

Модульное тестирование:

- Тестирование отдельных модулей программы, таких как функции


парсинга данных, поиска и т. д.

- Использование юнит-тестов для проверки корректности работы каждого


модуля при различных условиях.

Интеграционное тестирование:

- Проверка взаимодействия между различными компонентами бота,


такими как Telegram API, модули обработки данных и уведомлений.

Тестирование пользовательского интерфейса:

- Проверка работы команд и кнопок в Telegram, а также корректности


ответов бота на различные запросы пользователей.

Тестирование функциональности:

- Тестирование различных сценариев использования, чтобы убедиться в


правильности обработки запросов пользователей.

Тестирование производительности:

- Оценка производительности бота при обработке большого объема


данных. Это может включать проверку времени ответа, обработки и передачи
данных, а также обработку параллельных запросов.

Тестирование на различных платформах:

23
- Тестирование работы бота на различных устройствах и платформах для
обеспечения совместимости и стабильности.

После проведения тестирования, были исправлены все выявленные


ошибки.

24
8. Заключение

В ходе производственной практики был разработан бот-парсер в


Telegram для торговой площадки Steam скинов из игры CS:GO. Этот проект
имеет большой потенциал и может быть полезен для игроков и трейдеров,
которые интересуются ценами и доступностью скинов CS:GO.

В результате разработки бота-парсера в Telegram для торговой


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

Дальнейшее развитие проекта может включать расширение


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

В целом, проект по разработке бота-парсера в Telegram для торговой


площадки Steam скинов CS:GO был успешно завершен, и его реализация
открыла перспективы для дальнейшего развития и применения в
практических целях.

25
Список источников

1. Проектирование и разработка чат-бота для представления расписания в


социальной сети [Электр. ресурс] // КиберЛенинка - режим доступа:
https://cybеrleninkа.ru/article/proektirovanie-i-rаzrabotka-chat-bota-dlya-
predstavleniya-raspisaniya-v-sotsialnoy-seti, дата обращения: 29.06.23
2. Чат-боты: введение от разработчика [Электр. ресурс] // Proglib - режим
доступа: https://prоglib.iо/p/chаt-bоts-intro, дата обращения: 29.06.23
3. Python [Электр. ресурс] // Wikipedia - режим доступа
https://ru.wikipеdia.org/wiki/Python, дата обращения: 01.07.23
4. Telegram Bot API [Электр. ресурс] // Telegram - режим доступа:
https://cоre.telegram.org/bots/api, дата обращения: 01.07.23
5. Парсинг: что это и где применяется [Электр. ресурс] // vc.ru - режим
доступа: https://vс.ru/sеrvicеs/523477-parsing-chto-eto-i-gde-
primenyaetsya, дата обращения: 02.06.23

26
Приложения
Приложение 1. Листинг основного класса программы
import json
from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher.filters import Text
from aiogram.utils.markdown import hbold, hlink
from main import collect_data
import os
import asyncio

bot = Bot(token=os.getenv('TOKEN'), parse_mode=types.ParseMode.HTML)


dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
start_buttons = ['Ножи', 'Перчатки', 'AWP', 'AK-47', 'M4A1-S', 'M4A4', 'Поиск по названию']
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.add(*start_buttons)

await message.answer('Выберите категорию', reply_markup=keyboard)

@dp.message_handler(Text(equals='Ножи'))
async def get_discount_knives(message: types.Message):
await message.answer('Please waiting...')

collect_data(cat_type=1)

with open('result.json') as file:


data = json.load(file)

for index, item in enumerate(data):


card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'

if len(prices) > 0:
average_price = sum(prices) / len(prices)
await message.answer(f'Средняя цена: ${average_price}')

await message.answer(card)

@dp.message_handler(Text(equals='Перчатки'))
async def get_discount_guns(message: types.Message):
await message.answer('Please waiting...')

collect_data(cat_type=2)

with open('result.json') as file:


data = json.load(file)

for index, item in enumerate(data):


card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'

if len(prices) > 0:
average_price = sum(prices) / len(prices)
await message.answer(f'Средняя цена: ${average_price}')

await message.answer(card)

@dp.message_handler(Text(equals='AWP'))
async def get_discount_guns(message: types.Message):
await message.answer('Please waiting...')

collect_data(cat_type=3)

with open('result.json') as file:

27
data = json.load(file)

for index, item in enumerate(data):


card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'

if len(prices) > 0:
average_price = sum(prices) / len(prices)
await message.answer(f'Средняя цена: ${average_price}')

await message.answer(card)

@dp.message_handler(Text(equals='AK-47'))
async def get_discount_guns(message: types.Message):
await message.answer('Please waiting...')

collect_data(cat_type=4)

with open('result.json') as file:


data = json.load(file)

for index, item in enumerate(data):


card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'

if len(prices) > 0:
average_price = sum(prices) / len(prices)
await message.answer(f'Средняя цена: ${average_price}')

await message.answer(card)

@dp.message_handler(Text(equals='M4A1-S'))
async def get_discount_guns(message: types.Message):
await message.answer('Please waiting...')

collect_data(cat_type=5)

with open('result.json') as file:


data = json.load(file)

for index, item in enumerate(data):


card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'

if len(prices) > 0:
average_price = sum(prices) / len(prices)
await message.answer(f'Средняя цена: ${average_price}')

await message.answer(card)

@dp.message_handler(Text(equals='M4A4'))
async def get_discount_guns(message: types.Message):
await message.answer('Please waiting...')

collect_data(cat_type=6)

with open('result.json') as file:


data = json.load(file)

for index, item in enumerate(data):


card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'

if len(prices) > 0:
average_price = sum(prices) / len(prices)
await message.answer(f'Средняя цена: ${average_price}')

await message.answer(card)

28
@dp.message_handler(Text(equals='Поиск по названию'))
async def search_by_name(message: types.Message):
await message.answer('Введите название скина для поиска:')

@dp.message_handler()
async def process_search_by_name(message: types.Message):
search_query = message.text

search_results = perform_search_by_name(search_query)

if search_results:
for item in search_results:
card = f'{hlink(item.get("full_name"), item.get("3d"))}\n' \
f'{hbold("Цена: ")}${item.get("item_price")}'
await message.answer(card)
else:
await message.answer('По вашему запросу ничего не найдено.')

def main():
executor.start_polling(dp)
if __name__ == '__main__':
main()

29

Вам также может понравиться