scripts / analyse-votes-AN /
fe57e7c 5 years ago
2 contributor
97 lines | 3.853kb
#!/bin/bash

groupe=${1:-LREM}
nom=$2
groupe_ref=${3:-GDR}
archive_scrutins=$HOME/archive_scrutins

declare -A groupes cible_votes ref_votes
groupes[LREM]='Groupe La République en Marche'
groupes[LR]='Groupe Les Républicains'
groupes[MODEM]='Groupe du Mouvement Démocrate et apparentés'
groupes[PS]='Groupe Socialistes et apparentés'
groupes[UDI]='Groupe UDI, Agir et Indépendants'
groupes[NG]='Groupe Nouvelle Gauche'
groupes[FI]='Groupe La France insoumise'
groupes[GDR]='Groupe de la Gauche démocrate et républicaine'
groupes[LT]='Groupe Libertés et Territoires'
groupes[NI]='Non inscrits'

for g in ${!groupes[@]}; do
    if test "$nom" = $g; then
        groupe_ref=$nom
        unset nom
        break
    fi
done

if test -n "${groupes[$groupe]}" -a -n "${groupes[$groupe_ref]}"; then
    groupes[$groupe]='/<p class="nomgroupe">'${groupes[$groupe]}' <span class="block topmargin">/,/<div class="TTgroupe topmargin-lg">/'
    if test $groupe != $groupe_ref; then
        groupes[$groupe_ref]='/<p class="nomgroupe">'${groupes[$groupe_ref]}' <span class="block topmargin">/,/<div class="TTgroupe topmargin-lg">/'
    fi
else
    echo "groupe \"$groupe\" inconnu:"
    for g in ${!groupes[@]}; do
        echo "$g -> ${groupes[$g]}"
    done
    exit 1
fi

tempfile="/dev/shm/scrutin"

typevotes="Pour Contre Abstention Non-votants"

if test -n "$nom"; then
    cible="$nom ($groupe)"
    result="/dev/shm/comparaisons $nom ($groupe) avec $groupe_ref"
else
    cible=$groupe
    result="/dev/shm/comparaisons $groupe avec $groupe_ref"
fi

echo -n 'scrutin;date;titre;adoption;' > "$result"
for typevote in $typevotes; do
    for g in "$cible" $groupe_ref; do
        echo -n "$typevote - $g;" >> "$result"
    done
done
echo >> "$result"

last=$(wget -qO- 'http://www2.assemblee-nationale.fr/scrutins/liste/(legislature)/15/(type)/TOUS/(idDossier)/TOUS' | sed -rn 's,^.*<td class="denom">(.+)</td>.*$,\1,p' | head -1)
test -r "$archive_scrutins" && first=$(tar tf "$archive_scrutins" | tail -1) || first=0

if test $first -lt $last; then
    echo "récupération des scrutins n°$((first+1)) à n°$last dans "$archive_scrutins" (à conserver autant que possible)" >&2
    for scrutin in $(seq $((first+1)) $last); do
        wget -qO- "http://www2.assemblee-nationale.fr/scrutins/detail/(legislature)/15/(num)/$scrutin" \
            |  sed -r '0,/< *div class="titre-bandeau-bleu +to-print" *>/d; /< *script +type="text\/javascript" *>/,$d' > /dev/shm/$scrutin \
            && tar -C /dev/shm -rf "$archive_scrutins" $scrutin \
            && rm -f /dev/shm/$scrutin \
            && echo -n '.' >&2
    done
    echo
fi

for scrutin in $(seq $last); do
    tar -C /dev/shm -Oxf "$archive_scrutins" $scrutin > $tempfile

    title=$(sed -rn '/<h1 class="">Analyse du scrutin n° '$scrutin'/n; s,^.*<h3 class="president-title">(.+).</h3>,\1,p' $tempfile | sed "s/;//g; s/[ \t][ \t]+/ /g; s/^Scrutin public sur *//; s/^l[ae'] *//")
    date=$(sed -rn 's,^.*<h1 class="">Analyse du scrutin n° '$scrutin'<br/>(.+) </h1>,\1,p' $tempfile)
    adoption=$(sed -rn 's,^.*<p class="annonce"><span class="annoncevote">(.+).</span></p>.*$,\1,p' $tempfile)

    echo -n "$scrutin;$date;$title;$adoption;" >> "$result"

    unset cible_votes[*] ref_votes[*]
    for typevote in $typevotes; do
        cible_votes[$typevote]=$(sed -rn "${groupes[$groupe]}p" $tempfile | sed -rn '/<p class="typevote">'${typevote}':/,/<.div>/p' | sed 's,</li>,\n,g' | grep -ic "&nbsp;<b>${nom:+${nom}</br>}")
        echo -n "${cible_votes[$typevote]};" >> "$result"
        ref_votes[$typevote]=$(sed -rn  "${groupes[$groupe_ref]}p"  $tempfile | sed -rn '/<p class="typevote">'${typevote}':/,/<.div>/p' | sed 's,</li>,\n,g' | grep -c '&nbsp;<b>')
        echo -n "${ref_votes[$typevote]};" >> "$result"
    done
    echo >> "$result"
done

echo $result

rm $tempfile