Blog. Just Blog

Как узнать статус ICQ на PHP

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Как узнать статус ICQ на PHP
Как узнать статус ICQ на PHP

Для получения статуса ICQ на сайтах обычно используется штатная возможность сервиса, а именно ссылка вида:

http://status.icq.com/online.gif?icq=XXXXXXXXX&img=N

Где XXXXXXXXX - номер проверяемой аськи, а N - стиль отображаемой иконки (число от 0 до 27). В ответ приходит картинка статуса с соответствующим стилем. Такой код обычно ставят на сайты, в подпись на форуме и тому подобное. Картинка отображается, все нормально. А как получить статус ICQ в автоматическом режиме? Например, на сервере по планировщику запускается скрипт, который должен отправить некие данные человеку в аську, но только в том случае, если он находится он-лайн. Или надо автоматически контролировать время работы техподдержки, отмечая когда они вышли в онлайн и когда ушли в оффлайн. Или ни одна из предлагаемых стандартных иконок с сервера ICQ не подходит под дизайн вашего сайта, а отображать статус оператора все равно надо. Или для незарегистрированных посетителей ресурса надо скрыть реальные номера ICQ пользователей (их легко узнать из ссылки на картинку статуса), но при этом хочется показать их статус. Это лишь несколько примеров, при желании варианты применения можно придумать еще.

Давайте посмотрим, как браузер обрабатывает запрос и какие данные возвращаются с сервера. Для этого воспользуемся браузером Firefox и расширением LiveHTTPheaders.

Переадресация на картинку статуса
Переадресация на картинку статуса

Как мы видим, при запросе статуса сервер переадресует нас на нужную картинку - online1.gif (в сети) или online2.gif (не в сети). Когда-то давно, когда такой переадресации не было, а сервер по ссылке сразу отдавал картинку, я встречал достаточно неуклюжее, но рабочее решение. Картинка статуса сперва скачивалась на локальный сервер, затем размер полученного файла сравнивался с размером "эталонных" картинок online и offline, и на основании этих данных возвращался результат. Естественно, даже при незначительной смене стиля на сервере ICQ, такое решение становилось неработоспособным. Это не говоря уже о необходимости скачивать картинку на локальный сервер. Но этот кошмар остался в прошлом, сейчас нам ничего не надо скачивать, достаточно проанализировать заголовок ответа сервера и узнать, на какую иконку он хочет нас перенаправить.

Для получения заголовков сервера удобнее всего использовать функции библиотеки cURL. У меня скрипт получения статуса ICQ получился таким:
  1. // Номер ICQ для проверки
  2. $icq_number='XXXXXXXXXX';
  3.  
  4. $ch curl_init();
  5. curl_setopt($chCURLOPT_URL,
  6.         'http://status.icq.com/online.gif?icq='.$icq_number.'&img=5');
  7. curl_setopt($chCURLOPT_HEADER1);
  8. curl_setopt($chCURLOPT_RETURNTRANSFER1);
  9. $tmp=curl_exec($ch);
  10. curl_close($ch);
  11.  
  12. preg_match('/online([0-9])\.gif/',$tmp,$result);
  13.  
  14. // Обрабатываем полученный статус
  15. if ($result[1]==2) {
  16.     // ICQ online
  17.     echo $icq_number.' offline';
  18. }
  19. elseif ($result[1]==1) {
  20.     // ICQ offline
  21.     echo $icq_number.' online';
  22. }
  23. else {
  24.     // Произошла ошибка при получении данных
  25.     echo 'error';
  26. }
В переменную $icq_number подставляете номер проверяемой аськи и на выходе получаете статус 1 - online, 2 - offline или ошибку. Необходимо учитывать, что статусы типа "отошел", "занят", "не беспокоить" и всякое подобное отображаются как online. Также невозможно получить статус, если в используемом ICQ-клиенте отключена настройка "Показывать мой статус в сети". В остальном все работает правильно.

Поделиться ссылкой ВКонтакте
Просмотров: 6045 | Комментариев: 3

Метки: PHP, ICQ
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Игорь (26.10.2013 в 06:10):
полезная инфа по сабжу, как получить статусы скайпа и других протоколов: http://habrahabr.ru/post/150389/
ManHunter (25.10.2013 в 13:09):
Знаний много не бывает.
Maksovich (25.10.2013 в 13:04):
Полезная вещь. Только сейчас по моему не так актуально как раньше, например 5 лет назад. Сейчас по моему большинство Скайпом пользуются. Но все равно спасибо. ;)

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0035 сек.) / Память: 4.5 Mb
Наверх