Mais “buscas” que cairam aqui. July 6, 2008
Posted by Girino Vey in : howtos, nerdices , trackbackSacumé, eu tinha resolvido reviver o blog a partir das buscas interessantes que caiam nele. Pra isso eu precisava listar todas as buscas e encontrar as interessantes. Achar as buscas foi fácil: meu provedor fornece o “awstats” para analisar o tráfego no site e ele separa isso pra mim. Mas pegar da interface dele tava ficando chato porque são muitas, eu queria organizar e analisar antes de escolher “as melhores”. Por isso resolvi tratar direto o arquivo de log do awstats.
Como tratar o arquivo de logs do awstats pra extrair as frases de busca
O primeiro passo foi escolher o arquivo. O awstats usa arquivos mensais. Escolhi, claro, o mais recente, afinal é só uma brincadeira. Encontrar lá dentro o que eu queria foi fácil:
$ grep -ni BEGIN_SEARCHWORDS awstats072008.girino.org.txt 380:BEGIN_SEARCHWORDS 343
Ou seja, na começa na linha 380 e se estende por mais 343 linhas. Então vamos extrair essas informações daí, certo? Fiz esse scriptzinho aqui pra isso:
$ file=awstats072008.girino.org.txt;
$ grep_result=`grep -ni BEGIN_SEARCHWORDS $file`;
$ begin_pos=`echo $grep_result | awk -F: '{print $1}'`;
$ size=`echo $grep_result | awk '{print $2}'`;
$ head -$((begin_pos+size+1)) $file | tail -$((size+2))
Podem ver que as 4 primeiras linhas “apenas” processam o tamanho do arquivo para encontrar o inicio e fim do trecho que eu quero extrair. E só a ultima linha faz o trabalho mesmo. Eu poderia ter feito “na mão” e colocado logo:
$ head -$((380+343+1)) awstats072008.girino.org.txt | tail -$((343+2))
Mas perdia toda a graça de se brincar com linha de comando
Mas ainda tem um detalhe: esses “dados” estão “codificados” para uso em url (urlencoded, para os íntimos), e precisamos decodificar. Eu até pensei em um script perl ou sed ou awk pra isso, mas pra que? Como dizia o João Cupim, meu professor de marcenaria no COLTEC, cada atividade tem sua ferramenta apropriada, não improvise ferramentas. Pois pra lidar com URLs, quem melhor que PHP? Então o que levaria uma dúzia de linhas e prometeria ficar incompleto em perl/sed/awk, vira isto daqui em PHP:
<?php
$line = fgets(STDIN); // reads one line from STDIN
while ($line) {
echo urldecode($line);
$line = fgets(STDIN); // reads one line from STDIN
}
?>
E ainda com a garantia do PHP de que vai funcionar e ter atualizações futuras, etc e tal!
Basta lascar isso aí num arquivo “urldecode.php” e chamar:
$ head -$((begin_pos+size+1)) $file | tail -$((size+2)) | php urldecode.php
Et voilá! Seu arquivo de log foi processado com sucesso ;).
No próximo post eu falo sobre as buscas que encontrei.
![[linkk]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/linkk.gif)
![[Linkto]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/img_vote_16x16.jpg)
![[Rec6]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/botao_rec6_16x16.gif)
![[InfoBlogs]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/i.gif)
![[Uêba]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/ueba1.png)
![[del.icio.us]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/delicious.png)
![[Facebook]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/facebook.png)
![[Google]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/google.png)
![[Reddit]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/reddit.png)
![[StumbleUpon]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/stumbleupon.png)
![[Technorati]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/technorati.png)
![[Email]](http://girino.org/wordpress/wp-content/plugins/bookmarkify/email.png)

Comments»
no comments yet - be the first?