Как узнать статус 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 получился таким:
Code (PHP) : Убрать нумерацию
- // Номер ICQ для проверки
- $icq_number='XXXXXXXXXX';
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL,
- 'http://status.icq.com/online.gif?icq='.$icq_number.'&img=5');
- curl_setopt($ch, CURLOPT_HEADER, 1);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $tmp=curl_exec($ch);
- curl_close($ch);
- preg_match('/online([0-9])\.gif/',$tmp,$result);
- // Обрабатываем полученный статус
- if ($result[1]==2) {
- // ICQ online
- echo $icq_number.' offline';
- }
- elseif ($result[1]==1) {
- // ICQ offline
- echo $icq_number.' online';
- }
- else {
- // Произошла ошибка при получении данных
- echo 'error';
- }
Просмотров: 6045 | Комментариев: 3
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Игорь
(26.10.2013 в 06:10):
полезная инфа по сабжу, как получить статусы скайпа и других протоколов: http://habrahabr.ru/post/150389/
ManHunter
(25.10.2013 в 13:09):
Знаний много не бывает.
Maksovich
(25.10.2013 в 13:04):
Полезная вещь. Только сейчас по моему не так актуально как раньше, например 5 лет назад. Сейчас по моему большинство Скайпом пользуются. Но все равно спасибо. ;)
Добавить комментарий
Заполните форму для добавления комментария