10 de Outubro de 2008

Pegar o Status do Skype em PHP

Durante esses dias surgiu a necessidade de fazer um script para descobrir o "status" do Skype do pessoal aqui da Empresa.

A idéia era colocar uma mensagem "OPERADOR DISPONÍVEL" no site de um de nossos produtos, quando pelo menos uma pessoa da nossa equipe estivesse com o Skype ligado (menos offline e 'não disponível').

Recorremos ao site do Skype, que entrega a solução que deu base para construir essa ferramenta.

O Skype disponibiliza umas imagens com o Status atual de uma pessoa.

Exemplo de http://mystatus.skype.com/smallclassic/milenial.multimedia:

skype

O botão do Skype é bonitinho, mas não é suficiente para o que nós queriamos. Pois, era preciso colocar o telefone do Skype (SkypeOut) para aparecer somente quando tivesse alguém disponível. Logo, precisaríamos saber exatamente qual o Status do Skype.

Depois do script pronto, descobri que no site do Skype tem uma solução para este mesmo problema em Javascript. Mas, o código deles, que por ser em javascript não é muito confiável, tem cerca de 72 linhas.

No codigo produzido por mim, a solução é criativa e resolvida com apenas 1 linha de código.

A minha abordagem tem tres problemas:

  • Se o site do Skype sair do ar, o script para de funcionar.
  • Se o pessoal do Skype mudar a imagem (desenhar algo novo) o script para de funcionar. Mas, isso é facilmente resolvido testando os novos códigos de imagem.
  • Do jeito que está, funciona para servidores nos EUA (pois é lá que está hospedada minha aplicacao). Pois, um americano veria escrito na imagem "I'm Online" em vez "Estou Online". Logo, o tamanho da imagem mudaria.
    • 1197 é o tamanho em Bytes da imagem "I'm Online". Faça uma adaptação para os códigos correspondentes para o local onde você hospedar seu PHP.

A logica do sisteminha é:

  • A imagem representa o Status atual do Skype.
  • Cada imagem tem um tamanho diferente, pois os textos e cores aplicados nela são diferentes.
  • O "tamanho" da imagem (strlen do output binário) como parâmetro para informar o Status.

A classe está aí em baixo. Para usar o código é simples:


<?php
$Skype = new Skype();
$milenial = $Skype->getStatus('milenial.multimedia');

// Se nao estiver offline e indisponivel
if ($milenial != 755 && $milenial != 1457) {

echo "Meu status no Skype é: ".$Skype->getStatusName($milenial).". Ligue para 3137-xxxx";
}
?>

 

<?php
/*
* Copyrights Milenial Multimedia LTDA

*
* @author Ramiro Cavalcanti (ramiro@milenial.com.br)
*
*/

class Skype {    
    
/**
    * Pega o status (em codigo) do Skype
    *
    * @param     string        $skype_name (Nome do usuario do Skype) 
    * @return    int        $n_status
    *
    */
    
public function getStatus($skype_name) {
        
$n_status strlen(file_get_contents("http://mystatus.skype.com/smallclassic/".$skype_name));
        return 
$n_status;
    }
    
    
/**
    * Retorna o nome do status.
    *
    * @param    int        $n_status (O status conseguindo na getStatus())
    * @return    string        O tipo de Status em modo texto;
    *
    */    
    
public function getStatusName($n_status=0) {
        
$status[755] = "Offline";
        
$status[1511] = "Ocupado";
        
$status[1457] = "Indisponivel";
        
$status[1429] = "Ausente";
        
$status[1585] = "SkypeMe";
        
$status[1197] = "Online";
        

        if (
$n_status) {    
            
//echo strlen($teste);    
            
if (array_key_exists($n_status,$status)) {
                return 
$status[$n_status];
            }
            return 
"Status '$n_status' desconhecido";            
        }
        return 
"Consulta Indisponivel";
    }
}

?>
0 Comentários | Publicado por Administrador

Marcadores: PHP

Marcadores