From 9dae2869653f8a54ca2920378f7e5748bad94741 Mon Sep 17 00:00:00 2001 From: Djeex Date: Wed, 23 Apr 2025 16:57:35 +0000 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20la=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 25 ++++++++++++++++--------- docker/.env | 10 +++++----- docker/compose.yaml | 5 +++-- nvidia-stock-bot.py | 20 ++++++++++++++------ 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index b7fa3ea..ef69bbc 100644 --- a/README.md +++ b/README.md @@ -47,24 +47,31 @@ Vous trouverez-ci dessous les instructions pour configurer le conteneur avec not - Créez le fichier `compose.yaml` dans ce dossier avec la configuration ci-dessous : ```yaml -version: "3.8" services: nvidia-stock-bot: image: git.djeex.fr/djeex/nvidia-stock-bot:latest container_name: nvidia-stock-bot - restart: always + restart: unless-stopped environment: - DISCORD_WEBHOOK_URL= # URL de votre webhook Discord - - REFRESH_TIME= # Durée de rafraichissement du script en secondes - - API_URL_SKU= # API listant le produit par exemple https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia&gpu=RTX%205090 - - API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par exemple https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus= - - PRODUCT_URL= # URL d'achat du GPU - - PRODUCT_NAME= # Le nom du GPU qui s'affiche dans les notifications - - TEST_MODE= # true pour tester les notifications discord. false par défaut. + - PRODUCT_NAME= # Le nom exact du GPU que vous recherchez comme : "RTX 5080" - PYTHONUNBUFFERED=1 # Permet d'afficher les logs en temps réel - command: python nvidia-stock-bot.py # Lance le script Python au démarrage du conteneur + command: python nvidia-stock-bot.py ``` +**Variables d'environnements :** + +| Variables | Explications | Valeurs possibles | Valeur par défaut | +|---------------------|-------------------------------------------------|--------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| +| DISCORD_WEBHOOK_URL | URL de votre webhook Discord | Une URL | | +| REFRESH_TIME | Durée de rafraichissement du script en secondes | `60`, `30`, etc... | `30` | +| API_URL_SKU | API listant le produit | Une URL | `https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia` | +| API_URL_STOCK | API donnant le stock | Une URL | `https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=` | +| PRODUCT_URL | URL d'achat du GPU | Une URL | `https://marketplace.nvidia.com/fr-fr/consumer/graphics-cards/?locale=fr-fr&page=1&limit=12&manufacturer=NVIDIA` | +| PRODUCT_NAME | Le nom exact du GPU que vous recherchez | `RTX 5090`, `RTX 5080` ou `RTX 5070`. | | +| TEST_MODE | Pour tester sans envoyer de notifs | `True`, `False` | `False` | +| PYTHONUNBUFFERED | #Permet d'afficher les logs en temps réel | `1`, `0` | `1` | + **Lancer l'image** Rendez-vous dans le dossier `nvidia-stock-bot` et lancez le conteneur : diff --git a/docker/.env b/docker/.env index b7e4cb0..4eeef7c 100644 --- a/docker/.env +++ b/docker/.env @@ -1,6 +1,6 @@ -DS_HOOK= #votre url du webhook Discord -FREQ= #frequence de rafraichissement en secondes -API_URL_SKU= # API listant le produit par exemple https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia&gpu=RTX%205090 -API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par exemple https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus= +DS_HOOK= # votre url du webhook Discord +FREQ= # frequence de rafraichissement en secondes, par défaut 30 +API_URL_SKU= # API listant le produit par défaut https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia +API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par défaut https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus= PRODUCT_URL= # URL d'achat du GPU -PRODUCT_NAME= #Le nom du GPU qui s'affiche dans les notifications +PRODUCT_NAME= # Le nom exact du GPU que vous recherchez comme : "RTX 5080" diff --git a/docker/compose.yaml b/docker/compose.yaml index 596708b..9b7897b 100644 --- a/docker/compose.yaml +++ b/docker/compose.yaml @@ -1,9 +1,8 @@ -version: "3.8" services: nvidia-stock-bot: image: nvidia-stock-bot container_name: nvidia-stock-bot - restart: always # Le conteneur redémarrera automatiquement en cas d'échec + restart: unless-stopped env_file: - .env environment: @@ -11,5 +10,7 @@ services: - REFRESH_TIME=${FREQ} - API_URL_SKU=${API_URL_SKU} - API_URL_STOCK=${API_URL_STOCK} + - PRODUCT_URL=${PRODUCT_URL} + - PRODUCT_NAME=${PRODUCT_NAME} - PYTHONUNBUFFERED=1 # Permet d'afficher les logs en temps réel command: python nvidia-stock-bot.py # Lance le script Python \ No newline at end of file diff --git a/nvidia-stock-bot.py b/nvidia-stock-bot.py index 5d22c9d..e815ea4 100644 --- a/nvidia-stock-bot.py +++ b/nvidia-stock-bot.py @@ -14,14 +14,22 @@ logging.info("Démarrage du script") # Récupération des variables d'environnement try: - DISCORD_WEBHOOK_URL = os.environ['DISCORD_WEBHOOK_URL'] - API_URL_SKU = os.environ['API_URL_SKU'] - API_URL_STOCK = os.environ['API_URL_STOCK'] - REFRESH_TIME = int(os.environ['REFRESH_TIME']) # Convertir en entier + DISCORD_WEBHOOK_URL = os.environ.get('DISCORD_WEBHOOK_URL') + API_URL_SKU = os.environ.get('API_URL_SKU', 'https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia') + API_URL_STOCK = os.environ.get('API_URL_STOCK', 'https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=') + REFRESH_TIME = int(os.environ.get('REFRESH_TIME', 30)) TEST_MODE = os.environ.get('TEST_MODE', 'False').lower() == 'true' - PRODUCT_URL = os.environ['PRODUCT_URL'] - PRODUCT_NAME = os.environ['PRODUCT_NAME'] + PRODUCT_URL = os.environ.get('PRODUCT_URL', 'https://marketplace.nvidia.com/fr-fr/consumer/graphics-cards/?locale=fr-fr&page=1&limit=12&manufacturer=NVIDIA') + PRODUCT_NAME = os.environ.get('PRODUCT_NAME') + if not DISCORD_WEBHOOK_URL: + logging.error("❌ DISCORD_WEBHOOK_URL est requis mais non défini.") + exit(1) + + if not PRODUCT_NAME: + logging.error("❌ PRODUCT_NAME est requis mais non défini.") + exit(1) + # Regex pour extraire l'ID et le token match = re.search(r'/(\d+)/(.*)', DISCORD_WEBHOOK_URL) if match: