php API запрос

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Ответить
verdad
Сообщения: 14
Зарегистрирован: 13 дек 2016, 21:57

php API запрос

Сообщение verdad »

Всем доброго времени суток! Пробую вытянуть из микротика инфу по подключенным устройствам. Без строк 2 и 3 работает, но нужно только несколько столбцов выводе.

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

$request='/caps-man/registration-table/print'
1.    $api_object->write($request);
2.    $api_object->write('=stats=');
3.    $api_object->write('=.proplist=interface,mac-address,rx-signal,uptime,packets');
Вывод такой:

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

Array ( [0] => !trap [1] => =message=no such command prefix [2] => !done ) 
Какого вида должен быть запрос?
Последний раз редактировалось verdad 15 дек 2016, 20:42, всего редактировалось 2 раза.
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: php API запрос

Сообщение Chupaka »

Доброго. Подозреваю, в команде write должен быть второй аргумент - завершать ли запрос и выполнять его. Он должен быть, например, true (по умолчанию) в последней части команды, а предыдущие части должны содержать false.

Пробуйте так:

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

$api_object->write($request, false);
$api_object->write('=stats=', false);
$api_object->write('=.proplist=interface,mac-address,rx-signal,uptime,packets');
Идеальный вариант - почитать документацию к своей реализации php API :)
verdad
Сообщения: 14
Зарегистрирован: 13 дек 2016, 21:57

Re: php API запрос

Сообщение verdad »

verdad
Сообщения: 14
Зарегистрирован: 13 дек 2016, 21:57

Re: php API запрос

Сообщение verdad »

Еще маленький вопрос.
Хочу на страничке мониторинга выводить события авторизации из лога микротика.
мне подходит токая команда: /log print where message~"log"
пытаюсь все тем же способом ее выполнить через php.

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

		$message = "log";
		$api_object->write('/log/print', false);
		$api_object->write('=where=', false);
		$api_object->write('?=message='.$message,true);
		$hs_log =  $api_object->read(false);
В итоге: Array ( [0] => !done ) Array ( [0] => !done ) Array ( [0] => !done )
Так вообще можно делать или брать все сообщения и фильтровать?
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: php API запрос

Сообщение Chupaka »

Фильтровать все, я не вижу в API оператора, похожего на "~"

?=message=blabla - это сравнение, а не поиск подстроки, увы

конкретно по авторизации можно ещё попробовать

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

$api_object->write('/log/print', false);
$api_object->write('?topics=system,info,account');
verdad
Сообщения: 14
Зарегистрирован: 13 дек 2016, 21:57

Re: php API запрос

Сообщение verdad »

Команда:

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

/log print where topics=hotspot,info,debug || topics=hotspot,account,info,debug
полностью удовлетворяет моим нуждам. Но как правильно их объединить в скрипте?

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

					$api_object->write('/log/print', false);
					$api_object->write('?topics=hotspot,info,debug', false);
					$api_object->write('?topics=hotspot,account,info,debug');
Возвращает пустой результат. Можно конечно по отдельности каждый выполнить, но мне придется делать огород на огороде)
Аватара пользователя
Chupaka
Сообщения: 3880
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: php API запрос

Сообщение Chupaka »

http://wiki.mikrotik.com/wiki/Manual:API#Queries

т.е. запрос должен быть таким:

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

               $api_object->write('/log/print', false);
               $api_object->write('?topics=hotspot,info,debug', false);
               $api_object->write('?topics=hotspot,account,info,debug', false);
               $api_object->write('?#|');
по умолчанию, как у вас, считает И, а не ИЛИ
verdad
Сообщения: 14
Зарегистрирован: 13 дек 2016, 21:57

Re: php API запрос

Сообщение verdad »

Ранее видел эту инструкцию и даже пробовал ее читать, но мой английский ни на что не годен. Она меня только запутала. Спасибо большое!
Ответить