Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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"""
|