php API запрос

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

php API запрос

Сообщение verdad » 13 дек 2016, 22:12

Всем доброго времени суток! Пробую вытянуть из микротика инфу по подключенным устройствам. Без строк 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
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: php API запрос

Сообщение Chupaka » 14 дек 2016, 10:13

Доброго. Подозреваю, в команде 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 » 14 дек 2016, 13:47


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

Re: php API запрос

Сообщение verdad » 15 дек 2016, 16:17

Еще маленький вопрос.
Хочу на страничке мониторинга выводить события авторизации из лога микротика.
мне подходит токая команда: /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
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: php API запрос

Сообщение Chupaka » 15 дек 2016, 16:58

Фильтровать все, я не вижу в 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 » 15 дек 2016, 19:40

Команда:

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

/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
Сообщения: 681
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: php API запрос

Сообщение Chupaka » 15 дек 2016, 20:09

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 » 15 дек 2016, 20:40

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

Ответить