ajout script d'analyse des v...
|
1 |
#!/bin/bash |
2 | ||
3 |
groupe=${1:-LREM} |
|
recherche sur le nom uniquem...
|
4 |
nom=$2 |
5 |
groupe_ref=${3:-GDR} |
|
utilsation d'une archive com...
|
6 |
archive_scrutins=$HOME/archive_scrutins |
ajout script d'analyse des v...
|
7 | |
modification de noms de vari...
|
8 |
declare -A groupes cible_votes ref_votes |
ajout script d'analyse des v...
|
9 |
groupes[LREM]='Groupe La République en Marche' |
10 |
groupes[LR]='Groupe Les Républicains' |
|
11 |
groupes[MODEM]='Groupe du Mouvement Démocrate et apparentés' |
|
12 |
groupes[PS]='Groupe Socialistes et apparentés' |
|
13 |
groupes[UDI]='Groupe UDI, Agir et Indépendants' |
|
ajout groupe Nouvelle Gauche
|
14 |
groupes[NG]='Groupe Nouvelle Gauche' |
ajout script d'analyse des v...
|
15 |
groupes[FI]='Groupe La France insoumise' |
16 |
groupes[GDR]='Groupe de la Gauche démocrate et républicaine' |
|
17 |
groupes[LT]='Groupe Libertés et Territoires' |
|
18 |
groupes[NI]='Non inscrits' |
|
19 | ||
plus de souplesse dans les p...
|
20 |
for g in ${!groupes[@]}; do |
protection nom
|
21 |
if test "$nom" = $g; then |
plus de souplesse dans les p...
|
22 |
groupe_ref=$nom |
23 |
unset nom |
|
24 |
break |
|
25 |
fi |
|
26 |
done |
|
27 | ||
fixe pb quand groupe cible e...
|
28 |
if test -n "${groupes[$groupe]}" -a -n "${groupes[$groupe_ref]}"; then |
ajout script d'analyse des v...
|
29 |
groupes[$groupe]='/<p class="nomgroupe">'${groupes[$groupe]}' <span class="block topmargin">/,/<div class="TTgroupe topmargin-lg">/' |
fixe pb quand groupe cible e...
|
30 |
if test $groupe != $groupe_ref; then |
31 |
groupes[$groupe_ref]='/<p class="nomgroupe">'${groupes[$groupe_ref]}' <span class="block topmargin">/,/<div class="TTgroupe topmargin-lg">/' |
|
32 |
fi |
|
ajout script d'analyse des v...
|
33 |
else |
34 |
echo "groupe \"$groupe\" inconnu:" |
|
35 |
for g in ${!groupes[@]}; do |
|
36 |
echo "$g -> ${groupes[$g]}" |
|
37 |
done |
|
sortie de script
|
38 |
exit 1 |
ajout script d'analyse des v...
|
39 |
fi |
40 | ||
41 |
tempfile="/dev/shm/scrutin" |
|
42 | ||
écriture directe en feuille ...
|
43 |
id_cols="Scrutin Date Titre Adoption" |
ajout script d'analyse des v...
|
44 |
typevotes="Pour Contre Abstention Non-votants" |
écriture directe en feuille ...
|
45 |
nb_cols=$(wc -w <<< "$id_cols $typevotes $typevotes") |
ajout script d'analyse des v...
|
46 | |
recherche sur le nom uniquem...
|
47 |
if test -n "$nom"; then |
48 |
cible="$nom ($groupe)" |
|
groupe de référence paramétr...
|
49 |
else |
50 |
cible=$groupe |
|
51 |
fi |
|
petite simplification du cod...
|
52 |
result="comparaisons $cible avec $groupe_ref" |
53 | ||
écriture directe en feuille ...
|
54 |
mkdir -p "/dev/shm/$result/META-INF" |
55 | ||
56 |
cat > "/dev/shm/$result/META-INF/manifest.xml" << EOmetainf |
|
57 |
<?xml version="1.0" encoding="UTF-8"?> |
|
58 |
<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2"> |
|
59 |
<manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/> |
|
60 |
<manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml"/> |
|
61 |
</manifest:manifest> |
|
62 |
EOmetainf |
|
63 | ||
64 |
printf 'application/vnd.oasis.opendocument.spreadsheet' > "/dev/shm/$result/mimetype" |
|
65 | ||
66 |
content="/dev/shm/$result/content.xml" |
|
67 | ||
68 |
cat > "$content" << EOcontent |
|
69 |
<?xml version="1.0" encoding="UTF-8"?> |
|
70 |
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2"> |
|
71 |
<office:scripts/> |
|
72 |
<office:font-face-decls> |
|
73 |
<style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> |
|
74 |
<style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-family-generic="system" style:font-pitch="variable"/> |
|
75 |
<style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/> |
|
76 |
</office:font-face-decls> |
|
77 |
<office:automatic-styles> |
|
78 |
EOcontent |
|
79 | ||
80 |
for i in $(seq $nb_cols); do |
|
81 |
cat >> "$content" << EOcontent |
|
82 |
<style:style style:name="co$i" style:family="table-column"> |
|
83 |
<style:table-column-properties fo:break-before="auto" style:column-width="30.00mm"/> |
|
84 |
</style:style> |
|
85 |
EOcontent |
|
86 |
done |
|
87 | ||
88 |
cat >> "$content" << EOcontent |
|
89 |
<style:style style:name="ro1" style:family="table-row"> |
|
90 |
<style:table-row-properties style:row-height="4.52mm" fo:break-before="auto" style:use-optimal-row-height="true"/> |
|
91 |
</style:style> |
|
92 |
<style:style style:name="ta1" style:family="table" style:master-page-name="Default"> |
|
93 |
<style:table-properties table:display="true" style:writing-mode="lr-tb"/> |
|
94 |
</style:style> |
|
95 |
</office:automatic-styles> |
|
96 |
<office:body> |
|
97 |
<office:spreadsheet> |
|
98 |
<table:calculation-settings table:automatic-find-labels="false"/> |
|
99 |
<table:table table:name="$result" table:style-name="ta1"> |
|
100 |
<office:forms form:automatic-focus="false" form:apply-design-mode="false"/> |
|
101 |
EOcontent |
|
102 | ||
103 |
for i in $(seq $nb_cols); do |
|
104 |
echo "<table:table-column table:style-name=\"co$i\" table:default-cell-style-name=\"Default\"/>" >> "$content" |
|
105 |
done |
|
106 |
echo '<table:table-row table:style-name="ro1">' >> "$content" |
|
107 | ||
108 |
for colonne in $id_cols; do |
|
109 |
cat >> "$content" << EOcontent |
|
110 |
<table:table-cell office:value-type="string" calcext:value-type="string"> |
|
111 |
<text:p>$colonne</text:p> |
|
112 |
</table:table-cell> |
|
113 |
EOcontent |
|
114 |
done |
|
groupe de référence: GDR
|
115 | |
ajout script d'analyse des v...
|
116 |
for typevote in $typevotes; do |
correction bug
|
117 |
for g in "$cible" $groupe_ref; do |
écriture directe en feuille ...
|
118 |
cat >> "$content" << EOcontent |
119 |
<table:table-cell office:value-type="string" calcext:value-type="string"> |
|
120 |
<text:p>$typevote - $g</text:p> |
|
121 |
</table:table-cell> |
|
122 |
EOcontent |
|
ajout script d'analyse des v...
|
123 |
done |
124 |
done |
|
écriture directe en feuille ...
|
125 | |
126 |
echo '</table:table-row>' >> "$content" |
|
ajout script d'analyse des v...
|
127 | |
128 |
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) |
|
fix premier scrutin
|
129 |
test -r "$archive_scrutins" && first=$(tar tf "$archive_scrutins" | tail -1) || first=0 |
utilsation d'une archive com...
|
130 | |
131 |
if test $first -lt $last; then |
|
132 |
echo "récupération des scrutins n°$((first+1)) à n°$last dans "$archive_scrutins" (à conserver autant que possible)" >&2 |
|
133 |
for scrutin in $(seq $((first+1)) $last); do |
|
réduction taille de l'archiv...
|
134 |
wget -qO- "http://www2.assemblee-nationale.fr/scrutins/detail/(legislature)/15/(num)/$scrutin" \ |
135 |
| sed -r '0,/< *div class="titre-bandeau-bleu +to-print" *>/d; /< *script +type="text\/javascript" *>/,$d' > /dev/shm/$scrutin \ |
|
utilsation d'une archive com...
|
136 |
&& tar -C /dev/shm -rf "$archive_scrutins" $scrutin \ |
137 |
&& rm -f /dev/shm/$scrutin \ |
|
138 |
&& echo -n '.' >&2 |
|
139 |
done |
|
140 |
echo |
|
141 |
fi |
|
142 | ||
ajout script d'analyse des v...
|
143 |
for scrutin in $(seq $last); do |
animation lors du calcul
|
144 |
printf "." |
utilsation d'une archive com...
|
145 |
tar -C /dev/shm -Oxf "$archive_scrutins" $scrutin > $tempfile |
ajout script d'analyse des v...
|
146 | |
meilleure présentation du sc...
|
147 |
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'] *//") |
ajout script d'analyse des v...
|
148 |
date=$(sed -rn 's,^.*<h1 class="">Analyse du scrutin n° '$scrutin'<br/>(.+) </h1>,\1,p' $tempfile) |
message adoption complet
|
149 |
adoption=$(sed -rn 's,^.*<p class="annonce"><span class="annoncevote">(.+).</span></p>.*$,\1,p' $tempfile) |
ajout script d'analyse des v...
|
150 | |
écriture directe en feuille ...
|
151 |
cat >> "$content" << EOcontent |
152 |
<table:table-row table:style-name="ro1"> |
|
153 |
<table:table-cell office:value-type="float" office:value="$scrutin" calcext:value-type="float"> |
|
154 |
<text:p>$scrutin</text:p> |
|
155 |
</table:table-cell> |
|
156 |
<table:table-cell office:value-type="string" calcext:value-type="string"> |
|
157 |
<text:p>$date</text:p> |
|
158 |
</table:table-cell> |
|
159 |
<table:table-cell office:value-type="string" calcext:value-type="string"> |
|
160 |
<text:p>${title//\'/'}</text:p> |
|
161 |
</table:table-cell> |
|
162 |
<table:table-cell office:value-type="string" calcext:value-type="string"> |
|
163 |
<text:p>${adoption//\'/'}</text:p> |
|
164 |
</table:table-cell> |
|
165 |
EOcontent |
|
ajout script d'analyse des v...
|
166 | |
modification de noms de vari...
|
167 |
unset cible_votes[*] ref_votes[*] |
ajout script d'analyse des v...
|
168 |
for typevote in $typevotes; do |
fix bug comparaison groupe à...
|
169 |
cible_votes[$typevote]=$(sed -rn "${groupes[$groupe]}p" $tempfile | sed -rn '/<p class="typevote">'${typevote}':/,/<.div>/p' | sed 's,</li>,\n,g' | grep -ic " <b>${nom:+${nom}</br>}") |
modification de noms de vari...
|
170 |
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 ' <b>') |
écriture directe en feuille ...
|
171 | |
172 |
cat >> "$content" << EOcontent |
|
173 |
<table:table-cell office:value-type="float" office:value="${cible_votes[$typevote]}" calcext:value-type="float"> |
|
174 |
<text:p>${cible_votes[$typevote]}</text:p> |
|
175 |
</table:table-cell> |
|
176 |
<table:table-cell office:value-type="float" office:value="${ref_votes[$typevote]}" calcext:value-type="float"> |
|
177 |
<text:p>${ref_votes[$typevote]}</text:p> |
|
178 |
</table:table-cell> |
|
179 |
EOcontent |
|
ajout script d'analyse des v...
|
180 |
done |
écriture directe en feuille ...
|
181 |
echo '</table:table-row>' >> "$content" |
ajout script d'analyse des v...
|
182 |
done |
écriture directe en feuille ...
|
183 |
echo |
184 |
rm $tempfile |
|
correction bug
|
185 | |
écriture directe en feuille ...
|
186 |
cat >> "$content" << EOcontent |
187 |
</table:table> |
|
188 |
<table:named-expressions/> |
|
189 |
<table:database-ranges> |
|
190 |
<table:database-range table:name="__Anonymous_Sheet_DB__0" table:target-range-address="'$result'.A1:'$result'.$(printf "\\$(printf '%03o' $((64+$nb_cols)))")$(($last+1))" table:display-filter-buttons="true"/> |
|
191 |
</table:database-ranges> |
|
192 |
</office:spreadsheet> |
|
193 |
</office:body> |
|
194 |
</office:document-content> |
|
195 |
EOcontent |
|
affiche nom du fichier des r...
|
196 | |
écriture directe en feuille ...
|
197 |
( cd "/dev/shm/$result" && zip -r ../"$result" * > /dev/null 2>&1 && cd .. && rm -fr "$result" ) |
198 | ||
199 |
mv -f "/dev/shm/$result.zip" "$result.ods" |
|
200 | ||
201 |
echo "$result.ods" |