-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathjsonExtractor.js
More file actions
36 lines (29 loc) · 1.16 KB
/
jsonExtractor.js
File metadata and controls
36 lines (29 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const proxyConfig = require('./proxyConfig');
async function extractTikTokData(tiktokUrl) {
try {
const response = await fetch(tiktokUrl, { agent: proxyConfig.getAgent() });
const redirectedResponse = await fetch(response.url, { agent: proxyConfig.getAgent() });
const cookies = redirectedResponse.headers.entries();
let cookieString = '';
for (const [name, value] of cookies) {
if (name.toLowerCase() === 'set-cookie') {
cookieString += value + '; ';
}
}
const html = await redirectedResponse.text();
const scriptRegex = /<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__" type="application\/json">(.*?)<\/script>/;
const match = html.match(scriptRegex);
if (!match || !match[1]) {
throw new Error('Video data not found');
}
const jsonData = JSON.parse(match[1]);
const videoDetail = jsonData.__DEFAULT_SCOPE__['webapp.video-detail'];
return {
jsonData: videoDetail,
cookieString
};
} catch (error) {
throw error;
}
}
module.exports = { extractTikTokData };