Skip to content

Commit 87b1fab

Browse files
committed
feat: ytdl cookie 설정
1 parent 2d3e90e commit 87b1fab

File tree

5 files changed

+283
-14
lines changed

5 files changed

+283
-14
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ node_modules/
22
.env
33
.husky/
44
command-tracker.json
5+
cookies.txt

cookies.txt

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
[
2+
{
3+
"domain": ".youtube.com",
4+
"expirationDate": 1784791444.066321,
5+
"hostOnly": false,
6+
"httpOnly": false,
7+
"name": "__Secure-1PAPISID",
8+
"path": "/",
9+
"sameSite": "unspecified",
10+
"secure": true,
11+
"session": false,
12+
"storeId": "1",
13+
"value": "eir1O-CZa0Mz3NwE/ABRi6Ji8G6UieH61x",
14+
"id": 1
15+
},
16+
{
17+
"domain": ".youtube.com",
18+
"expirationDate": 1784791444.066477,
19+
"hostOnly": false,
20+
"httpOnly": true,
21+
"name": "__Secure-1PSID",
22+
"path": "/",
23+
"sameSite": "unspecified",
24+
"secure": true,
25+
"session": false,
26+
"storeId": "1",
27+
"value": "g.a000yAieu35D5FWBLN5OTbOQdPJQmbuuRKyJ2DKukGWFvBxFbn9Wuwm9Mwy6RqAUtffXGFSPjQACgYKAZkSARUSFQHGX2Mi8v6x3GFQq8ISwuoZXiX-FRoVAUF8yKqnqToYA2K1tuWO5rYdGc4K0076",
28+
"id": 2
29+
},
30+
{
31+
"domain": ".youtube.com",
32+
"expirationDate": 1781767447.245206,
33+
"hostOnly": false,
34+
"httpOnly": true,
35+
"name": "__Secure-1PSIDCC",
36+
"path": "/",
37+
"sameSite": "unspecified",
38+
"secure": true,
39+
"session": false,
40+
"storeId": "1",
41+
"value": "AKEyXzWNDyQSTh4Ww-xpsdVzkSRnuxrphovBkidzTbzNvDYnYvQfroUH_6kDlvmdg7P15722",
42+
"id": 3
43+
},
44+
{
45+
"domain": ".youtube.com",
46+
"expirationDate": 1781767444.065747,
47+
"hostOnly": false,
48+
"httpOnly": true,
49+
"name": "__Secure-1PSIDTS",
50+
"path": "/",
51+
"sameSite": "unspecified",
52+
"secure": true,
53+
"session": false,
54+
"storeId": "1",
55+
"value": "sidts-CjEB5H03P6zx6pMXCh3oOFSbLh5EPUW00KIe8XAnxMmRn1nX_2urOOliRv2tL0cZS1BMEAA",
56+
"id": 4
57+
},
58+
{
59+
"domain": ".youtube.com",
60+
"expirationDate": 1784791444.066366,
61+
"hostOnly": false,
62+
"httpOnly": false,
63+
"name": "__Secure-3PAPISID",
64+
"path": "/",
65+
"sameSite": "no_restriction",
66+
"secure": true,
67+
"session": false,
68+
"storeId": "1",
69+
"value": "eir1O-CZa0Mz3NwE/ABRi6Ji8G6UieH61x",
70+
"id": 5
71+
},
72+
{
73+
"domain": ".youtube.com",
74+
"expirationDate": 1784791444.066528,
75+
"hostOnly": false,
76+
"httpOnly": true,
77+
"name": "__Secure-3PSID",
78+
"path": "/",
79+
"sameSite": "no_restriction",
80+
"secure": true,
81+
"session": false,
82+
"storeId": "1",
83+
"value": "g.a000yAieu35D5FWBLN5OTbOQdPJQmbuuRKyJ2DKukGWFvBxFbn9WkHjDxFn9yL1m8YLpWZNDbwACgYKATQSARUSFQHGX2Mi2fjtb5QqFDIjvgWFDB1Q3BoVAUF8yKo6EB7Ylkx5ag7DGP-tS5_C0076",
84+
"id": 6
85+
},
86+
{
87+
"domain": ".youtube.com",
88+
"expirationDate": 1781767447.245304,
89+
"hostOnly": false,
90+
"httpOnly": true,
91+
"name": "__Secure-3PSIDCC",
92+
"path": "/",
93+
"sameSite": "no_restriction",
94+
"secure": true,
95+
"session": false,
96+
"storeId": "1",
97+
"value": "AKEyXzUch0Imopp4ui2PnHQGjPFo1_sf8J2caQf13MpQOW-mJ_sRv0BubKOIYDvl1TgTDfPY_A",
98+
"id": 7
99+
},
100+
{
101+
"domain": ".youtube.com",
102+
"expirationDate": 1781767444.065891,
103+
"hostOnly": false,
104+
"httpOnly": true,
105+
"name": "__Secure-3PSIDTS",
106+
"path": "/",
107+
"sameSite": "no_restriction",
108+
"secure": true,
109+
"session": false,
110+
"storeId": "1",
111+
"value": "sidts-CjEB5H03P6zx6pMXCh3oOFSbLh5EPUW00KIe8XAnxMmRn1nX_2urOOliRv2tL0cZS1BMEAA",
112+
"id": 8
113+
},
114+
{
115+
"domain": ".youtube.com",
116+
"expirationDate": 1784791444.066232,
117+
"hostOnly": false,
118+
"httpOnly": false,
119+
"name": "APISID",
120+
"path": "/",
121+
"sameSite": "unspecified",
122+
"secure": false,
123+
"session": false,
124+
"storeId": "1",
125+
"value": "ow2bq-AbnbonwWeE/Ah9fAVAEFO0oxx1bT",
126+
"id": 9
127+
},
128+
{
129+
"domain": ".youtube.com",
130+
"expirationDate": 1750233204.136802,
131+
"hostOnly": false,
132+
"httpOnly": true,
133+
"name": "GPS",
134+
"path": "/",
135+
"sameSite": "unspecified",
136+
"secure": true,
137+
"session": false,
138+
"storeId": "1",
139+
"value": "1",
140+
"id": 10
141+
},
142+
{
143+
"domain": ".youtube.com",
144+
"expirationDate": 1784791444.066114,
145+
"hostOnly": false,
146+
"httpOnly": true,
147+
"name": "HSID",
148+
"path": "/",
149+
"sameSite": "unspecified",
150+
"secure": false,
151+
"session": false,
152+
"storeId": "1",
153+
"value": "A4QuDaeR7RKqZnQyj",
154+
"id": 11
155+
},
156+
{
157+
"domain": ".youtube.com",
158+
"expirationDate": 1784791444.512352,
159+
"hostOnly": false,
160+
"httpOnly": true,
161+
"name": "LOGIN_INFO",
162+
"path": "/",
163+
"sameSite": "no_restriction",
164+
"secure": true,
165+
"session": false,
166+
"storeId": "1",
167+
"value": "AFmmF2swRgIhAJFdjJ-uTIcTs5UUXUNKDKN8BStwkQErnMvXHveco_QCAiEA0NzKDocfiA6f21yoNM6qnG25w_0lRMGBV4M9tKbMZf0:QUQ3MjNmenlfdGVMcWxkS2RhWWlQYnA0OHlJeFRxR1ZYYXpwUDlDc1Z4UUQwMjBTYkRsa3p2UVFvTTRkMDJFME5YLU11R1VDcE9tYXMtM1pIdWdtWW4wM051aFotM1BFV01KZU1PV0xvZTVOTnIwS0tPZjFoTDVIdW0tVy1sZXhnSTJ1QzMzQ1JZNVZiZ0tIc25fZzFTSW9PYkhsVmlvV0lB",
168+
"id": 12
169+
},
170+
{
171+
"domain": ".youtube.com",
172+
"expirationDate": 1784791446.86774,
173+
"hostOnly": false,
174+
"httpOnly": false,
175+
"name": "PREF",
176+
"path": "/",
177+
"sameSite": "unspecified",
178+
"secure": true,
179+
"session": false,
180+
"storeId": "1",
181+
"value": "tz=Asia.Seoul&f4=4000000&f6=40000000&f7=100",
182+
"id": 13
183+
},
184+
{
185+
"domain": ".youtube.com",
186+
"expirationDate": 1784791444.066278,
187+
"hostOnly": false,
188+
"httpOnly": false,
189+
"name": "SAPISID",
190+
"path": "/",
191+
"sameSite": "unspecified",
192+
"secure": true,
193+
"session": false,
194+
"storeId": "1",
195+
"value": "eir1O-CZa0Mz3NwE/ABRi6Ji8G6UieH61x",
196+
"id": 14
197+
},
198+
{
199+
"domain": ".youtube.com",
200+
"expirationDate": 1784791444.066422,
201+
"hostOnly": false,
202+
"httpOnly": false,
203+
"name": "SID",
204+
"path": "/",
205+
"sameSite": "unspecified",
206+
"secure": false,
207+
"session": false,
208+
"storeId": "1",
209+
"value": "g.a000yAieu35D5FWBLN5OTbOQdPJQmbuuRKyJ2DKukGWFvBxFbn9Wp6rsSBGStMuy1464TbDR5AACgYKAacSARUSFQHGX2MiTpR-KuBDf-cv0BHyIbXV6xoVAUF8yKrQvOiLoXU8v8LAPJ9_VCl00076",
210+
"id": 15
211+
},
212+
{
213+
"domain": ".youtube.com",
214+
"expirationDate": 1781767447.245063,
215+
"hostOnly": false,
216+
"httpOnly": false,
217+
"name": "SIDCC",
218+
"path": "/",
219+
"sameSite": "unspecified",
220+
"secure": false,
221+
"session": false,
222+
"storeId": "1",
223+
"value": "AKEyXzVXtYNCZ9XRxtzduIYdE9ihCaI7qSm74mMFRtVCoFyAyx7tXFgpcRQHHtNAqaXGt0nN",
224+
"id": 16
225+
},
226+
{
227+
"domain": ".youtube.com",
228+
"expirationDate": 1784791444.066188,
229+
"hostOnly": false,
230+
"httpOnly": true,
231+
"name": "SSID",
232+
"path": "/",
233+
"sameSite": "unspecified",
234+
"secure": true,
235+
"session": false,
236+
"storeId": "1",
237+
"value": "AwKc7VZTMi3Q9EWhl",
238+
"id": 17
239+
},
240+
{
241+
"domain": ".youtube.com",
242+
"expirationDate": 1750231451,
243+
"hostOnly": false,
244+
"httpOnly": false,
245+
"name": "ST-l3hjtt",
246+
"path": "/",
247+
"sameSite": "unspecified",
248+
"secure": false,
249+
"session": false,
250+
"storeId": "1",
251+
"value": "session_logininfo=AFmmF2swRgIhAJFdjJ-uTIcTs5UUXUNKDKN8BStwkQErnMvXHveco_QCAiEA0NzKDocfiA6f21yoNM6qnG25w_0lRMGBV4M9tKbMZf0%3AQUQ3MjNmenlfdGVMcWxkS2RhWWlQYnA0OHlJeFRxR1ZYYXpwUDlDc1Z4UUQwMjBTYkRsa3p2UVFvTTRkMDJFME5YLU11R1VDcE9tYXMtM1pIdWdtWW4wM051aFotM1BFV01KZU1PV0xvZTVOTnIwS0tPZjFoTDVIdW0tVy1sZXhnSTJ1QzMzQ1JZNVZiZ0tIc25fZzFTSW9PYkhsVmlvV0lB",
252+
"id": 18
253+
},
254+
{
255+
"domain": ".youtube.com",
256+
"expirationDate": 1750231452,
257+
"hostOnly": false,
258+
"httpOnly": false,
259+
"name": "ST-tladcw",
260+
"path": "/",
261+
"sameSite": "unspecified",
262+
"secure": false,
263+
"session": false,
264+
"storeId": "1",
265+
"value": "session_logininfo=AFmmF2swRgIhAJFdjJ-uTIcTs5UUXUNKDKN8BStwkQErnMvXHveco_QCAiEA0NzKDocfiA6f21yoNM6qnG25w_0lRMGBV4M9tKbMZf0%3AQUQ3MjNmenlfdGVMcWxkS2RhWWlQYnA0OHlJeFRxR1ZYYXpwUDlDc1Z4UUQwMjBTYkRsa3p2UVFvTTRkMDJFME5YLU11R1VDcE9tYXMtM1pIdWdtWW4wM051aFotM1BFV01KZU1PV0xvZTVOTnIwS0tPZjFoTDVIdW0tVy1sZXhnSTJ1QzMzQ1JZNVZiZ0tIc25fZzFTSW9PYkhsVmlvV0lB",
266+
"id": 19
267+
}
268+
]

