@donlovett/n8n-nodes-youtube-transcript 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YouTubeTranscript.node.d.ts","sourceRoot":"","sources":["../../../nodes/YouTubeTranscript/YouTubeTranscript.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,
|
|
1
|
+
{"version":3,"file":"YouTubeTranscript.node.d.ts","sourceRoot":"","sources":["../../../nodes/YouTubeTranscript/YouTubeTranscript.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGpB,MAAM,cAAc,CAAC;AAgEtB,qBAAa,iBAAkB,YAAW,SAAS;IAClD,WAAW,EAAE,oBAAoB,CAgF/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAkQvE"}
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.YouTubeTranscript = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
-
// @ts-ignore - youtube-transcript doesn't have types
|
|
6
|
-
const youtube_transcript_1 = require("youtube-transcript");
|
|
7
5
|
// Helper function to extract video ID from URL
|
|
8
6
|
function extractVideoId(input) {
|
|
9
7
|
// Already a video ID (11 characters, alphanumeric with - and _)
|
|
@@ -23,6 +21,39 @@ function extractVideoId(input) {
|
|
|
23
21
|
}
|
|
24
22
|
return input; // Return as-is and let the API handle validation
|
|
25
23
|
}
|
|
24
|
+
// Parse transcript segments from YouTube's timedtext JSON format
|
|
25
|
+
function parseTranscriptEvents(events) {
|
|
26
|
+
const segments = [];
|
|
27
|
+
for (const event of events) {
|
|
28
|
+
if (event.segs) {
|
|
29
|
+
const text = event.segs
|
|
30
|
+
.map((seg) => seg.utf8 || '')
|
|
31
|
+
.join('')
|
|
32
|
+
.trim();
|
|
33
|
+
if (text && text !== '\n') {
|
|
34
|
+
segments.push({
|
|
35
|
+
start: (event.tStartMs || 0) / 1000,
|
|
36
|
+
duration: (event.dDurationMs || 0) / 1000,
|
|
37
|
+
text: text.replace(/\n/g, ' ').trim(),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Deduplicate consecutive identical segments
|
|
43
|
+
const uniqueSegments = [];
|
|
44
|
+
for (const seg of segments) {
|
|
45
|
+
if (uniqueSegments.length === 0 || uniqueSegments[uniqueSegments.length - 1].text !== seg.text) {
|
|
46
|
+
uniqueSegments.push(seg);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const fullText = uniqueSegments
|
|
50
|
+
.map(seg => seg.text)
|
|
51
|
+
.join(' ')
|
|
52
|
+
.replace(/\s+/g, ' ')
|
|
53
|
+
.replace(/\[Music\]/gi, '')
|
|
54
|
+
.trim();
|
|
55
|
+
return { text: fullText, segments: uniqueSegments };
|
|
56
|
+
}
|
|
26
57
|
class YouTubeTranscript {
|
|
27
58
|
constructor() {
|
|
28
59
|
this.description = {
|
|
@@ -108,6 +139,7 @@ class YouTubeTranscript {
|
|
|
108
139
|
};
|
|
109
140
|
}
|
|
110
141
|
async execute() {
|
|
142
|
+
var _a, _b;
|
|
111
143
|
const items = this.getInputData();
|
|
112
144
|
const returnData = [];
|
|
113
145
|
for (let i = 0; i < items.length; i++) {
|
|
@@ -122,54 +154,202 @@ class YouTubeTranscript {
|
|
|
122
154
|
if (!videoId) {
|
|
123
155
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid video ID or URL provided', { itemIndex: i });
|
|
124
156
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
videoId,
|
|
134
|
-
language,
|
|
135
|
-
hasTranscript: false,
|
|
136
|
-
error: 'No transcript available for this video',
|
|
137
|
-
transcript: '',
|
|
138
|
-
wordCount: 0,
|
|
157
|
+
try {
|
|
158
|
+
// Step 1: Fetch the video page to get caption track info
|
|
159
|
+
const pageOptions = {
|
|
160
|
+
method: 'GET',
|
|
161
|
+
url: `https://www.youtube.com/watch?v=${videoId}`,
|
|
162
|
+
headers: {
|
|
163
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
164
|
+
'Accept-Language': 'en-US,en;q=0.9',
|
|
139
165
|
},
|
|
166
|
+
};
|
|
167
|
+
const pageResponse = await this.helpers.httpRequest(pageOptions);
|
|
168
|
+
const pageHtml = typeof pageResponse === 'string' ? pageResponse : JSON.stringify(pageResponse);
|
|
169
|
+
// Extract captions data from the page
|
|
170
|
+
const captionsMatch = pageHtml.match(/"captions":\s*(\{[^}]+\}[^}]+\}[^}]+\})/);
|
|
171
|
+
if (!captionsMatch) {
|
|
172
|
+
// Try alternate pattern for captionTracks
|
|
173
|
+
const tracksMatch = pageHtml.match(/"captionTracks":\s*(\[[^\]]+\])/);
|
|
174
|
+
if (!tracksMatch) {
|
|
175
|
+
returnData.push({
|
|
176
|
+
json: {
|
|
177
|
+
videoId,
|
|
178
|
+
language,
|
|
179
|
+
hasTranscript: false,
|
|
180
|
+
error: 'No captions available for this video',
|
|
181
|
+
transcript: '',
|
|
182
|
+
wordCount: 0,
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Extract the playerCaptionsTracklistRenderer which contains caption URLs
|
|
189
|
+
const playerResponseMatch = pageHtml.match(/ytInitialPlayerResponse\s*=\s*(\{.+?\});/s);
|
|
190
|
+
if (!playerResponseMatch) {
|
|
191
|
+
returnData.push({
|
|
192
|
+
json: {
|
|
193
|
+
videoId,
|
|
194
|
+
language,
|
|
195
|
+
hasTranscript: false,
|
|
196
|
+
error: 'Could not parse video data',
|
|
197
|
+
transcript: '',
|
|
198
|
+
wordCount: 0,
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
let playerData;
|
|
204
|
+
try {
|
|
205
|
+
// Find the end of the JSON object properly
|
|
206
|
+
let jsonStr = playerResponseMatch[1];
|
|
207
|
+
let braceCount = 0;
|
|
208
|
+
let endIndex = 0;
|
|
209
|
+
for (let j = 0; j < jsonStr.length; j++) {
|
|
210
|
+
if (jsonStr[j] === '{')
|
|
211
|
+
braceCount++;
|
|
212
|
+
if (jsonStr[j] === '}')
|
|
213
|
+
braceCount--;
|
|
214
|
+
if (braceCount === 0) {
|
|
215
|
+
endIndex = j + 1;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
jsonStr = jsonStr.substring(0, endIndex);
|
|
220
|
+
playerData = JSON.parse(jsonStr);
|
|
221
|
+
}
|
|
222
|
+
catch (parseError) {
|
|
223
|
+
returnData.push({
|
|
224
|
+
json: {
|
|
225
|
+
videoId,
|
|
226
|
+
language,
|
|
227
|
+
hasTranscript: false,
|
|
228
|
+
error: 'Failed to parse player data',
|
|
229
|
+
transcript: '',
|
|
230
|
+
wordCount: 0,
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const captions = (_b = (_a = playerData === null || playerData === void 0 ? void 0 : playerData.captions) === null || _a === void 0 ? void 0 : _a.playerCaptionsTracklistRenderer) === null || _b === void 0 ? void 0 : _b.captionTracks;
|
|
236
|
+
if (!captions || captions.length === 0) {
|
|
237
|
+
returnData.push({
|
|
238
|
+
json: {
|
|
239
|
+
videoId,
|
|
240
|
+
language,
|
|
241
|
+
hasTranscript: false,
|
|
242
|
+
error: 'No caption tracks found',
|
|
243
|
+
transcript: '',
|
|
244
|
+
wordCount: 0,
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
// Find the caption track for the requested language
|
|
250
|
+
let captionTrack = captions.find((track) => {
|
|
251
|
+
var _a, _b;
|
|
252
|
+
return track.languageCode === language ||
|
|
253
|
+
((_a = track.vssId) === null || _a === void 0 ? void 0 : _a.includes(`.${language}`)) ||
|
|
254
|
+
((_b = track.vssId) === null || _b === void 0 ? void 0 : _b.includes(`a.${language}`));
|
|
140
255
|
});
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
256
|
+
// If not found, try to find auto-generated captions
|
|
257
|
+
if (!captionTrack) {
|
|
258
|
+
captionTrack = captions.find((track) => { var _a, _b; return ((_a = track.vssId) === null || _a === void 0 ? void 0 : _a.startsWith('a.')) && ((_b = track.languageCode) === null || _b === void 0 ? void 0 : _b.startsWith(language.split('-')[0])); });
|
|
259
|
+
}
|
|
260
|
+
// Fallback to first available track
|
|
261
|
+
if (!captionTrack) {
|
|
262
|
+
captionTrack = captions[0];
|
|
263
|
+
}
|
|
264
|
+
if (!(captionTrack === null || captionTrack === void 0 ? void 0 : captionTrack.baseUrl)) {
|
|
265
|
+
returnData.push({
|
|
266
|
+
json: {
|
|
267
|
+
videoId,
|
|
268
|
+
language,
|
|
269
|
+
hasTranscript: false,
|
|
270
|
+
error: 'No caption URL found',
|
|
271
|
+
transcript: '',
|
|
272
|
+
wordCount: 0,
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
// Step 2: Fetch the captions in JSON format
|
|
278
|
+
const captionUrl = captionTrack.baseUrl + '&fmt=json3';
|
|
279
|
+
const captionOptions = {
|
|
280
|
+
method: 'GET',
|
|
281
|
+
url: captionUrl,
|
|
282
|
+
headers: {
|
|
283
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
159
284
|
},
|
|
160
|
-
}
|
|
285
|
+
};
|
|
286
|
+
const captionResponse = await this.helpers.httpRequest(captionOptions);
|
|
287
|
+
const captionData = typeof captionResponse === 'string' ? JSON.parse(captionResponse) : captionResponse;
|
|
288
|
+
if (!captionData.events || captionData.events.length === 0) {
|
|
289
|
+
returnData.push({
|
|
290
|
+
json: {
|
|
291
|
+
videoId,
|
|
292
|
+
language,
|
|
293
|
+
hasTranscript: false,
|
|
294
|
+
error: 'Caption data is empty',
|
|
295
|
+
transcript: '',
|
|
296
|
+
wordCount: 0,
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
// Parse the transcript
|
|
302
|
+
const { text, segments } = parseTranscriptEvents(captionData.events);
|
|
303
|
+
if (!text || text.length < 10) {
|
|
304
|
+
returnData.push({
|
|
305
|
+
json: {
|
|
306
|
+
videoId,
|
|
307
|
+
language: captionTrack.languageCode || language,
|
|
308
|
+
hasTranscript: false,
|
|
309
|
+
error: 'Transcript is empty or too short',
|
|
310
|
+
transcript: '',
|
|
311
|
+
wordCount: 0,
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const wordCount = text.split(/\s+/).filter((w) => w).length;
|
|
317
|
+
if (outputFormat === 'fullText') {
|
|
318
|
+
returnData.push({
|
|
319
|
+
json: {
|
|
320
|
+
videoId,
|
|
321
|
+
language: captionTrack.languageCode || language,
|
|
322
|
+
hasTranscript: true,
|
|
323
|
+
transcript: text,
|
|
324
|
+
wordCount,
|
|
325
|
+
segmentCount: segments.length,
|
|
326
|
+
},
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
returnData.push({
|
|
331
|
+
json: {
|
|
332
|
+
videoId,
|
|
333
|
+
language: captionTrack.languageCode || language,
|
|
334
|
+
hasTranscript: true,
|
|
335
|
+
segments,
|
|
336
|
+
segmentCount: segments.length,
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
}
|
|
161
340
|
}
|
|
162
|
-
|
|
163
|
-
// Return segments with timing
|
|
341
|
+
catch (fetchError) {
|
|
164
342
|
returnData.push({
|
|
165
343
|
json: {
|
|
166
344
|
videoId,
|
|
167
345
|
language,
|
|
168
|
-
hasTranscript:
|
|
169
|
-
|
|
170
|
-
|
|
346
|
+
hasTranscript: false,
|
|
347
|
+
error: fetchError instanceof Error ? fetchError.message : 'Failed to fetch transcript',
|
|
348
|
+
transcript: '',
|
|
349
|
+
wordCount: 0,
|
|
171
350
|
},
|
|
172
351
|
});
|
|
352
|
+
continue;
|
|
173
353
|
}
|
|
174
354
|
}
|
|
175
355
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YouTubeTranscript.node.js","sourceRoot":"","sources":["../../../nodes/YouTubeTranscript/YouTubeTranscript.node.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"YouTubeTranscript.node.js","sourceRoot":"","sources":["../../../nodes/YouTubeTranscript/YouTubeTranscript.node.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@donlovett/n8n-nodes-youtube-transcript",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "n8n node to fetch YouTube video transcripts",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -43,9 +43,7 @@
|
|
|
43
43
|
"prettier": "^3.2.5",
|
|
44
44
|
"typescript": "~5.4.0"
|
|
45
45
|
},
|
|
46
|
-
"dependencies": {
|
|
47
|
-
"youtube-transcript": "^1.2.1"
|
|
48
|
-
},
|
|
46
|
+
"dependencies": {},
|
|
49
47
|
"peerDependencies": {
|
|
50
48
|
"n8n-workflow": "*"
|
|
51
49
|
}
|