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:
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";}
?>
/*
* 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";
}
}
?>
Marcadores: PHP
