Spaces:
Running
Running
Upload 7 files
Browse files- public/index.html +4 -0
- public/script.js +9 -5
- public/style.css +9 -0
- server.js +11 -1
public/index.html
CHANGED
@@ -15,6 +15,10 @@
|
|
15 |
Cette application utilise un algorithme JavaScript exécuté dans votre navigateur
|
16 |
pour résumer le contenu textuel (transcription) d'une vidéo YouTube.
|
17 |
</p>
|
|
|
|
|
|
|
|
|
18 |
|
19 |
<label for="youtube-url">URL de la vidéo YouTube :</label>
|
20 |
<input type="text" id="youtube-url" placeholder="Ex: https://www.youtube.com/watch?v=dQw4w9WgXcQ">
|
|
|
15 |
Cette application utilise un algorithme JavaScript exécuté dans votre navigateur
|
16 |
pour résumer le contenu textuel (transcription) d'une vidéo YouTube.
|
17 |
</p>
|
18 |
+
|
19 |
+
<div class="info-box">
|
20 |
+
<p><strong>Important :</strong> Cette application fonctionne uniquement avec les vidéos YouTube qui ont des sous-titres/transcriptions disponibles (activés par le créateur ou générés automatiquement).</p>
|
21 |
+
</div>
|
22 |
|
23 |
<label for="youtube-url">URL de la vidéo YouTube :</label>
|
24 |
<input type="text" id="youtube-url" placeholder="Ex: https://www.youtube.com/watch?v=dQw4w9WgXcQ">
|
public/script.js
CHANGED
@@ -108,10 +108,14 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
108 |
const data = await response.json();
|
109 |
|
110 |
if (!response.ok) {
|
111 |
-
// Afficher l'erreur détaillée si disponible
|
112 |
-
|
113 |
-
|
114 |
-
|
|
|
|
|
|
|
|
|
115 |
throw new Error(errorMessage);
|
116 |
}
|
117 |
|
@@ -145,7 +149,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
145 |
}
|
146 |
|
147 |
function showError(message) {
|
148 |
-
errorDiv.
|
149 |
errorDiv.style.display = 'block';
|
150 |
}
|
151 |
|
|
|
108 |
const data = await response.json();
|
109 |
|
110 |
if (!response.ok) {
|
111 |
+
// Afficher l'erreur détaillée si disponible avec la solution si fournie
|
112 |
+
let errorMessage = data.error || `Erreur HTTP: ${response.status}`;
|
113 |
+
if (data.details) {
|
114 |
+
errorMessage += ` Détails: ${data.details}`;
|
115 |
+
}
|
116 |
+
if (data.solution) {
|
117 |
+
errorMessage += `\n💡 Solution: ${data.solution}`;
|
118 |
+
}
|
119 |
throw new Error(errorMessage);
|
120 |
}
|
121 |
|
|
|
149 |
}
|
150 |
|
151 |
function showError(message) {
|
152 |
+
errorDiv.innerHTML = message.replace(/\n/g, '<br>');
|
153 |
errorDiv.style.display = 'block';
|
154 |
}
|
155 |
|
public/style.css
CHANGED
@@ -71,6 +71,15 @@ button:hover {
|
|
71 |
border-radius: 4px;
|
72 |
}
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
#loading {
|
75 |
text-align: center;
|
76 |
padding: 10px;
|
|
|
71 |
border-radius: 4px;
|
72 |
}
|
73 |
|
74 |
+
.info-box {
|
75 |
+
background-color: #e6f7ff;
|
76 |
+
border: 1px solid #91d5ff;
|
77 |
+
color: #1890ff;
|
78 |
+
padding: 10px;
|
79 |
+
margin: 15px 0;
|
80 |
+
border-radius: 4px;
|
81 |
+
}
|
82 |
+
|
83 |
#loading {
|
84 |
text-align: center;
|
85 |
padding: 10px;
|
server.js
CHANGED
@@ -66,6 +66,7 @@ app.get('/get-transcript', async (req, res) => {
|
|
66 |
name: error.name
|
67 |
});
|
68 |
|
|
|
69 |
if (error.message && error.message.includes('Could not find transcripts')) {
|
70 |
return res.status(404).json({ error: "Aucune transcription disponible pour cette vidéo (elles sont peut-être désactivées ou n'existent pas en auto-généré)." });
|
71 |
}
|
@@ -76,7 +77,16 @@ app.get('/get-transcript', async (req, res) => {
|
|
76 |
return res.status(504).json({ error: 'Délai d\'attente dépassé lors de la récupération de la transcription. Veuillez réessayer.' });
|
77 |
}
|
78 |
|
79 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
res.status(500).json({
|
81 |
error: 'Erreur interne du serveur lors de la récupération de la transcription.',
|
82 |
details: error.message
|
|
|
66 |
name: error.name
|
67 |
});
|
68 |
|
69 |
+
// Gestion des cas d'erreur spécifiques
|
70 |
if (error.message && error.message.includes('Could not find transcripts')) {
|
71 |
return res.status(404).json({ error: "Aucune transcription disponible pour cette vidéo (elles sont peut-être désactivées ou n'existent pas en auto-généré)." });
|
72 |
}
|
|
|
77 |
return res.status(504).json({ error: 'Délai d\'attente dépassé lors de la récupération de la transcription. Veuillez réessayer.' });
|
78 |
}
|
79 |
|
80 |
+
// Nouvelle gestion spécifique pour les transcriptions désactivées
|
81 |
+
if (error.message && error.message.includes('Transcript is disabled')) {
|
82 |
+
const videoId = error.message.match(/\(([^)]+)\)/)?.[1] || "cette vidéo";
|
83 |
+
return res.status(404).json({
|
84 |
+
error: `Les sous-titres/transcriptions sont désactivés sur cette vidéo (ID: ${videoId}).`,
|
85 |
+
solution: "Essayez une autre vidéo qui possède des sous-titres activés."
|
86 |
+
});
|
87 |
+
}
|
88 |
+
|
89 |
+
// Message d'erreur plus détaillé pour les autres cas
|
90 |
res.status(500).json({
|
91 |
error: 'Erreur interne du serveur lors de la récupération de la transcription.',
|
92 |
details: error.message
|