尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Résultats officiels en direct des élections israéliennes 2026 (CEC), blocs pressentis et simulateur de coalitions. HTML simple, open source.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Un site statique (HTML + JS, sans build ni dépendance) en trois pages pour les élections à la 26ᵉ Knesset du 27 octobre 2026 :
index.html) : l'hémicycle, un simulateur de coalition (coche des partis, vois si ta coalition a la majorité, partage-la par lien), le duel Yashar vs BB et l'actualité du scrutin (titres de la presse francophone, avec un lien vers chaque article) ;resultats.html, annexe) : voix, %, seuil de 3,25 % et sièges de chaque liste tels que publiés par la Commission électorale centrale, participation heure par heure, avec la source de chaque chiffre ;analyse.html) : ce que chaque famille politique (droite et ultra-orthodoxes, centre et gauche, partis arabes) gagne ou perd par rapport aux résultats officiels de 2022, parti par parti.English: a dependency-free, open-source live dashboard for Israel's 2026 Knesset election — official CEC results, bloc math and a coalition builder. Independent project, not affiliated with the CEC.
Wikipédia (voix par liste) + totaux de la CEC (recopiés ou fichier importé) + relais presse + participation
│ toutes les 30 s (Wikipédia et relais : ~3 min) (scripts/live.sh → scripts/fetch_cec.py)
▼
branche `data` : live.json ──(API GitHub ~1 min · raw 5 min)──► pages (GitHub Pages) ── recalculent les sièges (js/seats.js)
flux RSS de presse ──(même boucle, toutes les ~10 min)──► branche `news` : news.json ──► « À lire » (accueil)
Structure : index.html, resultats.html, analyse.html ; css/site.css (styles communs) ; js/common.js (données, modèle dérivé, menu, pied de page, thème, pastille « page actualisée ») ; js/seats.js (Bader-Ofer) ; js/compare.js + js/data2022.js (comparaison 2022) ; scripts/ (collecteurs Python/bash) ; deploy/jetson/ (collecteur sur un Jetson) ; tests/. Voir CLAUDE.md pour le détail, les décisions et les défauts connus.
data (l'API GitHub et raw.githubusercontent.com autorisent le CORS). La page lit les deux et garde la plus récente : l'API GitHub répond en ~1 min mais est limitée à 60 requêtes/h/IP (la page s'en détache avant d'être bloquée) ; raw garde 5 min en cache. Pour du vrai temps réel, il faudrait un petit relais sans cache (Cloudflare Worker).tests/seats.test.mjs).Les flux RSS des médias n'envoient pas d'en-tête CORS : la page ne peut pas les lire. Le collecteur (scripts/live.sh, toutes les ~10 min) lance scripts/fetch_news.py ; .github/workflows/news.yml fait la même chose, mais GitHub ne déclenche ses exécutions planifiées que très irrégulièrement (une seule en ~20 h sur ce dépôt) : c'est un filet de secours, qu'on peut aussi lancer à la main (Run workflow). fetch_news.py lit Google Actualités (recherche en français) et les flux « Moyen-Orient » du Monde, de France 24 et de RFI, puis publie news.json sur la branche orpheline news (force-push : l'historique ne grossit pas). La page le lit via raw.githubusercontent.com ; data/news.json, un instantané versionné, sert de repli.
MEDIA dans le script, à compléter au besoin ; ni sites d'opinion ou confessionnels, ni médias d'État étrangers), titres parlant d'Israël (et d'un scrutin pour les flux généralistes), 4 jours au plus, 3 titres par média au maximum.python3 -I scripts/fetch_news.py --out news.json.La CEC publie la participation toutes les ~2 h sans flux lisible. Le collecteur lit le live-blog de NBC News, qui cite chaque relevé de la CEC (heure + chiffre + comparaison 2022) dans un JSON structuré, ~1 h 30 après l'heure de référence. Le parseur est volontairement strict (mention de la CEC et de la participation, heure locale, plage 07:00–22:00, chiffre qui ne recule pas) : en cas de doute il ignore l'entrée. source.fetch.turnout de live.json dit si la lecture a marché. Un relevé saisi à la main dans manual.json prévaut pour la même heure.
Le site de la CEC protège ses fichiers par un défi anti-bot (AWS WAF : réponse HTTP 202 vide avec x-amzn-waf-action: challenge) que seul un vrai navigateur passe ; le projet ne le contourne pas et n'interroge plus son site (CEC_POLL=1 scripts/live.sh pour réessayer : en-tête honnête, pause de 45 s doublée jusqu'à 10 min en cas de défi). On lit donc le tableau national sur le site de la CEC dans un navigateur et on le recopie :
python3 -I scripts/cec_manual.py --as-of 23:40 --eligible 7000000 --voters 1500000 --valid 1480000 \
likud=380000 yashar=350000 together=190000 ... # identifiants de PARTIES (js/common.js) ou lettres de vote
git diff data/manual.json && git commit -am "Totaux CEC (saisie manuelle)" && git push
python3 -I scripts/cec_manual.py --clear # retire la saisie
L'assistant écrit la clé cec de manual.json (le reste du fichier n'est pas touché) et refuse, sans rien écrire, une liste inconnue, un total incohérent ou une somme des listes hors de 85–100 % des bulletins valides. Le collecteur relit le fichier depuis main à chaque tour (~30 s) et n'en tient compte que si la saisie est plus avancée que le dernier relevé obtenu (fichier importé, ou lecture du site avec CEC_POLL=1) et pas plus ancienne que lui (une nouvelle saisie peut corriger la précédente). La page dit alors d'où viennent les voix : « totaux de la CEC, recopiés depuis son tableau (relevé de …, heure d'Israël) ». Les sièges restent estimés (Bader-Ofer) ; il n'y a pas de saisie des sièges officiels.
data/manual.jsonLa participation peut être saisie ou corrigée dans data/manual.json (une PR suffit — le collecteur relit ce fichier à chaque tour, sans redéploiement), ainsi que les totaux de la CEC (clé cec, voir plus haut). Les identifiants de parti sont ceux de PARTIES dans js/common.js (likud, yashar, together, democrats, yb, shas, otzma, utj, rzp, raam, joint, reservists…).
python3 -m http.server 8765 # puis http://localhost:8765
?demo=1 (dépouillement partiel), ?demo=final (résultat final) : chiffres simulés pour tester l'interface.python3 scripts/fetch_cec.py --out data/live.json --manual data/manual.json : un relevé à la main.scripts/live.sh 20000 30 : boucle de collecte qui publie sur la branche data (nécessite les droits de push).Le soir du scrutin la CEC a protégé ses fichiers par un défi anti-bot (AWS WAF : HTTP 202, x-amzn-waf-action: challenge). Le projet ne le contourne pas et le collecteur n'interroge plus son site. Deux moyens légitimes :
scripts/import_csv.sh : il retrouve le CSV le plus récent de ~/Downloads, affiche un résumé (communes, bulletins valides, premières listes), refuse un fichier qui n'est pas de la CEC et demande confirmation avant de publier (--dry : résumé seulement). Les autres collecteurs adoptent ces chiffres s'ils sont plus avancés.scripts/cec_manual.py).--peer).L'API MediaWiki est faite pour les robots : le collecteur s'identifie (User-Agent avec l'adresse du dépôt) et fait 3 petites requêtes en série toutes les ~3 min (liste des sections, section « Results », en-tête de l'article). Il lit le modèle {{Election results}} : voix brutes des listes, bulletins valides et nuls, inscrits, puis, dans l'en-tête, le pourcentage d'urnes dépouillées et l'heure du relevé. Les bénévoles de Wikipédia recopient le tableau de la CEC avec un retard d'environ une heure et ont déjà inversé le nom de deux listes minuscules : le collecteur ne reprend donc que les 15 listes suivies par leur nom et regroupe le reste en « autres listes ».
parse_wiki) : tableau complet (≥ 30 listes), somme des listes = bulletins valides (0,5 %), 11 listes principales retrouvées, reste des petites listes < 4 % ; sinon le relevé est rejeté. Une relecture qui perd plus de 2 % des bulletins valides est écartée (vandalisme, tableau en chantier) ; une petite correction est suivie.Le collecteur lit toutes les ~3 min la projection de sièges de The Petek (agrégateur indépendant qui reprend le dépouillement de la CEC ; robots.txt : tout autorisé ; en-tête honnête) et la publie sous la clé press de live.json. La page ne l'utilise que si elle est plus avancée que les totaux CEC disponibles (bulletins valides comptés), ou à défaut de tout total CEC ; elle est toujours étiquetée « non officiel · relais presse », et le tableau des voix reste réservé à la CEC. Le relais est strict (liste inconnue, sièges ≠ 120 → rejeté) ; un net recul du dépouillement (plus de 2 % de bulletins en moins) est écarté, une petite correction de la source est suivie.
main / root.REPO en haut de js/common.js.nohup scripts/live.sh 30000 30 > live.log 2>&1 & # ~8 h, un relevé toutes les 30 s
Elle publie live.json sur la branche orpheline data (force-push : l'historique ne grossit pas) et relit data/manual.json sur main à chaque tour.node tests/seats.test.mjs # Bader-Ofer : reproduit les 120 sièges de 2022
node tests/compare.test.mjs # comparaison 2022 (camps, fusions, écarts)
node tests/common.test.mjs # validation du JSON du collecteur, choix de la source des sièges
python3 -I -m unittest discover tests # collecteur CEC, relais presse, saisie manuelle, actualités
PARTIES (js/common.js) et GROUPS (js/compare.js) ; les correspondances 2022 → 2026 (fusions, scissions) sont expliquées ligne par ligne sur la page d'analyse.MIT.