1
0

test_opengraph.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env python
  2. """
  3. Script de test pour valider les métadonnées Open Graph
  4. Lance le serveur Django et teste les métadonnées d'un article
  5. """
  6. import os
  7. import sys
  8. import django
  9. # Configuration Django
  10. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings')
  11. django.setup()
  12. from blog.models import Blog
  13. from blog.seo_helpers import SEOMetadata
  14. from django.test import RequestFactory
  15. import json
  16. def test_article_metadata():
  17. """Teste les métadonnées d'un article"""
  18. # Récupérer le premier article publié
  19. try:
  20. article = Blog.objects.filter(b_publier=True).first()
  21. if not article:
  22. print("❌ Aucun article publié trouvé dans la base de données")
  23. return False
  24. print(f"\n📝 Test des métadonnées pour : {article.b_titre}")
  25. print("=" * 80)
  26. # Créer une fausse requête
  27. factory = RequestFactory()
  28. request = factory.get(f'/blog/{article.b_titre_slugify}/')
  29. # Générer les métadonnées
  30. seo_helper = SEOMetadata(request, article)
  31. metadata = seo_helper.get_blog_metadata(article)
  32. # Validation des métadonnées essentielles
  33. checks = {
  34. 'Titre': metadata.get('title'),
  35. 'Description': metadata.get('description'),
  36. 'URL Canonique': metadata.get('canonical_url'),
  37. 'Image': metadata.get('image'),
  38. 'Image Alt': metadata.get('image_alt'),
  39. }
  40. print("\n✅ Métadonnées de base :")
  41. for key, value in checks.items():
  42. status = "✓" if value else "✗"
  43. print(f" {status} {key}: {value[:80] if value else 'MANQUANT'}...")
  44. # Validation Open Graph
  45. og = metadata.get('og', {})
  46. print("\n✅ Open Graph (Facebook) :")
  47. og_checks = {
  48. 'Type': og.get('type'),
  49. 'Titre': og.get('title'),
  50. 'Description': og.get('description'),
  51. 'URL': og.get('url'),
  52. 'Image': og.get('image'),
  53. 'Image Alt': og.get('image:alt'),
  54. 'Image Width': og.get('image:width'),
  55. 'Image Height': og.get('image:height'),
  56. 'Site Name': og.get('site_name'),
  57. 'Locale': og.get('locale'),
  58. }
  59. for key, value in og_checks.items():
  60. status = "✓" if value else "✗"
  61. print(f" {status} {key}: {value}")
  62. # Validation Twitter Card
  63. twitter = metadata.get('twitter', {})
  64. print("\n✅ Twitter Card :")
  65. twitter_checks = {
  66. 'Card Type': twitter.get('card'),
  67. 'Titre': twitter.get('title'),
  68. 'Description': twitter.get('description'),
  69. 'Image': twitter.get('image'),
  70. 'Image Alt': twitter.get('image:alt'),
  71. 'Site': twitter.get('site'),
  72. 'Creator': twitter.get('creator'),
  73. }
  74. for key, value in twitter_checks.items():
  75. status = "✓" if value else "✗"
  76. print(f" {status} {key}: {value}")
  77. # Validation Schema.org
  78. schema = metadata.get('schema', {})
  79. print("\n✅ Schema.org (JSON-LD) :")
  80. schema_checks = {
  81. '@type': schema.get('@type'),
  82. 'headline': schema.get('headline'),
  83. 'datePublished': schema.get('datePublished'),
  84. 'dateModified': schema.get('dateModified'),
  85. 'author': schema.get('author', {}).get('name'),
  86. 'publisher': schema.get('publisher', {}).get('name'),
  87. }
  88. for key, value in schema_checks.items():
  89. status = "✓" if value else "✗"
  90. print(f" {status} {key}: {value}")
  91. # Afficher le JSON complet pour debug
  92. print("\n📋 JSON-LD complet :")
  93. print(json.dumps(schema, indent=2, ensure_ascii=False))
  94. # Liens de test
  95. print("\n🔗 Testez vos métadonnées avec ces outils :")
  96. article_url = f"https://www.duhaz.fr/blog/{article.b_titre_slugify}/"
  97. print(f" • Facebook Debugger: https://developers.facebook.com/tools/debug/?q={article_url}")
  98. print(f" • Twitter Validator: https://cards-dev.twitter.com/validator")
  99. print(f" • LinkedIn Inspector: https://www.linkedin.com/post-inspector/inspect/{article_url}")
  100. print(f" • OpenGraph Check: https://opengraphcheck.com/result.php?url={article_url}")
  101. print("\n" + "=" * 80)
  102. print("✅ Test terminé avec succès !")
  103. return True
  104. except Exception as e:
  105. print(f"\n❌ Erreur lors du test : {str(e)}")
  106. import traceback
  107. traceback.print_exc()
  108. return False
  109. def list_all_articles():
  110. """Liste tous les articles disponibles"""
  111. articles = Blog.objects.filter(b_publier=True).order_by('-b_publdate')
  112. print("\n📚 Articles disponibles :")
  113. print("=" * 80)
  114. for i, article in enumerate(articles[:10], 1):
  115. has_image = "🖼️ " if article.b_description_img else "📄 "
  116. print(f"{i}. {has_image}{article.b_titre}")
  117. print(f" URL: /blog/{article.b_titre_slugify}/")
  118. print(f" Catégories: {', '.join([cat.cb_titre for cat in article.b_cat.all()])}")
  119. print()
  120. if __name__ == '__main__':
  121. print("\n🧪 Test des métadonnées Open Graph - Blog Duhaz")
  122. if len(sys.argv) > 1 and sys.argv[1] == 'list':
  123. list_all_articles()
  124. else:
  125. success = test_article_metadata()
  126. sys.exit(0 if success else 1)