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.
- 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
├── 📁 .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
- 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
- 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.
-
Cloner:
git clone https://github.com/2FromField/$REPO.git && cd env-uv -
Installer les dépendances et synchroniser:
uv add -r requirements.txt && uv sync -
Secrets: créez .streamlit/secrets.toml comme ci-après.
-
Lancer l'application en localhost:
uv run streamlit run app/app.py
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:
- Dans Manage App → Settings → Secrets, collez le même contenu (YAML/TOML-like).
- Ajoutez SHEET_ID et le bloc [gcp].
- Créer un Service Account (GCP → IAM & Admin → Service Accounts) et générer une clé JSON.
- Dans Google Sheets, partager le document à l’e-mail du service account (le compte doit avoir au moins Éditeur sur le fichier).
- Notez l’ID du Sheet, l’URL ressemble à
https://docs.google.com/spreadsheets/d/<SHEET_ID>/edit#gid=0et <SHEET_ID> est la valeur à copier. - Onglets requis dans votre fichier (exemples) :
- BDD: Date, Gagnant, Jackpot, n1, n2, n3, n4, n5, e1, e2
- Poussez le code sur GitHub (branche main de préférence).
- Allez sur streamlit.io → Community Cloud → Deploy an app.
- Pointez vers votre repo/branche, et chemin du script (ex: app/app.py).
- Dans Secrets, collez le contenu de votre secrets.toml.
- Vérifiez que le
requirements.txtcontient au minimum :
- streamlit
- pandas
- gspread
- google-auth
- altair
Ainsi qu'un
runtime.txtavec python-3.10.
- Déployez. L’URL aura la forme https://-.streamlit.app.
- Créer le fichier:
.github/
workflows/
ci.yml
- 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
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
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 |
- 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 shSortie:uv 0.8.22 (ade2bdbd2 2025-09-23) - Créer un nouveau projet:
uv init $PROJECT_NAME - Commandes:
Ajouter des dépendances:
uv add $PACKAGERetirer des dépendances:uv remove $PACKAGELancer un script:uv run $SCRIPT.pyCompiler les dépendances dans un fichier 'requirements.txt':uv pip compile pyproject.toml -o requirements.txt - Lancer l'application en localhost:
cd uv-env && uv run streamlit run app/app.py
- Davantage de statistiques ? (probabilité, ML, etc.)
- Faire d'autres jeux (Loto par exemple)
- Mise en page aux couleurs des jeux