Skip to content

2FromField/Euromillion

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet BeMillionnaire

Pandas Selenium Numpy Github Pages Excel Streamlit

🖼️ Présentation

Projet visant à récupérer les données depuis le site internet open-source https://www.tirage-euromillions.net/ et à les restructurer pour en tirer profit au sein d'une application.
L'application "BeMillionnaire" vient quant à elle appeller ces mêmes données pour permettre aux différents utilisateurs de concevoir leurs prochains pronostics tout en ayant la transparence des résultats antérieurs.

✨ Fonctionnalités

  • Possibilité de simuler son prochain pronostic de l'Euromillion
  • Statistiques interactives selon vos pronostics (basée sur l'historique)
  • Historique des tirages officiels de l'Euromillion

🗂️ Arborescence

├── 📁 .github
│   └── 📁 workflows
│       └── ⚙️ daily-update.yml             # Fichier d'automatisation via GithHub Pages
├── 📁 uv-env                               # Envrionnement virtuel UV-python
│   ├── 📁 app
│   │   ├── 📁 assets                       # Elements annexés au projet (img,photo,etc)
│   │   ├── 📁 logs                         # Elements annexés au projet (img,photo,etc)
│   │   │   └── 📄 scrap.log                # Logs relatifs au recueil des données
│   │   ├── 📁 data
│   │   │   └── 📄 BDD.csv                  # Base de données
│   │   ├── 📁 pages
│   │   │   ├── 🐍 0_Euromillion.py         # Page interactif de simulation
│   │   │   ├── ...                         # Autres pages futures
│   │   ├── 🐍 app.py                       # Application Streamlit
│   │   ├── 🐍 script.py                    # Script de scrapping des données
│   │   └── 🐍 utils.py                     # Fichier de fonctions
│   │   └── 🐍 gs_utils.py                  # Fichier de fonctions relatif à GoogleSheet
│   │   └── 🎨 style.css                    # Fichier de style des balises HTML
│   ├── ⚙️ .gitignore                       # Exclusions git
│   ├── ⚙️ config.yaml                      # Fichier de configiration "prod"/"dev"
│   ├── 🐍 main.py
│   └── ⚙️ pyproject.toml                   # Dépendances UV-python
└── 📝 README.md                            # Documentation
└── 🛠️ requirements.txt                     # Dépendances nécessaires à Github Pages

📦 Aperçu technique

  • Automation: Github Pages (daily-update.yml)
  • Frontend : Streamlit
  • Données : Scraping avec Selenium et stockage sur Google Sheets (via gspread, google-auth)
  • Viz : Altair
  • Pandas pour la logique data (split double “A/B”, mapping rangs, KPIs)
  • Gestion d’état : st.session_state (confirmations, filtres, formulaires)
  • Cache : @st.cache_data pour les lectures stables

✅ Prérequis

  • Un compte Google et un Google Sheet (formaté avec vos onglets de données).
  • Un projet Google Cloud avec un Service Account et une clé JSON.
  • Un repo GitHub public/privé contenant cette app.

🧰 Installation & Lancement (local)

  1. Cloner: git clone https://github.com/2FromField/$REPO.git && cd env-uv

  2. Installer les dépendances et synchroniser: uv add -r requirements.txt && uv sync

  3. Secrets: créez .streamlit/secrets.toml comme ci-après.

  4. Lancer l'application en localhost: uv run streamlit run app/app.py

🔑 Secrets (local & cloud)

En local, créez .streamlit/secrets.toml pour y stocker vos données sensibles (comme ci-joint):

[prod]
SHEET_ID = "<votre_sheet_id>"
[gcp]
type = "service_account"
project_id = "<...>"
private_key_id = "<...>"
private_key = """-----BEGIN PRIVATE KEY-----
...votre clé...
-----END PRIVATE KEY-----"""
client_email = "<service-account>@<project>.iam.gserviceaccount.com"
client_id = "<...>"
token_uri = "https://oauth2.googleapis.com/token"

Sur Streamlit Community Cloud:

  1. Dans Manage App → Settings → Secrets, collez le même contenu (YAML/TOML-like).
  2. Ajoutez SHEET_ID et le bloc [gcp].

🔐 Google Cloud & Google Sheets (accès service account)

  1. Créer un Service Account (GCP → IAM & Admin → Service Accounts) et générer une clé JSON.
  2. Dans Google Sheets, partager le document à l’e-mail du service account (le compte doit avoir au moins Éditeur sur le fichier).
  3. Notez l’ID du Sheet, l’URL ressemble à https://docs.google.com/spreadsheets/d/<SHEET_ID>/edit#gid=0 et <SHEET_ID> est la valeur à copier.
  4. Onglets requis dans votre fichier (exemples) :
  • BDD: Date, Gagnant, Jackpot, n1, n2, n3, n4, n5, e1, e2

☁️ Déploiement — Streamlit Community Cloud

  1. Poussez le code sur GitHub (branche main de préférence).
  2. Allez sur streamlit.io → Community Cloud → Deploy an app.
  3. Pointez vers votre repo/branche, et chemin du script (ex: app/app.py).
  4. Dans Secrets, collez le contenu de votre secrets.toml.
  5. Vérifiez que le requirements.txt contient au minimum :
  • streamlit
  • pandas
  • gspread
  • google-auth
  • altair Ainsi qu'un runtime.txt avec python-3.10.
  1. Déployez. L’URL aura la forme https://-.streamlit.app.

⏰ Automation

  1. Créer le fichier:
.github/
  workflows/
    ci.yml
  1. Exemple de ci/yaml:
name: CI

on:
  push:
    branches: ["main"]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      # 1) Récupère le code du dépôt dans la machine GitHub
      - name: Checkout repository
        uses: actions/checkout@v4

      # 2) Installe uv (et active le cache pour accélérer les runs)
      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          version: "latest"
          enable-cache: true

      # 3) Installe la version de Python demandée
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      # 4) Installe les dépendances EXACTES du projet depuis uv.lock
      # --frozen = refuse de modifier le lockfile (sécurité CI)
      - name: Install dependencies (locked)
        run: uv sync --frozen

      # 5) Lance la suite de tests
      - name: Run tests
        run: uv run pytest -q

🐍 Scraping

Lancer le scraping manuellement: cd uv-env && uv run python scrap.py

Exemple de sortie:

Récupération des données...:  43%|██████████████████████████████████████████████                                                            | 10/23 [01:01<01:38,  7.60s/it]Capture des données de l'année 2014
Récupération des données...:  48%|██████████████████████████████████████████████████▋                                                       | 11/23 [01:10<01:35,  7.98s/it]Capture des données de l'année 2015

🧪 Données

BDD

Colonne Description Type
Date Date du tirage pd.datetime
Gagnant Nombre de gagnants lors du tirage int
Jackpot Montant de la cagnote string
n1, n2, etc Numéros du tirage int
e1, e2 Etoiles du tirage int

🏙️ Environnement virtuel UV

  1. Installer UV sur l'ensemble du système macOS ou Linux (vérifier via uv self version): curl -LsSf https://astral.sh/uv/install.sh | sudo sh Sortie: uv 0.8.22 (ade2bdbd2 2025-09-23)
  2. Créer un nouveau projet: uv init $PROJECT_NAME
  3. Commandes: Ajouter des dépendances: uv add $PACKAGE Retirer des dépendances: uv remove $PACKAGE Lancer un script: uv run $SCRIPT.py Compiler les dépendances dans un fichier 'requirements.txt': uv pip compile pyproject.toml -o requirements.txt
  4. Lancer l'application en localhost: cd uv-env && uv run streamlit run app/app.py

🚀 Roadmap (idées)

  • Davantage de statistiques ? (probabilité, ML, etc.)
  • Faire d'autres jeux (Loto par exemple)
  • Mise en page aux couleurs des jeux

📬 Contact

GitHub Linkedin

About

Statistics on Euromillion

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors