#!/usr/bin/env python """ Script de test pour valider les métadonnées Open Graph Lance le serveur Django et teste les métadonnées d'un article """ import os import sys import django # Configuration Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings') django.setup() from blog.models import Blog from blog.seo_helpers import SEOMetadata from django.test import RequestFactory import json def test_article_metadata(): """Teste les métadonnées d'un article""" # Récupérer le premier article publié try: article = Blog.objects.filter(b_publier=True).first() if not article: print("❌ Aucun article publié trouvé dans la base de données") return False print(f"\n📝 Test des métadonnées pour : {article.b_titre}") print("=" * 80) # Créer une fausse requête factory = RequestFactory() request = factory.get(f'/blog/{article.b_titre_slugify}/') # Générer les métadonnées seo_helper = SEOMetadata(request, article) metadata = seo_helper.get_blog_metadata(article) # Validation des métadonnées essentielles checks = { 'Titre': metadata.get('title'), 'Description': metadata.get('description'), 'URL Canonique': metadata.get('canonical_url'), 'Image': metadata.get('image'), 'Image Alt': metadata.get('image_alt'), } print("\n✅ Métadonnées de base :") for key, value in checks.items(): status = "✓" if value else "✗" print(f" {status} {key}: {value[:80] if value else 'MANQUANT'}...") # Validation Open Graph og = metadata.get('og', {}) print("\n✅ Open Graph (Facebook) :") og_checks = { 'Type': og.get('type'), 'Titre': og.get('title'), 'Description': og.get('description'), 'URL': og.get('url'), 'Image': og.get('image'), 'Image Alt': og.get('image:alt'), 'Image Width': og.get('image:width'), 'Image Height': og.get('image:height'), 'Site Name': og.get('site_name'), 'Locale': og.get('locale'), } for key, value in og_checks.items(): status = "✓" if value else "✗" print(f" {status} {key}: {value}") # Validation Twitter Card twitter = metadata.get('twitter', {}) print("\n✅ Twitter Card :") twitter_checks = { 'Card Type': twitter.get('card'), 'Titre': twitter.get('title'), 'Description': twitter.get('description'), 'Image': twitter.get('image'), 'Image Alt': twitter.get('image:alt'), 'Site': twitter.get('site'), 'Creator': twitter.get('creator'), } for key, value in twitter_checks.items(): status = "✓" if value else "✗" print(f" {status} {key}: {value}") # Validation Schema.org schema = metadata.get('schema', {}) print("\n✅ Schema.org (JSON-LD) :") schema_checks = { '@type': schema.get('@type'), 'headline': schema.get('headline'), 'datePublished': schema.get('datePublished'), 'dateModified': schema.get('dateModified'), 'author': schema.get('author', {}).get('name'), 'publisher': schema.get('publisher', {}).get('name'), } for key, value in schema_checks.items(): status = "✓" if value else "✗" print(f" {status} {key}: {value}") # Afficher le JSON complet pour debug print("\n📋 JSON-LD complet :") print(json.dumps(schema, indent=2, ensure_ascii=False)) # Liens de test print("\n🔗 Testez vos métadonnées avec ces outils :") article_url = f"https://www.duhaz.fr/blog/{article.b_titre_slugify}/" print(f" • Facebook Debugger: https://developers.facebook.com/tools/debug/?q={article_url}") print(f" • Twitter Validator: https://cards-dev.twitter.com/validator") print(f" • LinkedIn Inspector: https://www.linkedin.com/post-inspector/inspect/{article_url}") print(f" • OpenGraph Check: https://opengraphcheck.com/result.php?url={article_url}") print("\n" + "=" * 80) print("✅ Test terminé avec succès !") return True except Exception as e: print(f"\n❌ Erreur lors du test : {str(e)}") import traceback traceback.print_exc() return False def list_all_articles(): """Liste tous les articles disponibles""" articles = Blog.objects.filter(b_publier=True).order_by('-b_publdate') print("\n📚 Articles disponibles :") print("=" * 80) for i, article in enumerate(articles[:10], 1): has_image = "🖼️ " if article.b_description_img else "📄 " print(f"{i}. {has_image}{article.b_titre}") print(f" URL: /blog/{article.b_titre_slugify}/") print(f" Catégories: {', '.join([cat.cb_titre for cat in article.b_cat.all()])}") print() if __name__ == '__main__': print("\n🧪 Test des métadonnées Open Graph - Blog Duhaz") if len(sys.argv) > 1 and sys.argv[1] == 'list': list_all_articles() else: success = test_article_metadata() sys.exit(0 if success else 1)