Adjoumani commited on
Commit
084d8ba
·
verified ·
1 Parent(s): f3288f8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -22
app.py CHANGED
@@ -771,7 +771,7 @@ def enhance_main():
771
 
772
  ### **Comment utiliser l'application ?**
773
  1. **Documents** 📄 :
774
- - **Formats supportés** : `.pdf`, `.docx`, `.pptx`
775
  - Chargez un document via le bouton **"Télécharger un fichier"**.
776
  - ⚠️ **Remarque** : Les documents contenant plus de **10 pages** peuvent entraîner des résultats imprécis en raison des limitations des modèles d'IA.
777
 
@@ -862,20 +862,29 @@ def handle_video_input():
862
  def handle_youtube_input():
863
  """Gestion des entrées YouTube"""
864
  youtube_url = st.text_input("URL YouTube")
865
- if youtube_url and st.button("Analyser"):
866
- video_processor = VideoProcessor()
867
- video_id = video_processor.extract_video_id(youtube_url)
868
-
869
- if video_id:
870
- st.video(youtube_url)
871
- with st.spinner("Traitement de la vidéo..."):
872
- transcription = video_processor.get_youtube_transcription(video_id)
873
- if transcription:
874
- process_and_display_results(None, None, transcription)
875
- else:
876
- video_processor.load_cookies()
877
- audio_path = video_processor.download_youtube_audio(youtube_url)
878
- process_and_display_results(audio_path)
 
 
 
 
 
 
 
 
 
879
 
880
  def process_and_display_results(file_path=None, audio_bytes=None, transcription=None):
881
  """Traitement et affichage des résultats"""
@@ -1036,12 +1045,8 @@ def process_document():
1036
  text = process_document_with_password(file, password, doc_processor)
1037
  if text:
1038
  summary = doc_processor.summarize_text(text)
1039
- # Génération et téléchargement des documents
1040
- #generate_and_download_documents(summary)
1041
 
1042
- # Option d'envoi par email
1043
- handle_email_sending(summary)
1044
- #display_summary_and_downloads(summary)
1045
  except ValueError as e:
1046
  st.error(str(e))
1047
 
@@ -1087,8 +1092,60 @@ def process_web():
1087
  except ValueError as e:
1088
  st.error(str(e))
1089
 
1090
-
1091
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1092
 
1093
  def save_audio_bytes(audio_bytes: bytes) -> str:
1094
  """Sauvegarde les bytes audio dans un fichier temporaire"""
 
771
 
772
  ### **Comment utiliser l'application ?**
773
  1. **Documents** 📄 :
774
+ - **Formats supportés** : `.pdf`, `.docx`, `.pptx`, `.txt`
775
  - Chargez un document via le bouton **"Télécharger un fichier"**.
776
  - ⚠️ **Remarque** : Les documents contenant plus de **10 pages** peuvent entraîner des résultats imprécis en raison des limitations des modèles d'IA.
777
 
 
862
  def handle_youtube_input():
863
  """Gestion des entrées YouTube"""
864
  youtube_url = st.text_input("URL YouTube")
865
+
866
+ if youtube_url:
867
+ if not re.match(r'^https?://(?:www\.)?youtube\.com/watch\?v=[\w-]+|^https?://youtu\.be/[\w-]+', youtube_url):
868
+ st.error("URL YouTube invalide")
869
+ else:
870
+ video_processor = VideoProcessor()
871
+ video_id = video_processor.extract_video_id(youtube_url)
872
+ if video_id:
873
+ st.video(youtube_url)
874
+
875
+ with st.spinner("Récupération du contenu de la vidéo..."):
876
+ # Essayer d'abord d'obtenir la transcription
877
+ transcription = video_processor.get_youtube_transcription(video_id)
878
+
879
+ if transcription:
880
+ st.success("Transcription YouTube trouvée!")
881
+ process_and_display_results(None, None, transcription)
882
+ else:
883
+ st.info("Pas de transcription disponible. Extraction de l'audio...")
884
+ video_processor.load_cookies()
885
+ audio_path = video_processor.download_youtube_audio(youtube_url)
886
+ process_and_display_results(audio_path)
887
+
888
 
889
  def process_and_display_results(file_path=None, audio_bytes=None, transcription=None):
890
  """Traitement et affichage des résultats"""
 
1045
  text = process_document_with_password(file, password, doc_processor)
1046
  if text:
1047
  summary = doc_processor.summarize_text(text)
 
 
1048
 
1049
+ display_summary_and_downloads(summary)
 
 
1050
  except ValueError as e:
1051
  st.error(str(e))
1052
 
 
1092
  except ValueError as e:
1093
  st.error(str(e))
1094
 
1095
+ def display_summary_and_downloads(summary: str):
1096
+ """Affichage du résumé et options de téléchargement"""
1097
+ st.markdown("### 📝 Résumé et Analyse")
1098
+ st.markdown(summary)
1099
+
1100
+ timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
1101
+
1102
+ # Génération PDF
1103
+ pdf_filename = f"resume_{timestamp}.pdf"
1104
+ pdf_path = PDFGenerator.create_pdf(summary, pdf_filename)
1105
+
1106
+ # Génération DOCX
1107
+ docx_filename = f"resume_{timestamp}.docx"
1108
+ docx_path = generate_docx(summary, docx_filename)
1109
+
1110
+ # Boutons de téléchargement
1111
+ col1, col2 = st.columns(2)
1112
+ with col1:
1113
+ with open(pdf_path, "rb") as pdf_file:
1114
+ st.download_button(
1115
+ "📥 Télécharger PDF",
1116
+ pdf_file,
1117
+ file_name=pdf_filename,
1118
+ mime="application/pdf"
1119
+ )
1120
+
1121
+ with col2:
1122
+ with open(docx_path, "rb") as docx_file:
1123
+ st.download_button(
1124
+ "📥 Télécharger DOCX",
1125
+ docx_file,
1126
+ file_name=docx_filename,
1127
+ mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
1128
+ )
1129
+
1130
+ # Option d'envoi par email
1131
+ st.markdown("### 📧 Recevoir le résumé par email")
1132
+ recipient_email = st.text_input("Entrez votre adresse email:")
1133
+
1134
+ if st.button("Envoyer par email"):
1135
+ if not is_valid_email(recipient_email):
1136
+ st.error("Veuillez entrer une adresse email valide.")
1137
+ else:
1138
+ with st.spinner("Envoi de l'email en cours..."):
1139
+ email_sender = EmailSender(Config.SENDER_EMAIL, Config.SENDER_PASSWORD)
1140
+ if email_sender.send_email(
1141
+ recipient_email,
1142
+ "Résumé de votre contenu",
1143
+ "Veuillez trouver ci-joint le résumé de votre contenu.",
1144
+ pdf_path
1145
+ ):
1146
+ st.success("Email envoyé avec succès!")
1147
+ else:
1148
+ st.error("Échec de l'envoi de l'email.")
1149
 
1150
  def save_audio_bytes(audio_bytes: bytes) -> str:
1151
  """Sauvegarde les bytes audio dans un fichier temporaire"""