Проверка наличия игроков на игровом сервере

Искусство написания bash скриптов. Делимся своими наработками
Ответить
Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Проверка наличия игроков на игровом сервере

Сообщение Серый » 08 май 2017, 21:41

Есть сайт игры bzflag http://bzstats.strayer.de/servers/stats ... 82&lang=en , на котором показано в режиме онлайн (обновляется раз в 5 минут) кто играет в данный момент.

Цель: распарсить страницу, посчитав сколько в данный момент играет человек, и вывести цифру во всплывающее уведомление. Желательно использовать однострочный скрипт, т.к. его нужно будет добавить в конфиг i3wm.

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

Сам скрипт.

Код: Выделить всё

tmp=$(curl -s http://bzstats.strayer.de/servers/stats/?serverid=43682 | grep align_callsign | wc -l) ; notify-send 'Играет  '$tmp'  человек'
Расшифровка.

Код: Выделить всё

tmp=$(что-то-там) # создаём переменную, которой будет присвоено значение того что в скобках
curl # скачать страницу
-s # в тихом режиме, когда в консоль не выводится никакая информация
http://bzstats.strayer.de/servers/stats/?serverid=43682 # сама страница. Важный момент: в конце ссылки убрано &lang=en, без этого не получилось добиться нормальной работы
| # передача того, что скачали с интернета, следующей команде
grep # которая ищет только строки, содержащие align_callsign. Количество этих совпадений будет равно количеству игроков. Это было вычислено просто случайно, изучая исходный код страницы.
| # передача этих строк команде
wc -l # которая с помощью ключа -l подсчитывает их количество
; # переход к выполнению следующей команды, используется в однострочных скриптах между разными командами.
notify-send 'Играет  '$tmp'  человек' # которая выводит всплывающее уведомление с количеством игроков (переменная tmp$) в данный момент
Всё это через хоткеи ctrl+shift+i помещено в конфиг моего i3wm.

Код: Выделить всё

bindsym ctrl+shift+i exec --no-startup-id "tmp=$(curl -s http://bzstats.strayer.de/servers/stats/?serverid=43682 | grep align_callsign | wc -l) ; notify-send 'Играет  '$tmp'  человек'"
Участок страницы, которую парсим, на момент, когда играло 10 человек.
Изображение

Всплывающее уведомление по нажатию вышеуказанных хоткеев.
Изображение

Далее можно по крону проверять в неактивное время сервера (когда ноль игроков) и вывести уведомление, когда их станет больше, чем ноль. Но меня пока что устраивает проверка и в ручном режиме, по нажатию на хоткеи.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: Yahoo! Slurp [Bot] и 0 гостей