| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #!/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)
|