Программное определение статуса Skype через сервисы skype.com

Система интернет-телефонии Skype предоставляет возможность своим пользователям показать их статус посредством изображения, находящегося по стандартному адресу http://mystatus.skype.com/дизайн_картинки/имя_в_скайп. Если вам необходимо использовать информацию о статусе на своем сайте, но предлагаемые изображения (см. здесь) вас не устраивают, можно написать скрипт на PHP, который получит эту информацию программно.

Посмотрим, что отдает сервер при запросе изображения и разном статусе для самого маленького из предлагаемых изображений (smallicon). При статусе онлайн запрос адреса http://mystatus.skype.com/smallicon/direqtor дает следующие заголовки:

HTTP/1.1 200 OK
Date: Mon, 14 Sep 2009 06:05:21 GMT
Server: Apache
Expires: Mon, 14 Sep 2009 06:11:21 GMT
Last-Modified: Thu, 01 May 2008 00:00:00 GMT
Content-Length: 428
Connection: close
Content-Type: image/png

При запросе этого адреса с другим статусом пользователя, отдаваемые заголовки не изменяются, за исключением поля Content-Length. Изображения немного отличаются размером. Тестирование позволило собрать следующую информацию:

Статус «Онлайн» Content-Length: 428
Статус «Оффлайн» Content-Length: 376
Статус «Позвони мне» Content-Length: 502
Статус «Нет на месте» Content-Length: 546
Статус «Недоступен» Content-Length: 490
Статус «Не беспокоить» Content-Length: 500

В случае неправильного имени пользователя возвращается ошибка 404.

Воспользуемся этой информацией, чтобы написать функцию, определяющую статус пользователя Skype.

function skype_get_status($skype) {
// Задаем статус на случай отсутствия соединения со skype.com.
  $status = "Сервис недоступен";
  $size = 0;
// Соединяемся с сервисом картинок статусов.
  if($fp = @fsockopen ("mystatus.skype.com", 80, &$errno, &$errstr, 30)) {
// Отсылаем HEAD-запрос.
    fputs($fp, "HEAD /smallicon/$skype HTTP/1.0\n\n");
    $out = '';
    while(!feof($fp)) {
      $out .= $line = fgets($fp, 1024);
// Если сервер отдает загодовок размера файла, то парсим его.
      if(eregi('^Content-Length: ([0-9][0-9][0-9])', $line, $regs)) {
        switch($regs[1]) {
          case 428: $status = "Онлайн"; break;
          case 376: $status = "Оффлайн"; break;
          case 502: $status = "Позвони мне!"; break;
          case 546: $status = "Отсутствую"; break;
          case 490: $status = "Недоступен"; break;
          case 500: $status = "Не беспокоить!"; break;
          default: $status = "Статус неизвестен";
        }
      }
    }
  fclose($fp);
// Если размер файла не получен, например, ошибка 404, то такого пользователя нет.
  if($status == "Сервис недоступен") $status = "Пользователь неизвестен";
  }
  return $status;
}

Указанный алгоритм реализован в сервисе проверки статуса Skype на моём сайте.

спасбо за этот способ

спасбо за этот способ определения, поставлю и у себя на сайте

На каком хотя бы скажите?

На каком хотя бы скажите?

huerga.by (хуерга точка бай)

huerga.by (хуерга точка бай) где же еще

Сколько пробую, правильный

Сколько пробую, правильный статус пользователя еще ни разу не высветился.

Да я вот подумываю, а не

Да я вот подумываю, а не стоит ли в запрос картинки ввести случайный параметр. Кажется код требует именно этого дополнения. Кэширование никто не отменял. Даже для программ PHP

А что мешает вместо того,

А что мешает вместо того, чтобы проделывать такой долгий путь просто попросить у скайпа текст (http://mystatus.skype.com/direqtor.txt) или XML (http://mystatus.skype.com/direqtor.xml)?

К слову, для того, чтобы статус пользователя был отличным от "offline" необходимо включить в вашем клиенте SkypeWeb. Для этого в меню скайпа: "Инструменты" > "Настройки" > "Безопасность" и там чекбокс "Показывать мой сетевой статус в интернете".

Есть еще один несложный вариант: зайти на скайп и получить html-код для своего индикатора. Это можно сделать здесь: http://www.skype.com/intl/en/share/buttons/wizard.html

А как указать

А как указать http://mystatus.skype.com/direqtor.txt ник нейм?

Спасибо за инфу

Не знал про такие возможности от скайпа. Обязательно дополню эту заметку, а может и новую напишу. XML и TXT - это то, что доктор прописал. :)

А визард картинок со статусом

А визард картинок со статусом у скайпа не очень удачный код отдаёт. Мой лучше :) http://shaman.asiadata.ru/service/skype-status-code

Ой ли... :)

А как на счет проверки наличия на компьютере посетителя клиента Skype?
В указанном мной визарде см. js-файл - функционал внутри.

Кто его знает

Что-то когда я смотрел этот файл, решил не включать его в свой код. Но я еще раз просмотрю его функционал, может там появилось что-то ценное.