src/config/env.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const config = {
1212
email_pass: process.env.EMAIL_PASS,
1313
emailQueue: process.env.EMAIL_QUEUE || "email_queue",
1414
analyzeQueue: process.env.ANALYZE_QUEUE || "analyze_queue",
15+
cookies: process.env.COOKIE_DATA,
1516
};
1617

1718
export default config;

src/routes/middleware/validation/uploadValidation.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import fs from "fs";
2+
13
import ytdl from "@distube/ytdl-core";
24
import createError from "http-errors";
35

46
import { MESSAGES, REQUIRED_FIELDS } from "../../../config/constants.js";
7+
import env from "../../../config/env.js";
58
import { validateReqBody, validateFields } from "../../../utils/validation.js";
69

710
const validateMetadata = (metaData) => {
@@ -20,9 +23,6 @@ const validateUploadUrl = async (req, res, next) => {
2023
validateFields(req.body, REQUIRED_FIELDS.VIDEO_UPLOAD_REQUEST);
2124

2225
const { youtubeUrl } = req.body;
23-
const agent = ytdl.createProxyAgent({
24-
uri: "http://152.26.229.66:9443",
25-
});
2626
const isValid = ytdl.validateURL(youtubeUrl);
2727

2828
if (!isValid) {
@@ -33,7 +33,12 @@ const validateUploadUrl = async (req, res, next) => {
3333
throw error;
3434
}
3535

36-
const videoInfo = await ytdl.getBasicInfo(youtubeUrl, { agent });
36+
const cookieData = fs.readFileSync(env.cookies, "utf8");
37+
const videoInfo = await ytdl.getBasicInfo(youtubeUrl, {
38+
requestOptions: {
39+
headers: { cookies: cookieData },
40+
},
41+
});
3742

3843
validateMetadata(videoInfo.videoDetails);
3944

src/services/videoService.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
1+
import fs from "fs";
12
import { pipeline } from "stream/promises";
23

34
import ytdl from "@distube/ytdl-core";
45
import createError from "http-errors";
56

67
import { MESSAGES } from "../config/constants.js";
8+
import env from "../config/env.js";
79
import { bucket } from "../config/gcs.js";
810

911
const getYoutubeVideo = async (youtubeUrl) => {
10-
const agent = ytdl.createProxyAgent({
11-
uri: "http://152.26.229.66:9443",
12-
});
13-
12+
const cookieData = fs.readFileSync(env.cookies, "utf8");
1413
const videoStream = ytdl(youtubeUrl, {
1514
quality: "highestvideo",
16-
agent,
1715
requestOptions: {
18-
headersTimeout: 1000 * 30,
19-
bodyTimeout: 1000 * 30,
20-
headers: {
21-
referer: "https://www.youtube.com/",
22-
},
16+
headers: { cookies: cookieData },
2317
},
2418
});
2519

0 commit comments

Comments
 (0)