-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopensubs.js
More file actions
124 lines (103 loc) · 3.55 KB
/
Copy pathopensubs.js
File metadata and controls
124 lines (103 loc) · 3.55 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
const request = require("request");
const fs = require("fs");
const zlib = require("zlib");
const iconv = require("iconv-lite");
function isUtf8(buffer) {
// Check if buffer is valid UTF-8
try {
return Buffer.from(buffer).toString('utf8').indexOf('\ufffd') === -1;
} catch (e) {
return false;
}
}
function getSubText(url) {
const output = "myfileofsub.txt";
const encoding = "windows-1256";
return new Promise((resolve, reject) => {
request({ url: url, encoding: null }, function (err, resp, body) {
if (err) return reject(err);
zlib.gunzip(body, (err, decompressed) => {
if (err) return reject(err);
try {
let decodedText = decompressed;
if (!isUtf8(decompressed)) {
// Convert using iconv if not UTF-8
decodedText = iconv.decode(decompressed, encoding);
console.log(`File written with encoding: ${encoding}`);
} else {
decodedText = decompressed.toString('utf8');
console.log("File written with encoding: UTF-8");
}
//fs.writeFileSync(output, decodedText);
resolve(decodedText);
} catch (err) {
reject(err);
}
});
});
});
}
function getTvSubs(imdbId, season, episode, sublanguageId="eng") {
const url = `https://rest.opensubtitles.org/search/episode-${episode}/imdbid-${imdbId}/season-${season}/sublanguageid-${sublanguageId}`;
const headers = {
"x-user-agent": "trailers.to-UA",
"content-type": "application/x-www-form-urlencoded; charset=utf-8"
};
return new Promise((resolve, reject) => {
request({ url, headers }, (error, response, body) => {
if (error) {
console.error("Error during request:", error.message);
return reject(error);
}
try {
const jsonData = JSON.parse(body);
if (Array.isArray(jsonData) && jsonData.length > 0) {
const subtitlesInfo = jsonData.map((subtitle) => ({
FileName: subtitle.SubFileName,
SubFormat: subtitle.SubFormat,
SubDownloadLink: subtitle.SubDownloadLink,
}));
resolve(subtitlesInfo);
} else {
resolve([]); // No subtitles found
}
} catch (parseError) {
reject(`Error parsing JSON: ${parseError.message}`);
}
});
});
}
function getMovSubs(imdbId, sublanguageId="eng") {
console.log(sublanguageId);
const url = `https://rest.opensubtitles.org/search/imdbid-${imdbId}/sublanguageid-${sublanguageId}`;
const headers = {
"x-user-agent": "trailers.to-UA",
"content-type": "application/x-www-form-urlencoded; charset=utf-8"
};
return new Promise((resolve, reject) => {
request({ url, headers }, (error, response, body) => {
if (error) {
console.error("Error during request:", error.message);
return reject(error);
}
try {
const jsonData = JSON.parse(body);
if (Array.isArray(jsonData)) {
const subtitlesInfo = jsonData.map((subtitle) => ({
FileName: subtitle.SubFileName,
SubFormat: subtitle.SubFormat,
SubDownloadLink: subtitle.SubDownloadLink,
}));
resolve(subtitlesInfo);
} else {
console.error("Invalid response format:", body);
resolve([]); // No subtitles found
}
} catch (parseError) {
console.error("Error parsing JSON:", parseError.message);
reject(`Error parsing JSON: ${parseError.message}`);
}
});
});
}
module.exports = { getSubText, getMovSubs, getTvSubs };