ytgrab 0.1.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.
- package/LICENSE +21 -0
- package/README.md +142 -0
- package/bin/ytgrab.js +194 -0
- package/dist/downloader/common.d.ts +22 -0
- package/dist/downloader/common.d.ts.map +1 -0
- package/dist/downloader/common.js +125 -0
- package/dist/downloader/common.js.map +1 -0
- package/dist/downloader/hls.d.ts +11 -0
- package/dist/downloader/hls.d.ts.map +1 -0
- package/dist/downloader/hls.js +134 -0
- package/dist/downloader/hls.js.map +1 -0
- package/dist/downloader/http.d.ts +10 -0
- package/dist/downloader/http.d.ts.map +1 -0
- package/dist/downloader/http.js +132 -0
- package/dist/downloader/http.js.map +1 -0
- package/dist/downloader/index.d.ts +10 -0
- package/dist/downloader/index.d.ts.map +1 -0
- package/dist/downloader/index.js +24 -0
- package/dist/downloader/index.js.map +1 -0
- package/dist/extractor/common.d.ts +48 -0
- package/dist/extractor/common.d.ts.map +1 -0
- package/dist/extractor/common.js +324 -0
- package/dist/extractor/common.js.map +1 -0
- package/dist/extractor/nsig.d.ts +17 -0
- package/dist/extractor/nsig.d.ts.map +1 -0
- package/dist/extractor/nsig.js +200 -0
- package/dist/extractor/nsig.js.map +1 -0
- package/dist/extractor/youtube.d.ts +51 -0
- package/dist/extractor/youtube.d.ts.map +1 -0
- package/dist/extractor/youtube.js +1113 -0
- package/dist/extractor/youtube.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/networking/index.d.ts +33 -0
- package/dist/networking/index.d.ts.map +1 -0
- package/dist/networking/index.js +171 -0
- package/dist/networking/index.js.map +1 -0
- package/dist/postprocessor/common.d.ts +21 -0
- package/dist/postprocessor/common.d.ts.map +1 -0
- package/dist/postprocessor/common.js +42 -0
- package/dist/postprocessor/common.js.map +1 -0
- package/dist/postprocessor/ffmpeg.d.ts +44 -0
- package/dist/postprocessor/ffmpeg.d.ts.map +1 -0
- package/dist/postprocessor/ffmpeg.js +286 -0
- package/dist/postprocessor/ffmpeg.js.map +1 -0
- package/dist/types.d.ts +157 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/index.d.ts +57 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +403 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/traversal.d.ts +22 -0
- package/dist/utils/traversal.d.ts.map +1 -0
- package/dist/utils/traversal.js +112 -0
- package/dist/utils/traversal.js.map +1 -0
- package/dist/ytgrab.d.ts +48 -0
- package/dist/ytgrab.d.ts.map +1 -0
- package/dist/ytgrab.js +450 -0
- package/dist/ytgrab.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* YouTube n-parameter (throttle) challenge solver.
|
|
4
|
+
*
|
|
5
|
+
* Uses the yt-dlp EJS challenge solver scripts (yt.solver.core.js) with
|
|
6
|
+
* meriyah (JS parser) and astring (AST code generator) to extract and
|
|
7
|
+
* solve n-parameter transformations from YouTube player JavaScript.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.extractPlayerUrl = extractPlayerUrl;
|
|
44
|
+
exports.solveNChallenge = solveNChallenge;
|
|
45
|
+
exports.clearNSigCache = clearNSigCache;
|
|
46
|
+
const fs = __importStar(require("node:fs"));
|
|
47
|
+
const path = __importStar(require("node:path"));
|
|
48
|
+
const index_js_1 = require("../networking/index.js");
|
|
49
|
+
// Cache
|
|
50
|
+
const nResultCache = new Map();
|
|
51
|
+
const playerJsCache = new Map();
|
|
52
|
+
let solverFn = null;
|
|
53
|
+
/**
|
|
54
|
+
* Extract the player URL from a YouTube webpage.
|
|
55
|
+
*/
|
|
56
|
+
function extractPlayerUrl(webpage) {
|
|
57
|
+
const patterns = [
|
|
58
|
+
/"jsUrl"\s*:\s*"([^"]+base\.js)"/,
|
|
59
|
+
/"PLAYER_JS_URL"\s*:\s*"([^"]+base\.js)"/,
|
|
60
|
+
/\/s\/player\/([a-zA-Z0-9_-]+)\/player_ias\.vflset\/[a-z]{2}_[A-Z]{2}\/base\.js/,
|
|
61
|
+
/\/s\/player\/([a-zA-Z0-9_-]+)\/player_es6\.vflset\/[a-z]{2}_[A-Z]{2}\/base\.js/,
|
|
62
|
+
];
|
|
63
|
+
for (const pattern of patterns) {
|
|
64
|
+
const match = webpage.match(pattern);
|
|
65
|
+
if (match) {
|
|
66
|
+
const url = match[1] || match[0];
|
|
67
|
+
if (url.startsWith('http'))
|
|
68
|
+
return url;
|
|
69
|
+
return `https://www.youtube.com${url}`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Download the player JavaScript source.
|
|
76
|
+
*/
|
|
77
|
+
async function downloadPlayerJs(playerUrl) {
|
|
78
|
+
if (playerJsCache.has(playerUrl)) {
|
|
79
|
+
return playerJsCache.get(playerUrl);
|
|
80
|
+
}
|
|
81
|
+
const resp = await (0, index_js_1.makeRequest)(playerUrl, {
|
|
82
|
+
headers: {
|
|
83
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
const js = resp.text();
|
|
87
|
+
playerJsCache.set(playerUrl, js);
|
|
88
|
+
return js;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Initialize the EJS solver by loading the core script.
|
|
92
|
+
*/
|
|
93
|
+
async function initSolver() {
|
|
94
|
+
if (solverFn)
|
|
95
|
+
return solverFn;
|
|
96
|
+
// Find the core solver script
|
|
97
|
+
const searchPaths = [
|
|
98
|
+
path.resolve(__dirname, '../../../../yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/vendor'),
|
|
99
|
+
path.resolve(process.cwd(), '../yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/vendor'),
|
|
100
|
+
path.resolve(process.cwd(), 'vendor'),
|
|
101
|
+
];
|
|
102
|
+
let coreScript = null;
|
|
103
|
+
for (const dir of searchPaths) {
|
|
104
|
+
const corePath = path.join(dir, 'yt.solver.core.js');
|
|
105
|
+
if (fs.existsSync(corePath)) {
|
|
106
|
+
coreScript = fs.readFileSync(corePath, 'utf-8');
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!coreScript)
|
|
111
|
+
return null;
|
|
112
|
+
try {
|
|
113
|
+
// Load meriyah and astring
|
|
114
|
+
const meriyah = await import('meriyah');
|
|
115
|
+
const astring = await import('astring');
|
|
116
|
+
// The core script is an IIFE:
|
|
117
|
+
// var jsc = (function(meriyah, astring) { ... })(meriyah, astring);
|
|
118
|
+
// The IIFE passes meriyah/astring from outer scope as args.
|
|
119
|
+
// We need them available as variables when the script evaluates.
|
|
120
|
+
const wrappedScript = `
|
|
121
|
+
var meriyah = arguments[0];
|
|
122
|
+
var astring = arguments[1];
|
|
123
|
+
${coreScript}
|
|
124
|
+
return jsc;
|
|
125
|
+
`;
|
|
126
|
+
const fn = new Function(wrappedScript);
|
|
127
|
+
solverFn = fn(meriyah, astring);
|
|
128
|
+
return solverFn;
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
// Solver initialization failed
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Solve n-parameter challenges using the EJS solver.
|
|
137
|
+
*/
|
|
138
|
+
async function solveNWithEJS(playerUrl, challenges) {
|
|
139
|
+
const solver = await initSolver();
|
|
140
|
+
if (!solver)
|
|
141
|
+
return new Map();
|
|
142
|
+
const playerJs = await downloadPlayerJs(playerUrl);
|
|
143
|
+
try {
|
|
144
|
+
const output = solver({
|
|
145
|
+
type: 'player',
|
|
146
|
+
player: playerJs,
|
|
147
|
+
requests: [{ type: 'n', challenges }],
|
|
148
|
+
output_preprocessed: false,
|
|
149
|
+
});
|
|
150
|
+
if (output.type === 'error') {
|
|
151
|
+
return new Map();
|
|
152
|
+
}
|
|
153
|
+
const results = new Map();
|
|
154
|
+
if (output.responses?.[0]?.data) {
|
|
155
|
+
for (const [key, val] of Object.entries(output.responses[0].data)) {
|
|
156
|
+
results.set(key, val);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return results;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return new Map();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Solve the n-parameter challenge for a given video URL.
|
|
167
|
+
*/
|
|
168
|
+
async function solveNChallenge(formatUrl, playerUrl) {
|
|
169
|
+
const url = new URL(formatUrl);
|
|
170
|
+
const nParam = url.searchParams.get('n');
|
|
171
|
+
if (!nParam)
|
|
172
|
+
return formatUrl;
|
|
173
|
+
// Check cache
|
|
174
|
+
const cached = nResultCache.get(playerUrl);
|
|
175
|
+
if (cached?.has(nParam)) {
|
|
176
|
+
url.searchParams.set('n', cached.get(nParam));
|
|
177
|
+
return url.toString();
|
|
178
|
+
}
|
|
179
|
+
// Solve with EJS
|
|
180
|
+
const results = await solveNWithEJS(playerUrl, [nParam]);
|
|
181
|
+
if (results.size > 0) {
|
|
182
|
+
if (!nResultCache.has(playerUrl))
|
|
183
|
+
nResultCache.set(playerUrl, new Map());
|
|
184
|
+
for (const [k, v] of results) {
|
|
185
|
+
nResultCache.get(playerUrl).set(k, v);
|
|
186
|
+
}
|
|
187
|
+
const solved = results.get(nParam);
|
|
188
|
+
if (solved) {
|
|
189
|
+
url.searchParams.set('n', solved);
|
|
190
|
+
return url.toString();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return formatUrl;
|
|
194
|
+
}
|
|
195
|
+
function clearNSigCache() {
|
|
196
|
+
nResultCache.clear();
|
|
197
|
+
playerJsCache.clear();
|
|
198
|
+
solverFn = null;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=nsig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nsig.js","sourceRoot":"","sources":["../../src/extractor/nsig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YouTube extractor - ported from yt_dlp/extractor/youtube/
|
|
3
|
+
*
|
|
4
|
+
* Extracts video info, formats, subtitles from YouTube URLs
|
|
5
|
+
* using the InnerTube API.
|
|
6
|
+
*/
|
|
7
|
+
import { InfoExtractor } from './common.js';
|
|
8
|
+
import type { InfoDict } from '../types.js';
|
|
9
|
+
export declare class YoutubeIE extends InfoExtractor {
|
|
10
|
+
readonly IE_NAME = "youtube";
|
|
11
|
+
readonly _VALID_URL: RegExp;
|
|
12
|
+
private _defaultClients;
|
|
13
|
+
protected _realExtract(url: string, match: RegExpMatchArray): Promise<InfoDict>;
|
|
14
|
+
private _callApi;
|
|
15
|
+
private _extractYtcfg;
|
|
16
|
+
private _extractInitialData;
|
|
17
|
+
private _extractInitialPlayerResponse;
|
|
18
|
+
private _extractVideoDetails;
|
|
19
|
+
private _extractMicroformat;
|
|
20
|
+
private _extractFormats;
|
|
21
|
+
private _getClientHeaders;
|
|
22
|
+
private _parseMimeType;
|
|
23
|
+
private _qualityScore;
|
|
24
|
+
private _extractCaptions;
|
|
25
|
+
private _extractThumbnails;
|
|
26
|
+
private _extractChapters;
|
|
27
|
+
private _extractChaptersFromEngagementPanel;
|
|
28
|
+
private _extractChaptersFromDescription;
|
|
29
|
+
private _checkPlayability;
|
|
30
|
+
private _extractLiveStatus;
|
|
31
|
+
private _extractTitle;
|
|
32
|
+
private _getText;
|
|
33
|
+
private _parseCount;
|
|
34
|
+
private _mergeSubtitles;
|
|
35
|
+
}
|
|
36
|
+
export declare class YoutubePlaylistIE extends InfoExtractor {
|
|
37
|
+
readonly IE_NAME = "youtube:playlist";
|
|
38
|
+
readonly _VALID_URL: RegExp;
|
|
39
|
+
protected _realExtract(url: string, match: RegExpMatchArray): Promise<InfoDict>;
|
|
40
|
+
private _callBrowseApi;
|
|
41
|
+
private _extractPlaylistEntries;
|
|
42
|
+
private _getRendererText;
|
|
43
|
+
}
|
|
44
|
+
export declare class YoutubeSearchIE extends InfoExtractor {
|
|
45
|
+
readonly IE_NAME = "youtube:search";
|
|
46
|
+
readonly _VALID_URL: RegExp;
|
|
47
|
+
protected _realExtract(url: string, match: RegExpMatchArray): Promise<InfoDict>;
|
|
48
|
+
private _getRendererText;
|
|
49
|
+
}
|
|
50
|
+
export declare const EXTRACTORS: (typeof YoutubeIE | typeof YoutubePlaylistIE | typeof YoutubeSearchIE)[];
|
|
51
|
+
//# sourceMappingURL=youtube.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../src/extractor/youtube.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C,OAAO,KAAK,EAAE,QAAQ,EAA6C,MAAM,aAAa,CAAC;AA4JvF,qBAAa,SAAU,SAAQ,aAAa;IAC1C,QAAQ,CAAC,OAAO,aAAa;IAE7B,QAAQ,CAAC,UAAU,SAA0I;IAE7J,OAAO,CAAC,eAAe,CAA0C;cAEjD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;YAuLvE,QAAQ;IAyDtB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,6BAA6B;IAkBrC,OAAO,CAAC,oBAAoB;IA2I5B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,eAAe;IAuHvB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,gBAAgB;IAiFxB,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mCAAmC;IAyC3C,OAAO,CAAC,+BAA+B;IAqCvC,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,eAAe;CASxB;AAID,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,OAAO,sBAAsB;IACtC,QAAQ,CAAC,UAAU,SAAuG;cAE1G,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;YAqBvE,cAAc;IA0B5B,OAAO,CAAC,uBAAuB;IA+B/B,OAAO,CAAC,gBAAgB;CASzB;AAID,qBAAa,eAAgB,SAAQ,aAAa;IAChD,QAAQ,CAAC,OAAO,oBAAoB;IACpC,QAAQ,CAAC,UAAU,SAA2B;cAE9B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiErF,OAAO,CAAC,gBAAgB;CASzB;AAGD,eAAO,MAAM,UAAU,0EAAkD,CAAC"}
|