6 de abr de 2009

Cross-server data access ou proxy-php ou gambi mesmo!

Tá legal, sei que to há algum tempo sem postar nada aqui. Meu parceiro de blog me abandonou e to até o pescoço com trabalhos por finalizar. Se alguma alma caridosa tiver interesse em postar alguma coisa só avisar, o blog está aceitando novos blogers!

Bom, estou aqui hoje porque semana passada me deparei com um problema interessante: tinha que por o widget do Clima Tempo no topo em Flash de um site que estou desenvolvendo.

Normalmente, é só pegar o código gerado automaticamente no site do clima tempo e por no site, mas... as coisas não eram tão simples assim, vejamos:

O topo do site é em flash e o clima tempo tinha que ficar lá, numa faixa de menos de 50px de altura! Olha o bixo aí:

topo site pmu

O widget do clima tempo é beem maior que o espaço que eu tinha disponível. Esse problema eu resolvi fazendo o meu próprio widget do Clima Tempo, devidamente adaptado pro espaço que eu tinha disponível. Depois de pronto, ele funciobava incrivelmente bem na minha máquina.

Ao por o dito-cujo no ar descobri que ele simplesmente se recusava a se comunicar com o site do clima tempo. Descobri que o Flash tem umas características de segurança que o impedem de fazer tal coisa.

Busquei no tio Google uma suposta solução que habilitariam o flash a fazer o seu trabalho:

System.security.loadPolicyFile("http://selos.climatempo.com.br/crossdomain.xml");
System.security.allowDomain("*");
System.security.allowInsecureDomain("*");
System.security.allowDomain("http://selos.climatempo.com.br/");
System.security.allowInsecureDomain("http://selos.climatempo.com.br/");

Porém a tal medida não surtiu efeito, o flash se negava a conversar com o ClimaTempo a partir do servidor.

Foi então que resolvi apelar pra ignorância, usei um proxy-php, funçãozinha simples que faz o trabalho pro preguiçoso do Flash:

$dataURL = "http://www.seusite/arquivo.xml";
//este esquema não segue redirecionamentos. O xml pode dar lugar pra um php também
readfile($dataURL);

O que o código php aí em cima faz é ler a urll informada como se fosse um arquivo, isso graças ao comando readfile, a partir daí é só usar este arquivo como fonte xml do teu flash como se fosse um xml qualquer.

Desculpem, mas o código que envolve a criação do widget ClimaTempo não me pertence e não tenho permissão de divulga-lo aqui, então por enquanto não poderei dizer como eu fiz meu widget ClimaTempo personalizado.