Страница 1 из 1

php API запрос

Добавлено: 13 дек 2016, 22:12
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 ) 
Какого вида должен быть запрос?

Re: php API запрос

Добавлено: 14 дек 2016, 10:13
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 :)

Re: php API запрос

Добавлено: 14 дек 2016, 13:47
verdad

Re: php API запрос

Добавлено: 15 дек 2016, 16:17
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 )
Так вообще можно делать или брать все сообщения и фильтровать?

Re: php API запрос

Добавлено: 15 дек 2016, 16:58
Chupaka
Фильтровать все, я не вижу в API оператора, похожего на "~"

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

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

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

$api_object->write('/log/print', false);
$api_object->write('?topics=system,info,account');

Re: php API запрос

Добавлено: 15 дек 2016, 19:40
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');
Возвращает пустой результат. Можно конечно по отдельности каждый выполнить, но мне придется делать огород на огороде)

Re: php API запрос

Добавлено: 15 дек 2016, 20:09
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('?#|');
по умолчанию, как у вас, считает И, а не ИЛИ

Re: php API запрос

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