j-r-b commited on
Commit
dd3436e
·
verified ·
1 Parent(s): c29c9e5

Upload 7 files

Browse files
Files changed (3) hide show
  1. Dockerfile +11 -4
  2. public/script.js +6 -2
  3. server.js +27 -3
Dockerfile CHANGED
@@ -2,11 +2,18 @@ FROM node:18-slim
2
 
3
  WORKDIR /app
4
 
 
 
 
 
 
 
 
5
  # Copy package files
6
  COPY package.json ./
7
 
8
- # Install dependencies
9
- RUN npm install
10
 
11
  # Copy application files
12
  COPY server.js ./
@@ -15,5 +22,5 @@ COPY public ./public
15
  # Expose the port
16
  EXPOSE 7860
17
 
18
- # Start the server
19
- CMD ["node", "server.js"]
 
2
 
3
  WORKDIR /app
4
 
5
+ # Installation des dépendances système nécessaires
6
+ RUN apt-get update && apt-get install -y \
7
+ python3 \
8
+ python3-pip \
9
+ build-essential \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
  # Copy package files
13
  COPY package.json ./
14
 
15
+ # Install dependencies with increased network timeout
16
+ RUN npm install --network-timeout=100000
17
 
18
  # Copy application files
19
  COPY server.js ./
 
22
  # Expose the port
23
  EXPOSE 7860
24
 
25
+ # Start the server with increased debugging
26
+ CMD ["node", "--trace-warnings", "server.js"]
public/script.js CHANGED
@@ -108,7 +108,11 @@ document.addEventListener('DOMContentLoaded', () => {
108
  const data = await response.json();
109
 
110
  if (!response.ok) {
111
- throw new Error(data.error || `Erreur HTTP: ${response.status}`);
 
 
 
 
112
  }
113
 
114
  const fullTranscript = data.transcript;
@@ -127,7 +131,7 @@ document.addEventListener('DOMContentLoaded', () => {
127
  summaryOutput.textContent = summary;
128
 
129
  } catch (err) {
130
- console.error("Erreur dans le processus :", err);
131
  showError(`Erreur: ${err.message}`);
132
  transcriptOutput.innerHTML = "<p>Échec de la récupération.</p>";
133
  summaryOutput.innerHTML = "<p>Échec du résumé.</p>";
 
108
  const data = await response.json();
109
 
110
  if (!response.ok) {
111
+ // Afficher l'erreur détaillée si disponible
112
+ const errorMessage = data.details
113
+ ? `${data.error} Détails: ${data.details}`
114
+ : data.error || `Erreur HTTP: ${response.status}`;
115
+ throw new Error(errorMessage);
116
  }
117
 
118
  const fullTranscript = data.transcript;
 
131
  summaryOutput.textContent = summary;
132
 
133
  } catch (err) {
134
+ console.error("Erreur détaillée dans le processus :", err);
135
  showError(`Erreur: ${err.message}`);
136
  transcriptOutput.innerHTML = "<p>Échec de la récupération.</p>";
137
  summaryOutput.innerHTML = "<p>Échec du résumé.</p>";
server.js CHANGED
@@ -38,7 +38,17 @@ app.get('/get-transcript', async (req, res) => {
38
  }
39
 
40
  console.log(`Fetching transcript for video ID: ${videoId}`);
41
- const transcript = await YoutubeTranscript.fetchTranscript(videoId);
 
 
 
 
 
 
 
 
 
 
42
 
43
  if (!transcript || transcript.length === 0) {
44
  return res.status(404).json({ error: 'Transcription non trouvée ou vide pour cette vidéo.' });
@@ -49,14 +59,28 @@ app.get('/get-transcript', async (req, res) => {
49
  res.json({ transcript: fullText });
50
 
51
  } catch (error) {
52
- console.error('Erreur lors de la récupération de la transcription:', error);
 
 
 
 
 
 
53
  if (error.message && error.message.includes('Could not find transcripts')) {
54
  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é)." });
55
  }
56
  if (error.message && error.message.includes('is not a valid video ID')) {
57
  return res.status(400).json({ error: `L'ID vidéo extrait ('${error.message.split("'")[1]}') n'est pas valide. Vérifiez l'URL.` });
58
  }
59
- res.status(500).json({ error: 'Erreur interne du serveur lors de la récupération de la transcription.' });
 
 
 
 
 
 
 
 
60
  }
61
  });
62
 
 
38
  }
39
 
40
  console.log(`Fetching transcript for video ID: ${videoId}`);
41
+
42
+ // Ajout d'un timeout pour éviter que la requête reste bloquée trop longtemps
43
+ const timeoutPromise = new Promise((_, reject) =>
44
+ setTimeout(() => reject(new Error('Timeout dépassé lors de la récupération de la transcription')), 15000)
45
+ );
46
+
47
+ // Utilisation de Promise.race pour implémenter un timeout
48
+ const transcript = await Promise.race([
49
+ YoutubeTranscript.fetchTranscript(videoId),
50
+ timeoutPromise
51
+ ]);
52
 
53
  if (!transcript || transcript.length === 0) {
54
  return res.status(404).json({ error: 'Transcription non trouvée ou vide pour cette vidéo.' });
 
59
  res.json({ transcript: fullText });
60
 
61
  } catch (error) {
62
+ // Log détaillé de l'erreur pour le débogage
63
+ console.error('Erreur détaillée lors de la récupération de la transcription:', {
64
+ message: error.message,
65
+ stack: error.stack,
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
  }
72
  if (error.message && error.message.includes('is not a valid video ID')) {
73
  return res.status(400).json({ error: `L'ID vidéo extrait ('${error.message.split("'")[1]}') n'est pas valide. Vérifiez l'URL.` });
74
  }
75
+ if (error.message && error.message.includes('Timeout dépassé')) {
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
+ // Message d'erreur plus détaillé
80
+ res.status(500).json({
81
+ error: 'Erreur interne du serveur lors de la récupération de la transcription.',
82
+ details: error.message
83
+ });
84
  }
85
  });
86