Парсинг статуса сервера через API Battlemetrics на Python

    Battlemetrics - популярный сервис для мониторинга игровых серверов. Он предоставляет открытое API, которое позволяет разработчикам получать актуальную информацию: количество игроков онлайн, название сервера, карту и другие метрики. В этой статье мы разберём, как правильно выполнить парсинг данных с Battlemetrics с помощью Python, избежав типичных ошибок при формировании запроса.

    Подготовка к работе с API Battlemetrics

    Прежде чем писать код, необходимо получить API-токен. Зарегистрируйтесь на сайте Battlemetrics, перейдите в настройки профиля и создайте персональный токен доступа. Он потребуется для авторизации каждого запроса. Токен передаётся в заголовке Authorization в формате Bearer.

    Типичная ошибка при запросе к API

    Многие разработчики сталкиваются с проблемой: сервер возвращает ошибку или пустой ответ, хотя документация изучена. Чаще всего причина кроется в неправильном использовании параметра filter[servers][search]. Вместо указания IP-адреса в параметре fields:server (который отвечает за выбор возвращаемых полей), нужно передать поисковый запрос в фильтр.

    Пример неверного запроса

    import requests
    
    url = 'https://api.battlemetrics.com/servers'
    headers = {'Authorization': 'Bearer YOUR_TOKEN'}
    params = {
        'fields:server': '185.207.214.232:27200'
    }
    response = requests.get(url, headers=headers, params=params)
    print(response.text)

    В этом коде параметр fields:server используется не по назначению. Он определяет, какие поля (например, name, players, ip) включить в ответ, а не фильтрует серверы по IP.

    Правильный способ получить данные о сервере

    Для поиска конкретного сервера по IP-адресу или названию используйте параметр filter[servers][search]. Он принимает строку поиска и возвращает список подходящих серверов. Затем из ответа можно извлечь ID нужного сервера и запросить его детальную информацию.

    Корректный код на Python

    import requests
    
    url = 'https://api.battlemetrics.com/servers'
    headers = {'Authorization': 'Bearer YOUR_TOKEN'}
    params = {
        'filter[servers][search]': '185.207.214.232:27200'
    }
    response = requests.get(url, headers=headers, params=params)
    data = response.json()
    if data['data']:
        server_id = data['data'][0]['id']
        print(f'ID сервера: {server_id}')
    else:
        print('Сервер не найден')

    После получения ID сервера можно сделать отдельный запрос к https://api.battlemetrics.com/servers/{server_id} и получить полную информацию, включая текущий онлайн.

    Дополнительные параметры запроса

    API Battlemetrics поддерживает множество фильтров и опций. Например, filter[servers][game] ограничивает поиск конкретной игрой, а fields[server] позволяет запросить только нужные поля (name, players, ip, port, status). Комбинируя эти параметры, вы можете гибко настраивать выдачу.

    Пример с выбором полей

    params = {
        'filter[servers][search]': '185.207.214.232:27200',
        'fields[server]': 'name,players,ip,port,status'
    }

    Такой запрос вернёт только указанные поля, что ускорит обработку и снизит нагрузку на API.

    Обработка ошибок и лимиты

    Учитывайте, что у API Battlemetrics есть ограничение на количество запросов в минуту (rate limit). При превышении лимита сервер вернёт код 429. Рекомендуется добавлять задержку между запросами с помощью time.sleep() и обрабатывать исключения в коде.

    Также проверяйте статус ответа: response.status_code == 200 - успех, 401 - неверный токен, 404 - сервер не найден. Используйте конструкцию try-except для устойчивости скрипта.

    Заключение

    Парсинг статуса сервера через API Battlemetrics на Python - простая задача, если правильно указать параметры поиска. Главное - помнить, что для фильтрации по IP нужно использовать filter[servers][search], а не fields:server. Следуя нашим примерам, вы быстро получите нужные данные и сможете интегрировать их в свой проект.

    Часто задаваемые вопросы