Программное определение статуса 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 на моём сайте.

Теги

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

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
CAPTCHA
А не робот ли вы случайно?
16 + 1 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.