quarta-feira, 15 de junho de 2011

Buscar palavras do dicionário para registrar domínio



No início do mês de junho foram finalmente oferecidos registros para o domínio colombiano .CO. Em pouco tempo já haviam um milhão de pedidos de registro! Empresas de destaque na Internet, como Amazon e Twitter foram atraídas pela novidade, e com isso impulsionaram uma corrida desenfreada junto às empresas de registro.



Pensando nas possibilidades de negócio de se garantir um nome de Internet rentável com o sufixo .co, decidi cruzar os dados de um dicionário e fui buscar ajuda ao amigo Shell... Irei mostrar nas linhas a seguir o que consegui com essa brincadeira!



Para iniciar, instalei um dicionário de correção ortográfica do OpenOffice.org, o myspell. No Debian, basta executar o comando a seguir como super usuário:


apt-get install myspell-pt-br


Entre diversos arquivos, o que me interessou foi o pt_BR.dic. Com cerca de 4,5 MB, ele possui mais de 300 mil verbetes da língua portuguesa! Para não correr o risco de danificá-lo, copiei para minha área (i.e., home):


cp /usr/share/hunspell/pt_BR.dic ~


O arquivo é originariamente codificado com ISO-8859-1. Pra me livrar dessa orelhada, o converti para o formato Unicode (i.e., UTF-8) usando o iconv:


iconv -f iso-8859-1 -t utf-8 pt_BR.dic > pt_BR-utf8.dic


Eis um trecho do arquivo pt_BR-utf8.dic:

abacalhoar/akYMjL
abacamartado/D
aba?anar/akYMjL
abacanto/D
abacatada/B
abacataia/B
abacatal/BR
abacate/BP
abacate-do-mato
abacateiral/BR


Não sei precisar que tipo de informação é carregada após o sinal de barra em cada linha do arquivo, mas com certeza não me interessa nesse momento. Vamos removê-la e filtrar apenas as palavras que terminam em "co" com a ajuda de um conhecido amigo, o SED!


sed -e 's/\/.\+$//' -e '/co$/!d' pt_BR-utf8.dic > palavras-co.txt


E eis o arquivo resultante palavras-co.txt, bem mais comportado:

abrodílico
abrotanínico
abrotonínico
absalônico
abscísico
abscíssico
absenteístico
absentístico
absintático
absintêmico


É certo que existem palavras muito esdrúxulas da amada língua portuguesa que jamais seriam usadas num nome da Internet. Usando um outro carinha legal, o AWK, além do comando sort, criei um outro arquivo contendo a quantidade de letras e a palavra, ordenando pela primeira coluna. Eis a mágica:


awk '{print length($0)"\t"$0}' palavras-co.txt | sort -n > palavras-co2.txt


E olha só como ficou o arquivo palavras-co2.txt:

5 dorco
5 écico
5 édico
5 efuco
5 élico
5 êmico
5 emoco
5 ênico
5 épico
5 Érico


Agora resta a parte mais divertida do trabalho: varrer a lista de palavras do dicionário e analisar se cada uma delas já não foi registrada nesse novo domínio ".co". O resultado será um outro arquivo de texto, semelhante ao anterior, mas com a adição de uma terceira coluna, que dirá a disponibilidade do domínio "palavra.co".



Para essa tarefa, usei comandos como while, read, echo e cut do Shell e carinhas legais como o sed (de novo!) e curl. Como consegui a URL de teste? Tive que fuçar nos fontes da página do cointernet.co...



Bom, eis o código resultante em Shell. Ficaria mais bonito eu ter colocado num arquivo Shell Script, mas fiquei com preguiça...


> palavras-co3.txt
while read linha
do
letras=`echo $linha | cut -f1 -d' '`
palavra=`echo $linha | cut -f2 -d' '`
token=`echo $palavra | sed 's/co$/.co/'`
disp=`curl -s "http://www.opportunity.co/register/whois-lookup.php?oppurl=$token"`
echo "$palavra"
echo -e "$linha\t$disp" >> palavras-co3.txt
done < palavras-co2.txt


Olha só que legal o resultado disso: o arquivo de texto resultante (um outro!) trará TRUE caso a palavra esteja disponível para o registro ou FALSE se alguém já tiver tido essa ideia!

Eis um trecho do arquivo palavras-co3.txt:

5 dorco FALSE
5 écico TRUE
5 édico TRUE
5 efuco FALSE
5 élico TRUE
5 êmico TRUE
5 emoco FALSE
5 ênico TRUE
5 épico TRUE
5 Érico TRUE


Legal, funcionou, mas e agora?!

Chuá...! [balde-de-água-na-cabeça]

Ao rodar o script e gerar o arquivo, disparei um tail -f e cheguei à conclusão de que alguém já fez esse trabalho e tratou de registrar tudo quanto é palavra do dicionário de português... (Malditos!)

Aliás, só apareceram como disponíveis as palavras acentuadas, que provavelmente não poderão ser registradas caso haja a versão normalizada delas (ex: "mímico" vs "mimico").

Ou seja, se você tinha esperanças de conseguir algo como bote.co, magi.co, sova.co ou peni.co, perca-as... Ou senão entre em contato com o feladamãe que registrou antes de você e negocie o nome de domínio...

Bom, pelo menos serviu para brincar um pouco com o Shell. :D

Desafio: tente normalizar as palavras do arquivo palavras-co.txt (i.e., deixando tudo em minúsculo e retirando os acentos e caracteres especiais) antes de fazer as consultas WHOIS com o script.