Mar 03, 2007
Como baixar o seu currículo lattes em XML (nerd edition)
Se você tem seu currículo na plataforma lattes do Cnpq vai ficar contente em saber que agora é possível baixar a versão XML do seu currículo usando a versão on-line da plataforma. A versão off-line foi descontinuada recentemente e a versão para linux ficou muito tempo sem atualizações e correções de bugs (eu enviei vários relatórios de bugs mas nunca recebi uma resposta). A versão em XML do currículo pode ser baixada clicando no icone apropriado na barra de ícones da plataforma lattes:
A vantagem de ter o currículo em XML é que ele pode ser usado como entrada para outro programa, ou você pode criar seus proprios filtros e estilos e fazer uma versão personalizada do currículo para impressão.
Naturalmente é um saco ter que usar o navegador e clicar diversas vezes para fazer uma coisa tão simples como baixar um arquivo XML. Nesse post eu vou mostrar como baixar seu currículo em XML usando o fantástico curl.
Curl pode ser definido como um navegador internet de linha de comando. Não confunda com navegadores de texto, como Lynx, o curl está para o Lynx assim como o sed está para o vi. Além da ferramenta de linha de comando, existe o libcurl, uma biblioteca com bindings para diversas linguagens como Lisp, Python, PHP, Ruby, C, etc. Nesse post vamos usar a ferramenta de linha de comando e criar um scrip simples em bash. Uma descrição detalhada do curl não cabe nesse post, mas um lugar bom para começar é o tutorial Using cURL to automate HTTP jobs no próprio site do curl. Com o curl é possivel criar scrips para fazer coisas como se logar na amazon e baixar sua lista de desejos, enviar (postar) figuras para wikis, etc.
Para poder baixar o currículo em XML é necessário se logar na plataforma lattes e preencher um formulário com cpf e senha. O código abaixo cuida dessa tarefa:
function site_login {
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" \
-d "sub=Confirma&opcao=lattes&cpf=${cpf}&senha=${senha}" \
-k -e ";auto" \
-b "imp=cnpqrestritos ; path=/; domain=.cnpq.br" \
-c $tmpdir/cookie.txt\
-o $tmpdir/login.html \
"https://wwws.cnpq.br/sigef_imp/owa/pservicos.entrada"
}
Algumas páginas não funcionam direito em certos navegadores, ou funcionam diferentemente para programas que baixam páginas, como o spider do google. A flag -A diz para o servidor que quem está acessando a página é o Mozilla. A opção -d tem as opções para o formulário de login , com duas variáveis para cpf e senha, respectivamente. A opção -k aceita os certificados de segurança do site. A página de login tem uma complicação, ela gera cookies via javascript. O curl tem como lidar com cookies automaticamente com a opção -c, mas nesse caso tivemos que criar o cookie na mão com -b. A página de login será armazenada no arquivo login.html (flag -o). Finalmente, o último argumento indica a página de login.
O código para baixar o XML pode ser visto abaixo. As opções -c e -b lidam com os cookies e a opção -e envia a informação de "página de referência" (Referer Page) para o servidor, já que essa página torna isso obrigatório. Ou seja, se você copiar a (última) url diretamente no seu navegador não vai funcionar porque teria que ter acessado a url logo depois de -e primeiro. Felizmente o curl cuida disso automaticamente. Finalmente, observe que as páginas usam uma variável id.
function baixa_pagina {
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" \
-e "http://plsql1.cnpq.br/curriculo/pkg_menu.menu?f_cod=${id}" \
-c $tmpdir/cookie.txt -b $tmpdir/cookie.txt \
-o lattes.zip \
"http://plsql1.cnpq.br/curriculo/pkg_xml.recupera_xml_cv?f_cod=${id}"
}
Para obter o id você precisará se logar na página do cnpq usando um navegador comum. Quando você se loga, a url mostrada é http://plsql1.cnpq.br/curriculo/gn_seg.inicio. Essa página usa frames, então se você clicar com o botão direito no meio da página e escolher "this frame", e "show only this frame" vai ver que a url muda para algo como http://plsql1.cnpq.br/curriculo/pkg_menu.menu?f_cod=K3912383Z3. O código K3912383Z3 é o seu id (é claro que esse não é o meu id ;-) Naturalmente existem diversas maneiras de achar o seu id, essa é uma delas.
Eu sugiro colocar as informações de senha e cpf em um arquivo separado (como ~/.lattesrc) com permissão 600. O arquivo deve ter o seguinte formato (sem espaço antes e depois do =):
id=K3912383Z3 senha=foobar cpf=75687344611Então é só criar uma função para ler essas informações (pase_init). O script completo pode ser visto abaixo:
#!/bin/sh
initfile=~/.lattesrc
tmpdir=/tmp
function parse_init {
if [ -f $initfile ]
then
source $initfile
else
echo "Arquivo ~/.genos não existe, por favor crie um arquivo com os dados:"
echo "usuario="
echo "senha="
exit
fi
}
function site_login {
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" \
-d "sub=Confirma&opcao=lattes&cpf=${cpf}&senha=${senha}" \
-k -e ";auto" \
-b "imp=cnpqrestritos ; path=/; domain=.cnpq.br" \
-c $tmpdir/cookie.txt\
-o $tmpdir/login.html \
"https://wwws.cnpq.br/sigef_imp/owa/pservicos.entrada"
}
function baixa_pagina {
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" \
-e "http://plsql1.cnpq.br/curriculo/pkg_menu.menu?f_cod=${id}" \
-c $tmpdir/cookie.txt -b $tmpdir/cookie.txt \
-o lattes.zip \
"http://plsql1.cnpq.br/curriculo/pkg_xml.recupera_xml_cv?f_cod=${id}"
}
parse_init && site_login && baixa_pagina
Uma vantagem dessa abordagem é a separação das informações sensíveis (senhas, etc) e o script em si. Eu não achei um jeito simples de fazer o script achar o id automaticamente. Isso é desejável já que o script não está plug and play, ou seja, se você executá-lo agora ele não vai rodar porque não tem o seu id. Você terá que descobrir o id primeiro. Não é impossível fazer com que o script faça isso automaticamente, mas fica para depois. De qualquer forma, tendo visto qual o seu id você pode baixar seu currículo lattes em XML diversas vezes. Agora só falta eles implementarem a possibilidade do sistema on-line poder importar o currículo no formato XML.
Posted at 12:10