Extracteur d'images HTML pour tickets Odoo
Ce module est conçu pour extraire les images intégrées dans les messages HTML des tickets Odoo. Il complète l'extracteur d'images standard existant pour assurer que toutes les images, y compris celles référencées uniquement dans le HTML des messages, sont correctement extraites.
Problématique
Dans certains tickets Odoo, les images apparaissent dans le HTML des messages mais ne sont pas correctement détectées par l'extracteur d'images standard, en particulier lorsqu'elles sont référencées avec des balises <img> pointant vers des URLs comme /web/image/ID?access_token=....
Ce module analyse le HTML des messages pour détecter ces références et les associer aux pièces jointes correspondantes, permettant ainsi d'extraire toutes les images associées à un ticket.
Installation
Le module est conçu pour être intégré dans le projet existant et ne nécessite pas d'installation particulière. Il utilise cependant BeautifulSoup pour l'analyse HTML.
Si cette dépendance n'est pas déjà installée :
pip install beautifulsoup4
Utilisation
Utilisation simple
Pour extraire les images intégrées dans le HTML d'un ticket :
from utils.image_extractor import extract_images_from_ticket
# Chemin vers le répertoire du ticket
ticket_dir = "output/ticket_T0241/T0241_20250409_141018"
# Extraire les images intégrées dans le HTML
embedded_images = extract_images_from_ticket(ticket_dir)
# Afficher les chemins des images
for img in embedded_images:
print(f"Image trouvée: {img}")
Intégration complète
Pour intégrer l'extracteur HTML avec l'extracteur standard existant :
from utils.image_extractor.extract_all_images import enhance_ticket_data_with_images
# Données du ticket (contenant au minimum 'ticket_dir' et 'attachments')
ticket_data = {
"ticket_dir": "output/ticket_T0241/T0241_20250409_141018",
"attachments": [...] # Liste des pièces jointes
}
# Enrichir les données du ticket avec toutes les images
enhanced_data = enhance_ticket_data_with_images(ticket_data)
# Accéder aux images combinées
all_images = enhanced_data.get("images", [])
standard_images = enhanced_data.get("standard_images", [])
embedded_images = enhanced_data.get("embedded_images", [])
Script d'extraction complet
Un script utilitaire complet est également disponible :
python -m utils.image_extractor.extract_ticket_images /chemin/vers/repertoire/ticket --verbose
Exemples
Le répertoire examples contient un exemple d'utilisation de l'extracteur sur le ticket T0241, qui présente des cas d'images intégrées dans le HTML.
python -m utils.image_extractor.examples.extract_t0241_images
Structure du module
html_image_extractor.py: Extracteur d'images HTML principalextract_all_images.py: Module combinant l'extracteur HTML et l'extracteur standardextract_ticket_images.py: Script utilitaire pour l'extraction d'imagesexamples/: Exemples d'utilisation
Fonctionnement technique
- L'extracteur charge les messages du ticket depuis
messages_raw.json - Il analyse le HTML des messages avec BeautifulSoup
- Il détecte les balises
<img>avec des attributssrcpointant vers/web/image/ID - Il récupère l'ID de l'image et le lie aux pièces jointes disponibles dans
attachments_info.json - Il génère une liste des chemins locaux des images intégrées
Avantages
- Non intrusif : Fonctionne en complément de l'extracteur existant, sans le modifier
- Robuste : Gère différents formats de références d'images
- Configurable : Peut être utilisé indépendamment ou intégré au flux de traitement existant
- Déduplication : Évite les doublons entre les images standard et intégrées
Limitations
- Nécessite que les pièces jointes référencées soient disponibles dans
attachments_info.json - Dépend de BeautifulSoup pour l'analyse HTML