1
0

generate_sitemap_preview.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env python3
  2. """
  3. Script pour générer et vérifier le sitemap XML
  4. Utile pour debug avant mise en production
  5. """
  6. import os
  7. import sys
  8. from pathlib import Path
  9. from datetime import datetime
  10. # Ajouter le répertoire parent au path
  11. sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
  12. # Configuration Django
  13. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings')
  14. import django
  15. django.setup()
  16. from django.contrib.sitemaps import views
  17. from django.test import RequestFactory
  18. from blog.sitemaps import BlogSitemap, CategorySitemap, PageSitemap, StaticViewSitemap
  19. def generate_sitemap_preview():
  20. """Génère un aperçu du sitemap XML"""
  21. print("\n" + "="*70)
  22. print("GÉNÉRATION DU SITEMAP XML")
  23. print("="*70 + "\n")
  24. # Créer une fausse requête
  25. factory = RequestFactory()
  26. request = factory.get('/sitemap.xml')
  27. # Sitemaps configurés
  28. sitemaps = {
  29. 'blog': BlogSitemap,
  30. 'categories': CategorySitemap,
  31. 'pages': PageSitemap,
  32. 'static': StaticViewSitemap,
  33. }
  34. try:
  35. # Générer le sitemap
  36. response = views.sitemap(request, sitemaps)
  37. # IMPORTANT : Rendre la réponse avant d'accéder au contenu
  38. response.render()
  39. # Sauvegarder dans un fichier de preview
  40. output_file = Path(__file__).parent.parent / 'static' / 'sitemap_preview.xml'
  41. with open(output_file, 'wb') as f:
  42. f.write(response.content)
  43. print(f"✅ Sitemap généré avec succès !")
  44. print(f"📄 Fichier : {output_file}")
  45. print(f"📏 Taille : {len(response.content)} bytes")
  46. # Compter les URLs
  47. content_str = response.content.decode('utf-8')
  48. url_count = content_str.count('<url>')
  49. print(f"🔗 Nombre d'URLs : {url_count}")
  50. # Afficher un extrait
  51. print("\n" + "="*70)
  52. print("EXTRAIT DU SITEMAP (premières lignes)")
  53. print("="*70)
  54. lines = content_str.split('\n')[:20]
  55. for line in lines:
  56. print(line)
  57. print("\n...")
  58. print(f"\n(Voir le fichier complet : {output_file})")
  59. return True
  60. except Exception as e:
  61. print(f"❌ Erreur lors de la génération : {e}")
  62. import traceback
  63. traceback.print_exc()
  64. return False
  65. if __name__ == "__main__":
  66. generate_sitemap_preview()