Projecto Flex - Corrector ortográfico / Spell checker

   

Estou neste momento a desenvolver um projecto em Flex que consiste na criação de um corrector ortográfico sem recurso a qualquer ficheiro de dicionário (wordlist), mas sim tentando dissecar  o Google Web Toolkit e perceber realmente como funciona o seu sistema que está incorporado na toolbar para o firefox.

 

Inicialmente pensei que seria fácil, visto que pensar que existiria uma API para flash/Flex do Spell Checker do Google, mas enganei-me, e bem!

Andei a vasculhar pelas api’s do Google e seu código (maioritariamente java e/ou js e algum php) e o mais difícil foi encontrar o Script ou ligação que permitia a verificação de texto/palavra nos dicionários do Google, foi então que descobri uma coisa engraçada, o endereço https://www.google.com/tbproxy/ misturado no meio do código, claro que directamente este endereço não está disponível (nem esperava), depois de mais uns minutos encontrei o parâmetro "spell?lang=en" que ao adicionar ao endereço em cima já me "respondia". Tinha descoberto a pólvora!

 

Depois disto seria fácil, pensei eu…mas piorou, já que o endereço não aceitava parâmetros via URL (GET/POST)… Então, se o servidor me retornava XML, talvez se enviasse XML como POST poderia obter resposta.. fui vasculhar de novo no GWT (Google Web Toolkit) e lá encontrei as devidas instruções XML que seriam enviadas..

 

Voltei ao Flex e lá fiz o <mx:HTTPService> para ligar a esse endereço, e não é que funcionou…

Os verdadeiro problemas começaram quando coloquei a minha aplicação online, uma verdadeiro quebra cabeças:

Erro:

[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"]

Mas que raio era isto? tentei com o URLRequest,/URLVariables e outro erro, SandBox security error, depois de muito pesquisar percebi que o problema ainda era pior do que simples erros de código ou POST para o servidor.

O grande problema é que na realidade o Flash não deixa aceder a um endereço externo directamente, por exemplo o feed api ou o adwords. Parece que é mesmo o problema do sandbox / browser. Este problema seria facilmente contornável se o Google disponibilizasse  junto do seu servidor um crossdomain.xml que permitisse o acesso directo, mas parece que o Google insiste em tornar a vida difícil aos programadores Flex/action script.

Bom, estava num beco sem saída.. o que fazer??

Comecei a pensar como ultrapassar este problema, varias sugestões apontavam para o uso deste crossdomain.xml, o que acabou por estar fora de contexto, logo que outras opções tinha? talvez usar uma proxy no HTTPService do Flex, como indica em: Adobe Flex - Setting Proxy , mas coloquei essa hipótese fora de questão para já.

 

Arranquei para a possibilidade de fazer um Script php que fizesse a comunicação entre o Google e o Flex, já que era possível assim em alguns exemplos de outras api’s do Google.

 

Depois de alguns minutos dei com outro problema, ao usar o fsockopen(url:porta); reparei que o Google simplesmente não me respondia, mas porque?

Recapitulando:

abre o socket (consegui abrir), enviava os dados:

$dados="<post em XML>";

   $envia = "POST /tbproxy/spell?lang HTTP/1.1\r\n";
   $envia .= "Host: www.google.com \r\n";
   $envia .= "Content-Length: " . strlen($data) . "\r\n";
   $envia .= "Content-type: application/x-www-form-urlencoded\r\n";
   $envia .= "Connection: Close\r\n\r\n";

Simplesmente não me retornava nada.

 

Mais uma hora de volta disto e percebi que o problema estava    $envia = "POST /tbproxy/spell?lang HTTP/1.1\r\n"; deveria enviar HTTP/1.0 em vez de 1.1. A partir daí foi brincadeira de criança :)

Trabalho final, chamar o meu script php do Flex, enviar o pedido para correcção e receber os dados no Flex, a partir dai, encontrar as palavras com erros no texto e apresentar as devidas correcções.

 

Isto tudo parece muito simples, mas passei um dia de volta do sistema de comunicação com o Google.

Brevemente coloco aqui o resultado final :)

versão pdf temporariamente indisponivel.
Deixe um comentário ou um Trackback

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*