Intereting Posts
Разделить строку на текст и номер Учетная запись службы Google Диска и «Неавторизованный клиент или область в запросе» Удалить первый и последний экземпляр строки? Правильный способ избежать ввода данных перед переходом на ODBC Категории и подкатегории Google Диска V3, клиент API Google 2.0 2.0 – пакетная загрузка не работает Не удалось сохранить дату в базе данных в php Можно ли изменить $ _ в php? Ошибка сброса PDO, если используется MYSQL_ATTR_INIT_COMMAND Как объявить более одного заголовка на PHP Как отправить электронную почту с арабским контентом через почтовую функцию PHP? автозапуск на другие сайты php script Являются ли @imagecreatefromjpeg и imagejpeg () эффективными для предотвращения загрузки пользователями изображений с вредоносным кодом php внутри них? Проблемы передачи данных между страницами PHP с помощью POST Геолокация Google с использованием информации о ячейках памяти Curl 400 Bad request PHP

Список XMPPHP с онлайн-статусом

Я использую XMPPHP для получения списка пользователей моего аккаунта GMail.
Может ли XMPPHP также сообщить мне статус онлайн-контактов в списке?
Я не могу найти, как это сделать …

веселит.

Вот пример списка реестров и онлайн-присутствие пользователей GMail;

$user_name = 'ENTER_EMAIL_ID'; $password = 'ENTER_PASSWORD'; $end_loop = 0; $conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO); $conn->autoSubscribe(); try { $conn->connect(); while($end_loop <=0) { $payloads = $conn->processUntil(array('end_stream', 'session_start','roster_received')); foreach($payloads as $event) { $pl = $event[1]; switch($event[0]) { case 'session_start': $conn->getRoster(); $conn->presence('I m presence'.time()); break; case 'roster_received': $array_contact=$pl; foreach($array_contact as $user => $friends_name){ echo "<li>".$user.'_NAME_'.$friends_name['name'].'</li>'; } $end_loop++; break; } } } while(1) { $payloads = $conn->processUntil(array('presence')); echo "<li>".$payloads[0][1]['from']."_Show_". $payloads[0][1]['show']."</li>"; $_SESSION[$payloads[0][1]['from']] = "~~"; } $conn->disconnect(); } catch(XMPPHP_Exception $e) { die($e->getMessage()); } 

Я не пробовал это с помощью Google Talk, но, как правило, вы ищете

 $roster->getPresence($jid)['status'] 
 $uStatus = $conn->roster->getPresence($jid); echo "Online status: " . $uStatus['show']; // tells whether available or unavailable or dnd echo "Status message: " . $uStatus['status']; // shows the user's status message 

Я ответил на аналогичный вопрос: XMPPHP GTalk Status

Вот ключи, чтобы заставить его работать:

  1. $ conn-> presence () не только отправляет ваш статус на сервер, но также собирает статус каждого из ваших контактов и заполняет ваш список. Он фактически делает то же самое, что и $ conn-> getRoster (), но также собирает информацию о присутствии для каждого контакта.
  2. Вы должны отложить сценарий, чтобы дать серверу возможность отправлять через блоки iq, которые, как представляется, имеют один контакт за раз. Я видел, как в примере кода используются как $ conn-> processUntil ('presence'), так и $ conn-> processUntil ('roster_received'), но первый не ждет достаточно долго, а второй никогда не заканчивается. Я закончил использование $ conn-> processTime (2), чтобы заставить его ждать 2 секунды, чтобы убедиться, что он получил все блоки iq.

Другой ключ для меня заключался в подробном протоколировании. Вы делаете это в своей начальной конструкции объекта:

 $conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE); 

Это будет выводить подробный журнал на любой ваш вывод (в моем случае это окно браузера).