Парсинг статуса сервера через 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. Следуя нашим примерам, вы быстро получите нужные данные и сможете интегрировать их в свой проект.