Академический Документы
Профессиональный Документы
Культура Документы
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ «МИСиС»
Выполнил:
студент группы БИВТ-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 предлагает игрокам
уникальный опыт соревновательного онлайн-гейминга и имеет развитую
экономическую составляющую, связанную с торговлей внутриигровыми
предметами, такими как скины (внешний вид оружия).
3
связанных с CS:GO и игровой индустрией в целом. Такой бот-парсер
представляет собой эффективное решение, которое облегчит и улучшит опыт
игроков и поможет им достичь большей эффективности в сфере торговли
скинами.
4
1. Анализ предметной области
5
Торговля скинами CS:GO образует сложную экономическую систему, где
цены на скины могут значительно варьироваться. Факторы, влияющие на
цены, включают популярность скина, его редкость, спрос и предложение на
рынке, а также события и обновления в игре CS:GO. Анализ этих факторов
может помочь в прогнозировании изменений цен и принятии обоснованных
решений при торговле.
6
2. Задание на практику
7
5) Создание дружественного интерфейса: Бот-парсер должен иметь
интуитивно понятный и удобный интерфейс, который позволит
пользователям легко взаимодействовать с ним и получать нужную
информацию о скинах CS:GO. Интерфейс должен быть простым и понятным
даже для непрофессиональных пользователей. В интерфейсе должны
присутствовать 7 кнопок (Ножи, Перчатки, AWP, AK-47, M4A1-S, M4A4,
Поиск по названию).
8
3. Требования к системе
Функциональные требования:
Требования к производительности:
9
- Наглядность и понятность: Интерфейс должен предоставлять
информацию о скинах CS:GO и их ценах в наглядной и понятной форме,
позволяя пользователям быстро ориентироваться в предоставляемых данных.
Требования к поддержке:
10
4. Проектирование
11
Рис. 1. Блок-схема основной работы бота-парсера.
12
Рис. 2. Блок-схема функции подсчета средней цены.
13
Рис. 3. Блок-схема поиска цена.
14
Интерфейс бота интуитивно понятный, удобный в использовании и
предоставляет пользователю все необходимые функции. (Рис. 4.)
15
о скинах и проводить анализ данных о ценах, помогая им принимать
информированные решения при торговле скинами CS:GO.
16
5. Средства реализации
17
6. Реализация
18
Рис. 6. Установка библиотек requests и aiogram.
19
Рис. 7. Демонстрация начальной страницы бота.
20
Рис. 8. Демонстрация парсинга.
21
Рис. 9. Демонстрация поиска.
22
7. Тестирование
Модульное тестирование:
Интеграционное тестирование:
Тестирование функциональности:
Тестирование производительности:
23
- Тестирование работы бота на различных устройствах и платформах для
обеспечения совместимости и стабильности.
24
8. Заключение
25
Список источников
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
@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)
@dp.message_handler(Text(equals='Ножи'))
async def get_discount_knives(message: types.Message):
await message.answer('Please waiting...')
collect_data(cat_type=1)
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)
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)
27
data = json.load(file)
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)
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)
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)
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