Como disse no primeiro post desta série, encontrei esta página com os resultados eleitorais de 2009. Nessa página, descobri que os resultados são carregados via AJAX, e que o resultado do pedido (via, se não me engano, url rewrite, que não sei até que ponto coise…) é uma string JSON. Melhor que isto, nem na farmácia.

Daí a descobrir quais os números que variam de distrito para distrito (de 010000 a 180000 nos continentais, 300000 para a Madeira, 400000 para os Açores) foi um saltinho, e depois era questão de se fazer umas chamadas (eu usei cURL, mas há mais maneiras do gato ir às filhoses), uns ciclos, aproveitar os campos que queríamos, et voilá, resultados prontos a serem inseridos numa base de dados.

Como bónus adicional, estes dados trazem também os resultados de 2005, o que é ainda mais porreiro, pá.

$distritos = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "40", "30");

// isto é apenas um id de controle, para guardar as quantidades
// de brancos e nulos
$brancosNulosId = 20;
$partidoId = 0;

// para guardar os acrónimos dos partidos
// o primeiro elemento já está preenchido,
// para os ids baterem certo
$partidos = array('empty');

$site = "http://www.legislativas2009.mj.pt/legislativas2009/static-data/territory-results/TERRITORY-RESULTS-LOCAL-";

foreach($distritos as $distrito)
{
    $ch = curl_init($site . $distrito . "0000-AR.json");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array (
            "Content-Type: text/xml; charset=utf-8"
        ));
    $ret = json_decode(curl_exec($ch), true);

    // na base de dados, tinha os Açores e Madeira com ids diferentes
    $distrito_id = ($distrito != "30") ? ($distrito != "40") ? intval($distrito) : 19 : 20;

    // existiam estes dois objectos com as mesmas propriedades, é só iterar
    foreach(array('currentResults', 'previousResults') as $resultados)
    {
        $res = $ret[$resultados];

        // eleicao_id é da estrutura da BD
        if($resultados == 'currentResults')
            $eleicao_id = 1;
        else
            $eleicao_id = 2;

        // estou a mostrar as queries (depois foi só copiar e inserir),
        // mas podia ter inserido directamente numa BD
        echo "INSERT INTO eleitores (distrito_id, eleicao_id, qtd)
            VALUES(" . $distrito_id . ", " . $eleicao_id . ", " . $res['subscribedVoters'] . ");";

        echo "INSERT INTO votacoes (eleicao_id, distrito_id, partido_id, qtd)
            VALUES(" . $eleicao_id . ", " . $distrito_id . ", " . $brancosNulosId . ", " . ($res['blankVotes'] + $res['nullVotes']) . ");";

        foreach($res['resultsParty'] as $party)
        {
            $party['acronym'] = str_replace(".", "", $party['acronym']);
            if(!in_array($party['acronym'], $partidos))
            {
                $partidos[] = $party['acronym'];

                // a orientação é um número que indica a posição "esquerda-direita" do partido
                echo "INSERT INTO partidos (partido_id, nome, \"real\", cor, orientacao)
                    VALUES(" . ++$partidoId . ", '" . $party['acronym'] . "', 1, '', 0);";
            }

            echo "INSERT INTO votacoes (eleicao_id, distrito_id, partido_id, qtd)
                VALUES(" . $eleicao_id . ", " . $distrito_id, ", " . array_search($party['acronym'], $partidos) . ", " . $party['votes'] . ");";
        }
    }
}

Uma última nota em relação às posições dos partidos: eu defini mais ou menos por senso comum, e ainda por cima, esse binómio é tudo menos pacífico hoje em dia. Fazemos assim: eu deixo aqui o que tenho, e se alguém tiver uma solução melhor, by all means, é só deixar um comentário.

POUS > PCTP/MRPP > PCP-PEV > BE > PTP > PS > MEP > PDA > MMS > PPM > PPD/PSD > CDS-PP > PND > PPV > PNR > MPT-PH > PH > MPT

  • Na primeira parte, fiz uma introdução tema;
  • Na segunda parte, falei dos métodos de distribuição dos deputados, por distrito;
  • Na quarta parte, faço algumas considerações sobre a aplicação que desenvolvi para isto e respectivo código-fonte (C++, Qt);
  • Na quinta parte, alguns gráficos comparativos das várias situações possíveis;
  • Na quinta parte e meia, mais gráficos comparativos das várias situações possíveis com os dados relativos às legislativas de 2011.
Partilhar no Sapo Links Partilhar no del.icio.us Partilhar no Digg Partilhar no Twitter Partilhar no StumbleUpon Partilhar no MySpace Partilhar no Facebook

Comentários Deixar um comentário

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog