Skip to content

redabens/Next-Car

Repository files navigation

🚀 Next Car - Plateforme d'Automatisation

Plateforme complète d'automatisation pour la publication d'annonces automobiles avec intégration Telegram, génération vidéo et publication automatique sur Ouedkniss.


📋 Table des matières


🎯 Vue d'ensemble

Cette plateforme fournit quatre modules principaux :

  1. 🤖 Intégration Telegram : Récupération de messages et photos via bot Telegram
  2. 🎬 Génération vidéo : Création de vidéos MP4 à partir d'images avec FFmpeg
  3. 🚗 Automation Ouedkniss : Publication automatique complète d'annonces sur Ouedkniss.com
  4. 🌐 DDNS Hostinger : Mise à jour automatique DNS pour IP dynamique (accès n8n)

Conçu pour l'automatisation complète du workflow de publication d'annonces automobiles avec une API REST FastAPI.


✨ Fonctionnalités

🤖 Telegram Bot

  • ✅ Récupération du dernier message reçu
  • ✅ Extraction de photos depuis conversations
  • ✅ Gestion d'état pour éviter les doublons
  • ✅ Mise à jour manuelle de l'ID de vérification
  • ✅ Compatible n8n webhooks
  • ✅ Polling automatique en arrière-plan

🎬 Génération Vidéo

  • ✅ Upload multiple d'images
  • ✅ Durée automatique selon nombre d'images (2s, 2.5s ou 3s)
  • ✅ 3 niveaux de qualité (low, medium, high)
  • ✅ Nettoyage automatique des fichiers temporaires
  • ✅ Retour direct du fichier MP4
  • ✅ Compatible FFmpeg avec codec H.264
  • ✅ Gestion du dossier image_uploaded/

� Automation Ouedkniss

✅ Publication Complète (100% fonctionnel)

Étape Status Description
Étape 1: Catégorie ✅ 100% Sélection Automobiles > Voitures
Étape 2: Description ✅ 100% Année, Marque, Modèle (texte libre), Kilométrage, Énergie, Boîte + Description
Étape 3: Prix ✅ 100% Prix + Type d'offre + Échange
Étape 4: Contact ✅ 100% Wilaya + Commune + Email (autocomplete intelligent)
Étape 5: Photos ✅ 100% Upload multiple (jusqu'à 20 images) + Attente intelligente

Fonctionnalités avancées :

  • ✅ Connexion automatique avec session Chrome persistante
  • ✅ Fermeture automatique des popups publicitaires
  • Modèle en mode texte libre : Sélection automatique de "Autre" + saisie du modèle
  • ✅ Gestion des overlays Vuetify (v-overlay) avec fermeture ESC
  • ✅ Scroll virtuel intelligent pour listes longues (500+ options)
  • Retry logic : 3 tentatives pour les éléments stale
  • Sanitisation du texte : Suppression des emojis et caractères non-BMP
  • ✅ Matching insensible à la casse pour autocomplete (Wilaya/Commune)
  • Upload intelligent : Attente basée sur l'état réel (pas de timeout arbitraire)
  • Double vérification : Progression images + état du bouton "Confirmer"
  • Scroll automatique : scrollIntoView pour éléments non interactables
  • ✅ Temps optimisé : ~35-40 secondes pour publication complète

🌐 API Endpoints

Base URL

http://localhost:8000

📱 Telegram

GET /getlastmessage

Récupère le dernier message Telegram intercepté.

Réponse :

{
  "chat_id": 123456789,
  "text": "Message texte",
  "sender": "John Doe",
  "update_id": 987654321
}

GET /getphotos

Récupère toutes les photos non encore lues.

Réponse :

{
  "photos": [
    {
      "file_id": "AgACAgIAAx...",
      "chat_id": 123456789
    }
  ]
}

POST /update_id_verificator

Vérifie si l'update_id est nouveau.

Body :

{
  "sender_id": "123456789",
  "sender": "John Doe",
  "update_id": 987654321
}

Réponse :

{
  "valid": true
}

🎬 Génération Vidéo

POST /upload_image

Upload une image dans image_uploaded/.

Form Data :

  • file: Image (JPG, PNG, etc.)

Réponse :

{
  "success": true,
  "filename": "image1.jpg",
  "images_count": 5
}

POST /create_video

Génère une vidéo MP4 depuis toutes les images uploadées.

Query Parameters :

  • quality : "low" | "medium" | "high" (défaut: "medium")

Réponse : Fichier MP4 en direct

DELETE /delete_uploaded_images

Supprime toutes les images du dossier image_uploaded/.

Réponse :

{
  "success": true,
  "deleted_count": 4,
  "message": "4 image(s) supprimée(s) avec succès"
}

🚗 Ouedkniss

POST /publier-annonce-ouedkniss

Publie automatiquement une annonce sur Ouedkniss avec données dynamiques.

Body JSON :

{
  "annee": "2012",
  "marque": "Renault",
  "modele": "Clio",
  "kilometrage": "50000",
  "energie": "Essence",
  "boite": "Manuelle",
  "papiers": "Carte grise / safia",
  "description": "Belle voiture...",
  "prix": "2.5",
  "type_offre": "Négociable",
  "echange": "Pas d'échanges",
  "wilaya": "Alger",
  "commune": "Bab Ezzouar",
  "email": "redbleu994@gmail.com"
}

Réponse :

{
  "success": true,
  "message": "Annonce publiée avec succès sur Ouedkniss !",
  "url": "https://www.ouedkniss.com/my/u/announcements/list?announcementId=51349018"
}

Prérequis :

  • Images uploadées dans image_uploaded/ via /upload_image
  • Session Chrome connectée à Ouedkniss

🛠️ Installation

1️⃣ Prérequis

Python 3.11+

python --version

uv (Package manager Python ultra-rapide)

pip install uv

FFmpeg (pour génération vidéo)

winget install --id=Gyan.FFmpeg -e
ffmpeg -version

Google Chrome (pour Ouedkniss automation)

# Chrome doit être installé dans le chemin par défaut

2️⃣ Cloner le projet

git clone https://github.com/redabens/Next-Car.git
cd "Next Car"

3️⃣ Installer les dépendances

Avec uv (recommandé) :

pip install uv
uv sync

Avec pip :

pip install -r requirements.txt
pip install -r ouedkniss/requirements_ouedkniss.txt

Dépendances principales :

  • fastapi - Framework web
  • uvicorn - Serveur ASGI
  • python-telegram-bot - Client Telegram
  • python-multipart - Upload de fichiers
  • selenium - Automation navigateur (Ouedkniss)
  • webdriver-manager - Gestion ChromeDriver

⚙️ Configuration

Variables d'environnement (FastAPI)

Créer un fichier .env à la racine :

# Token Telegram Bot (requis)
TELEGRAM_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz

# Serveur (optionnel)
HOST=0.0.0.0
PORT=8000

Configuration Ouedkniss

Copier et configurer le fichier d'identifiants :

cp ouedkniss/config.example.py ouedkniss/config.py

Éditer ouedkniss/config.py :

OUEDKNISS_USERNAME = "votre_nom_utilisateur"
OUEDKNISS_PASSWORD = "votre_mot_de_passe"

Obtenir un token Telegram

  1. Ouvrir Telegram et chercher @BotFather
  2. Envoyer /newbot
  3. Suivre les instructions
  4. Copier le token fourni

🚀 Utilisation

Démarrage du serveur FastAPI

python main.py

Serveur accessible à : http://localhost:8000

Lancement de l'automation Ouedkniss (Standalone)

Mode autonome :

uv run python -m ouedkniss.main

Résultat attendu (5 étapes complètes) :

✅ Connexion réussie
✅ Navigation vers le formulaire
✅ Étape 1: Catégorie sélectionnée (Automobiles > Voitures)
✅ Étape 2: Description complétée (7 champs + Description)
✅ Étape 3: Prix configuré (Prix + Type d'offre + Échange)
✅ Étape 4: Contact renseigné (Wilaya + Commune + Email)
✅ Étape 5: Photos uploadées (17 images)
🎉 Publication réussie!
URL: https://www.ouedkniss.com/my/u/announcements/new
⏱️ Temps d'exécution: ~35 secondes

Mode API (recommandé pour n8n) :

Utiliser l'endpoint /publier-annonce-ouedkniss pour une intégration workflow complète (voir section API Endpoints)

API Interactive

Documentation Swagger : http://localhost:8000/docs


📡 APIs Disponibles

Telegram

Endpoint Méthode Description
/getlastmessage GET Récupère le dernier message
/getphotos GET Récupère les photos d'une conversation
/update_id_verificator POST Met à jour l'ID de vérification

Détails complets : documentation/TELEGRAM.md

Génération Vidéo

Endpoint Méthode Description
/create_video POST Génère une vidéo depuis des images

Détails complets : documentation/VIDEO.md


🐳 Déploiement

Docker Compose (Recommandé)

1. Configuration :

# Copier le fichier d'environnement
cp .env.example .env

# Éditer .env avec vos credentials
# TELEGRAM_TOKEN=...
# OUEDKNISS_USERNAME=...
# OUEDKNISS_PASSWORD=...

2. Démarrage :

# Build et lancer
docker-compose up -d

# Voir les logs
docker-compose logs -f

# Arrêter
docker-compose down

Docker Manuel

Build l'image :

docker build -t nextcar-api .

Lancer le conteneur :

docker run -d -p 8000:8000 `
  -e TELEGRAM_TOKEN=your_token `
  -e OUEDKNISS_USERNAME=your_email `
  -e OUEDKNISS_PASSWORD=your_password `
  -v ${PWD}/videos:/app/videos `
  -v ${PWD}/image_uploaded:/app/image_uploaded `
  --shm-size=2gb `
  --name nextcar `
  nextcar-api

Cloud Deployment

Plateformes supportées :

  • ✅ Render.com
  • ✅ Railway.app
  • ✅ DigitalOcean App Platform
  • ✅ AWS ECS
  • ✅ Google Cloud Run

Guide complet : DEPLOYMENT.md


📚 Documentation


⚡ Performances

Optimisations Ouedkniss

L'automation a été optimisée pour une exécution 40% plus rapide :

Métrique Avant Après Gain
Temps total 60-70s ~35s -40%
Initialisation 2s 1.2-1.5s -25%
Interactions 1s 0.3s -70%
Upload images 5s 2s -60%
Micro-attentes 0.5s 0.2s -60%

Stratégie appliquée :

  • Réduction intelligente des time.sleep()
  • Maintien de la stabilité (pas d'erreurs "element not interactable")
  • Optimisation des temps critiques (initialisation, uploads)
  • Tests de régression sur les 5 étapes

🏗️ Architecture

Structure du projet

Next Car/
├── main.py                    # Serveur FastAPI principal
├── telegram_bot/              # 📁 Module Telegram
│   ├── __init__.py
│   └── telegram_trigger.py    # Intégration Telegram bot
├── video/                     # 📁 Module Vidéo
│   ├── __init__.py
│   ├── video_generator.py     # Module FFmpeg bas niveau
│   └── video_workflow.py      # Logique métier vidéo
├── ouedkniss/                 # 📁 Module Ouedkniss
│   ├── __init__.py            # Package initialization
│   ├── main.py                # Script principal + fonction API
│   ├── config.py              # Configuration (identifiants)
│   ├── config.example.py      # Exemple de configuration
│   ├── browser.py             # Gestion navigateur Chrome
│   ├── auth.py                # Authentification Ouedkniss
│   ├── navigation.py          # Navigation sur le site
│   ├── category.py            # Étape 1: Sélection catégorie
│   ├── form.py                # Étape 2: Description (7 champs)
│   ├── price.py               # Étape 3: Prix & tarification
│   ├── contact.py             # Étape 4: Contact & localisation
│   ├── media.py               # Étape 5: Upload photos
│   ├── requirements_ouedkniss.txt
│   ├── debug_tools/           # Outils de débogage Vuetify
│   └── images/                # Images de test (17 photos)
├── image_uploaded/            # Images workflow (utilisées par API)
├── videos/                    # Vidéos générées (auto-cleanup)
├── test_simple.py             # Test local génération vidéo
├── users_state.json           # État Telegram (auto-généré)
├── pyproject.toml             # Configuration projet Python
├── uv.lock                    # Lock file uv
├── Dockerfile                 # Image Docker
├── .gitignore                 # Exclusions Git
├── README.md                  # Ce fichier
└── documentation/
    ├── TELEGRAM.md            # Doc Telegram
    ├── VIDEO.md               # Doc vidéo
    └── OUEDKNISS.md           # Doc Ouedkniss automation

Architecture technique

┌─────────────────────────────────────┐
│         FastAPI Server              │
│         (main.py)                   │
├─────────────────────────────────────┤
│                                     │
│  ┌─────────────┐  ┌──────────────┐ │
│  │  Telegram   │  │    Vidéo     │ │
│  │   APIs      │  │     API      │ │
│  └─────────────┘  └──────────────┘ │
│         │                 │         │
│         ↓                 ↓         │
│  ┌─────────────┐  ┌──────────────┐ │
│  │ telegram/   │  │   video/     │ │
│  │ trigger     │  │  workflow    │ │
│  └─────────────┘  └──────────────┘ │
│                          │          │
│  ┌─────────────┐         ↓          │
│  │ Ouedkniss   │  ┌──────────────┐ │
│  │   API       │  │   video/     │ │
│  └─────────────┘  │  generator   │ │
│         │          └──────────────┘ │
│         ↓                 │         │
│  ┌─────────────┐          ↓         │
│  │ ouedkniss/  │     ┌─────────┐   │
│  │   main.py   │     │ FFmpeg  │   │
│  └─────────────┘     └─────────┘   │
│         │                           │
│         ↓                           │
│  ┌─────────────┐                   │
│  │  Selenium   │                   │
│  │  + Chrome   │                   │
│  └─────────────┘                   │
└─────────────────────────────────────┘

Flux de données

Telegram :

Bot Telegram → telegram/trigger → users_state.json
                      ↑
                      │
            FastAPI Endpoints
                      ↓
                  Client (n8n)

Vidéo (workflow n8n validé ✅) :

n8n Loop → Google Drive Download → POST /upload_image (x4)
                                          ↓
                                   ./image_uploaded/
                                          ↓
                              POST /create_video?quality=high
                                          ↓
                            video/workflow → video/generator
                                          ↓
                                      FFmpeg
                                          ↓
                                   ./videos/*.mp4
                                          ↓
                              FileResponse → n8n
                                          ↓
                          Auto-cleanup (2s delay)

Ouedkniss (automation complète ✅) :

POST /publier-annonce-ouedkniss (vehicle_data)
                ↓
       ouedkniss/main.py
                ↓
        publish_ouedkniss_annonce()
                ↓
    ┌───────────┴───────────┐
    ↓                       ↓
Selenium + Chrome    ./image_uploaded/
    ↓
┌───────────────────────────────┐
│ 1. auth.py (connexion)        │
│ 2. navigation.py (formulaire) │
│ 3. category.py (catégorie)    │
│ 4. form.py (description)      │
│ 5. price.py (prix)            │
│ 6. contact.py (localisation)  │
│ 7. media.py (photos)          │
└───────────────────────────────┘
    ↓
Publication réussie (~35s)
    ↓
{'success': True, 'message': '...', 'url': '...'}

🧪 Tests

Test local génération vidéo

python test_simple.py

Résultat : ma_video.mp4 dans le dossier courant

Test API avec curl

Telegram :

curl http://localhost:8000/getlastmessage

Vidéo :

curl -X POST http://localhost:8000/create_video?quality=high \
  -F "files=@test_images/IMG-20251012-WA0001.jpg" \
  -F "files=@test_images/IMG-20251012-WA0002.jpg" \
  -o video.mp4

Ouedkniss (PowerShell) :

$body = @{
    annee = "2015"
    marque = "Renault"
    modele = "Clio 4"
    kilometrage = "85000"
    energie = "Diesel"
    boite = "Manuelle"
    papiers = "Carte grise / safia"
    description = "Très bon état, entretien régulier"
    prix = "1200000"
    type_offre = "Négociable"
    echange = "Pas d'échanges"
    wilaya = "Alger"
    commune = "Bab Ezzouar"
    email = "contact@example.com"
} | ConvertTo-Json

Invoke-RestMethod -Uri "http://localhost:8000/publier-annonce-ouedkniss" `
  -Method POST `
  -ContentType "application/json" `
  -Body $body

🐛 Debugging

Logs

Le serveur affiche des logs détaillés :

[19:37:45] 📱 Démarrage du bot Telegram...
[19:37:45] ✅ Bot connecté : @YourBot
[19:37:46] 🚀 Serveur FastAPI démarré sur http://0.0.0.0:8000

Vérifications

FFmpeg installé ?

ffmpeg -version

Token Telegram valide ?

curl "https://api.telegram.org/bot<YOUR_TOKEN>/getMe"

Port occupé ?

netstat -ano | findstr :8000

🔧 Maintenance

Nettoyage manuel

Les fichiers temporaires sont nettoyés automatiquement, mais en cas de besoin :

# Supprimer dossiers temporaires
Remove-Item -Recurse -Force temp_images_*

# Supprimer vidéos générées
Remove-Item -Recurse -Force videos/

Réinitialisation état Telegram

Remove-Item users_state.json

Au prochain démarrage, l'état sera recréé.


📝 Licence

Projet privé - Tous droits réservés


👨‍💻 Support

Pour questions ou problèmes :


Dernière mise à jour : 16 Octobre 2025

About

🚗 Next Car - Automated Marketplace Workflow Platform | FastAPI + Telegram Bot + Ouedkniss Automation + AI Video Generator | Complete n8n-ready REST APIs for vehicle listing, message polling, and intelligent image-to-video conversion with FFmpeg

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors