Showing 1 changed files with 32 additions and 29 deletions
+32 -29
analyse-votes-AN
... ...
@@ -83,40 +83,43 @@ function update_database () {
83 83
         begin=$(date +%s)
84 84
         for scrutin in $(seq $((${first:-0}+1)) $last); do
85 85
             w3m -cols 512 -dump "http://www2.assemblee-nationale.fr/scrutins/detail/(legislature)/$mandature/(num)/$scrutin" \
86
-            | sed -n '/^Analyse du scrutin n° /,/^Votes des groupes/{/^Navigation/,/^  • Non inscrits/d;/^[[:space:]]*$/d;p}' \
86
+            | sed -n '/^Analyse du scrutin n°/,/^Votes des groupes/{/^Navigation/,/^  • Non inscrits/d;/^[[:space:]]*$/d;p}' \
87 87
             | awk -v sq="'" -v dq='"' '
88
-                BEGIN { adoption = -1; map = 0 }
89
-                /^Analyse du scrutin/ { scrutin = $NF }
90
-                /séance du [0-3][0-9]\/[01][0-9]\/(19|20)[0-9]+/ { date = $NF; seance = $1 }
91
-                /^Scrutin public sur /            { titre = gensub("^Scrutin public sur l[ae" sq "]s? ?", "", "1") }
92
-                /^L.Assemblée .+ adopté/          { adoption = NF == 3 }
88
+                BEGIN {
89
+                    adoption = -1
90
+                    map = 0
91
+                    split("janvier février mars avril mai juin juillet août septembre octobre novembre décembre", mois)
92
+                }
93
+                /^Analyse du scrutin n°/ { scrutin = gensub("n°([0-9]+)", "\\1", "1", $NF) }
94
+                /séance du [a-z]+ ([0-3][0-9]?) ([a-z]+) ((19|20)[0-9]+)/ {
95
+                    seance = $1
96
+                    mois_seance = gensub("^.+[0-3][0-9]? ([a-z]+) (19|20)[0-9]+$", "\\1", "1")
97
+                    for (i=1; i<=12; i++) {
98
+                        if (mois[i] == mois_seance) {
99
+                            date = sprintf("%02d/%02d/%d", $(NF-2), i, $NF)
100
+                            break
101
+                        }
102
+                    }
103
+                }
104
+                /^Scrutin public n°[0-9]+ sur /   { titre = gensub("^Scrutin public n°[0-9]+ sur l[ae" sq "]s? ?", "", "1") }
105
+                /^L.Assemblée nationale .+ adopté/{ adoption = NF == 4 }
93 106
                 /^Nombre de votants :/            { votants      = $NF }
94 107
                 /^Nombre de suffrages exprimés :/ { exprimes     = $NF }
95 108
                 /^Majorité absolue :/             { majo_absolue = $NF }
96
-                /^Pour l.adoption :/              { pour         = $NF }
97
-                /^Contre :/                       { contre       = $NF }
98
-                /^Groupe /                        { groupe = gensub("^Groupe (.+) \\([1-9].+$", "\\1", "1")
99
-                                                    groupe = gensub("^(la|les|le|l" sq "|du|des|de|de la|d" sq ") ", "", "1", groupe)
109
+                /^  • Pour l.adoption :/          { pour         = $NF }
110
+                /^  • Contre :/                   { contre       = $NF }
111
+                /^    [A-Z]/                      { groupe = gensub("^ +", "", "1")
112
+                                                    if (groupe == "Députés non inscrits")
113
+                                                        groupe = "Non inscrits"
114
+                                                  }
115
+                /^      □ (Pour|Abstention|Contre) *:/{ position = gensub("^.+(Pour|Abstention|Contre) *:.*$", "\\1", "1") }
116
+                /^      □ Non votants? :/          { position = "Non-votant" }
117
+                /^          ☆ /                   { votes[groupe][position][gensub("^.+ (M\\.|Mme|Mlle) +", "", "1")]++ }
118
+                /^Mises au point/,/^Votes des groupes/ {
119
+                                                        if ($1 != "(Sous" && $0 != "Il n" sq "y a pas de mise au point enregistrée pour ce scrutin") {
120
+                                                            mises_au_point[map++] = $0
121
+                                                        }
100 122
                                                   }
101
-                /^Non inscrits/                   { groupe = "Non inscrits" }
102
-                /^(Pour|Abstention|Contre):/      { position = gensub(":", "", "1", $1) }
103
-                /^Non-votants?:/                  {
104
-                                                    position = gensub("s?:", "", "1", $1)
105
-                                                    nvl = ""
106
-                                                    while ($1 != "Groupe" || $0 != "Contenus annexes") {
107
-                                                        getline
108
-                                                        if ($1 == "Groupe" || $0 == "Contenus annexes")
109
-                                                            break
110
-                                                        nvl = nvl $0
111
-                                                    }
112
-                                                    f = split(nvl, nv, "(, | et )")
113
-                                                    for (i=1; i<=f; i++) {
114
-                                                        votes[groupe][position][gensub("(^ +|M\\. |Mme |Mlle | \\(.+)", "", "g", nv[i])]++
115
-                                                    }
116
-                                                    groupe = gensub("^Groupe (.+) \\([1-9].+$", "\\1", "1")
117
-                }
118
-                /^  • /                           { votes[groupe][position][gensub("^[^A-Z]*", "", "1")]++ }
119
-                /^Mises au point/,/^Votes des groupes/ { if ($1 != "(Sous") mises_au_point[map++] = $0 }
120 123
                 END {
121 124
                     if (adoption < 0)
122 125
                         adoption = pour >= majo_absolue