@weroperking/invenio-scraper 1.0.0 → 2.0.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/README.md +202 -134
- package/package.json +1 -1
- package/dist/__fixtures__/download-avatar.json +0 -126
- package/dist/__fixtures__/download-merlin-s1e1.json +0 -90
- package/dist/__fixtures__/search-titanic.json +0 -245
- package/dist/__fixtures__/stream-merlin-s1e1.json +0 -32
- package/dist/__fixtures__/stream-titanic.json +0 -41
- package/dist/details.test.d.ts +0 -2
- package/dist/details.test.d.ts.map +0 -1
- package/dist/details.test.js +0 -65
- package/dist/details.test.js.map +0 -1
- package/dist/download.test.d.ts +0 -2
- package/dist/download.test.d.ts.map +0 -1
- package/dist/download.test.js +0 -202
- package/dist/download.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -10
- package/dist/index.test.js.map +0 -1
- package/dist/search.test.d.ts +0 -2
- package/dist/search.test.d.ts.map +0 -1
- package/dist/search.test.js +0 -67
- package/dist/search.test.js.map +0 -1
- package/dist/series.test.d.ts +0 -2
- package/dist/series.test.d.ts.map +0 -1
- package/dist/series.test.js +0 -78
- package/dist/series.test.js.map +0 -1
- package/dist/session.test.d.ts +0 -2
- package/dist/session.test.d.ts.map +0 -1
- package/dist/session.test.js +0 -111
- package/dist/session.test.js.map +0 -1
- package/dist/stream.test.d.ts +0 -2
- package/dist/stream.test.d.ts.map +0 -1
- package/dist/stream.test.js +0 -77
- package/dist/stream.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# 🎬 invenio-scraper
|
|
1
|
+
# 🎬 @weroperking/invenio-scraper
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/invenio-scraper)
|
|
3
|
+
[](https://www.npmjs.com/package/@weroperking/invenio-scraper)
|
|
4
4
|
[](https://opensource.org/licenses/ISC)
|
|
5
5
|
[](https://nodejs.org)
|
|
6
6
|
[](https://www.typescriptlang.org)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
**@weroperking/invenio-scraper - A web scraping library for extracting movie and TV show data**
|
|
9
9
|
|
|
10
10
|
A resilient, fully-typed JavaScript SDK for interacting with Moviebox APIs.
|
|
11
11
|
|
|
@@ -23,15 +23,15 @@ A resilient, fully-typed JavaScript SDK for interacting with Moviebox APIs.
|
|
|
23
23
|
## 📦 Installation
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
npm install invenio-scraper
|
|
26
|
+
npm install @weroperking/invenio-scraper
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
pnpm add invenio-scraper
|
|
30
|
+
pnpm add @weroperking/invenio-scraper
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
yarn add invenio-scraper
|
|
34
|
+
yarn add @weroperking/invenio-scraper
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
**Requirements:** Node.js 18+
|
|
@@ -44,28 +44,60 @@ import {
|
|
|
44
44
|
search,
|
|
45
45
|
getMovieDetails,
|
|
46
46
|
getMovieStreamUrl
|
|
47
|
-
} from 'invenio-scraper';
|
|
47
|
+
} from '@weroperking/invenio-scraper';
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
async function main(): Promise<void> {
|
|
50
|
+
const session = new MovieboxSession();
|
|
50
51
|
|
|
51
|
-
// Search for content
|
|
52
|
-
const results = await search(session, { query: 'Inception' });
|
|
53
|
-
const first = results.results[0];
|
|
52
|
+
// Search for content
|
|
53
|
+
const results = await search(session, { query: 'Inception' });
|
|
54
|
+
const first = results.results[0];
|
|
54
55
|
|
|
55
|
-
if (first) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
if (first) {
|
|
57
|
+
// Get detailed movie information
|
|
58
|
+
const details = await getMovieDetails(session, {
|
|
59
|
+
detailPath: first.raw.detailPath
|
|
60
|
+
});
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
// Get stream URL
|
|
63
|
+
const stream = await getMovieStreamUrl(session, {
|
|
64
|
+
detailPath: first.raw.detailPath,
|
|
65
|
+
quality: 'best'
|
|
66
|
+
});
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
console.log(`${details.title}: ${stream.stream?.url}`);
|
|
69
|
+
}
|
|
68
70
|
}
|
|
71
|
+
|
|
72
|
+
main().catch((error) => {
|
|
73
|
+
console.error('Error:', error);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 🏃 Running TypeScript Files
|
|
79
|
+
|
|
80
|
+
This SDK is written in TypeScript. To run TypeScript files directly, use [`tsx`](https://github.com/privatenumber/tsx):
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Install tsx globally
|
|
84
|
+
npm install -g tsx
|
|
85
|
+
|
|
86
|
+
# Or add to your project
|
|
87
|
+
npm install -D tsx
|
|
88
|
+
|
|
89
|
+
# Run a TypeScript file
|
|
90
|
+
tsx your-script.ts
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Alternatively, you can compile TypeScript to JavaScript using `tsc` and run with `node`:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Compile TypeScript
|
|
97
|
+
npx tsc your-script.ts
|
|
98
|
+
|
|
99
|
+
# Run the compiled JavaScript
|
|
100
|
+
node your-script.js
|
|
69
101
|
```
|
|
70
102
|
|
|
71
103
|
## 📚 API Overview
|
|
@@ -87,7 +119,7 @@ if (first) {
|
|
|
87
119
|
### Session Options
|
|
88
120
|
|
|
89
121
|
```typescript
|
|
90
|
-
import { MovieboxSession, createLogger } from 'invenio-scraper';
|
|
122
|
+
import { MovieboxSession, createLogger } from '@weroperking/invenio-scraper';
|
|
91
123
|
|
|
92
124
|
const session = new MovieboxSession({
|
|
93
125
|
host: 'h5.aoneroom.com',
|
|
@@ -126,74 +158,95 @@ const session = new MovieboxSession({
|
|
|
126
158
|
### Basic Search
|
|
127
159
|
|
|
128
160
|
```typescript
|
|
129
|
-
import { MovieboxSession, search } from 'invenio-scraper';
|
|
161
|
+
import { MovieboxSession, search } from '@weroperking/invenio-scraper';
|
|
130
162
|
|
|
131
|
-
|
|
163
|
+
async function main(): Promise<void> {
|
|
164
|
+
const session = new MovieboxSession();
|
|
132
165
|
|
|
133
|
-
// Search with filters
|
|
134
|
-
const results = await search(session, {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
});
|
|
166
|
+
// Search with filters
|
|
167
|
+
const results = await search(session, {
|
|
168
|
+
query: 'The Matrix',
|
|
169
|
+
type: 'movie', // 'all' | 'movie' | 'tv' | 'music'
|
|
170
|
+
page: 1,
|
|
171
|
+
perPage: 20
|
|
172
|
+
});
|
|
140
173
|
|
|
141
|
-
console.log(`Found ${results.totalCount} results`);
|
|
142
|
-
console.log(`Has more: ${results.hasMore}`);
|
|
174
|
+
console.log(`Found ${results.totalCount} results`);
|
|
175
|
+
console.log(`Has more: ${results.hasMore}`);
|
|
143
176
|
|
|
144
|
-
for (const item of results.results) {
|
|
145
|
-
|
|
177
|
+
for (const item of results.results) {
|
|
178
|
+
console.log(`${item.title} (${item.releaseYear ?? 'N/A'}) - ${item.rating}/10`);
|
|
179
|
+
}
|
|
146
180
|
}
|
|
181
|
+
|
|
182
|
+
main().catch((error) => {
|
|
183
|
+
console.error('Error:', error);
|
|
184
|
+
process.exit(1);
|
|
185
|
+
});
|
|
147
186
|
```
|
|
148
187
|
|
|
149
188
|
### Getting Movie Details
|
|
150
189
|
|
|
151
190
|
```typescript
|
|
152
|
-
import { MovieboxSession, getMovieDetails } from 'invenio-scraper';
|
|
191
|
+
import { MovieboxSession, getMovieDetails } from '@weroperking/invenio-scraper';
|
|
153
192
|
|
|
154
|
-
|
|
193
|
+
async function main(): Promise<void> {
|
|
194
|
+
const session = new MovieboxSession();
|
|
155
195
|
|
|
156
|
-
const details = await getMovieDetails(session, {
|
|
157
|
-
|
|
158
|
-
});
|
|
196
|
+
const details = await getMovieDetails(session, {
|
|
197
|
+
detailPath: 'inception-e1BOR6f19C7'
|
|
198
|
+
});
|
|
159
199
|
|
|
160
|
-
console.log(`Title: ${details.title}`);
|
|
161
|
-
console.log(`Synopsis: ${details.synopsis}`);
|
|
162
|
-
console.log(`Rating: ${details.rating}/10 (${details.ratingCount} votes)`);
|
|
163
|
-
console.log(`Duration: ${details.durationLabel}`);
|
|
164
|
-
console.log(`Genres: ${details.genres.join(', ')}`);
|
|
200
|
+
console.log(`Title: ${details.title}`);
|
|
201
|
+
console.log(`Synopsis: ${details.synopsis}`);
|
|
202
|
+
console.log(`Rating: ${details.rating}/10 (${details.ratingCount} votes)`);
|
|
203
|
+
console.log(`Duration: ${details.durationLabel}`);
|
|
204
|
+
console.log(`Genres: ${details.genres.join(', ')}`);
|
|
165
205
|
|
|
166
|
-
// Available download qualities
|
|
167
|
-
for (const download of details.downloads) {
|
|
168
|
-
|
|
169
|
-
}
|
|
206
|
+
// Available download qualities
|
|
207
|
+
for (const download of details.downloads) {
|
|
208
|
+
console.log(`${download.quality}: ${(download.sizeBytes / 1024 / 1024).toFixed(1)} MB`);
|
|
209
|
+
}
|
|
170
210
|
|
|
171
|
-
// Available subtitles
|
|
172
|
-
for (const caption of details.captions) {
|
|
173
|
-
|
|
211
|
+
// Available subtitles
|
|
212
|
+
for (const caption of details.captions) {
|
|
213
|
+
console.log(`Subtitle: ${caption.language}`);
|
|
214
|
+
}
|
|
174
215
|
}
|
|
216
|
+
|
|
217
|
+
main().catch((error) => {
|
|
218
|
+
console.error('Error:', error);
|
|
219
|
+
process.exit(1);
|
|
220
|
+
});
|
|
175
221
|
```
|
|
176
222
|
|
|
177
223
|
### Downloading with Progress
|
|
178
224
|
|
|
179
225
|
```typescript
|
|
180
|
-
import { MovieboxSession, downloadMovie } from 'invenio-scraper';
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
226
|
+
import { MovieboxSession, downloadMovie } from '@weroperking/invenio-scraper';
|
|
227
|
+
|
|
228
|
+
async function main(): Promise<void> {
|
|
229
|
+
const session = new MovieboxSession();
|
|
230
|
+
|
|
231
|
+
const filePath = await downloadMovie(session, {
|
|
232
|
+
detailPath: 'inception-e1BOR6f19C7',
|
|
233
|
+
quality: 1080, // or 'best' | 'worst' | number
|
|
234
|
+
outputDir: './downloads',
|
|
235
|
+
mode: 'resume', // 'auto' | 'resume' | 'overwrite'
|
|
236
|
+
onProgress: ({ downloadedBytes, totalBytes, percentage }) => {
|
|
237
|
+
const mb = (downloadedBytes / 1024 / 1024).toFixed(1);
|
|
238
|
+
const total = ((totalBytes ?? 0) / 1024 / 1024).toFixed(1);
|
|
239
|
+
process.stdout.write(`\r${mb}MB / ${total}MB (${percentage ?? 0}%)`);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
console.log(`\nSaved to: ${filePath}`);
|
|
244
|
+
}
|
|
195
245
|
|
|
196
|
-
|
|
246
|
+
main().catch((error) => {
|
|
247
|
+
console.error('Error:', error);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
});
|
|
197
250
|
```
|
|
198
251
|
|
|
199
252
|
### Series & Episodes
|
|
@@ -206,58 +259,65 @@ import {
|
|
|
206
259
|
getEpisodeQualities,
|
|
207
260
|
getEpisodeStreamUrl,
|
|
208
261
|
downloadEpisode
|
|
209
|
-
} from 'invenio-scraper';
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
262
|
+
} from '@weroperking/invenio-scraper';
|
|
263
|
+
|
|
264
|
+
async function main(): Promise<void> {
|
|
265
|
+
const session = new MovieboxSession();
|
|
266
|
+
|
|
267
|
+
// Search for a series
|
|
268
|
+
const results = await search(session, { query: 'Breaking Bad', type: 'tv' });
|
|
269
|
+
const series = results.results.find(r => r.type === 'tv');
|
|
270
|
+
|
|
271
|
+
if (series) {
|
|
272
|
+
// Get series details
|
|
273
|
+
const details = await getSeriesDetails(session, {
|
|
274
|
+
detailPath: series.raw.detailPath
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
console.log(`${details.title} — ${details.seasons?.length} seasons`);
|
|
278
|
+
|
|
279
|
+
// Get episode qualities
|
|
280
|
+
const qualities = await getEpisodeQualities(session, {
|
|
281
|
+
detailPath: series.raw.detailPath,
|
|
282
|
+
season: 1,
|
|
283
|
+
episode: 1
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
console.log('Available qualities:', qualities.downloads.map(d => d.quality));
|
|
287
|
+
|
|
288
|
+
// Get stream URL
|
|
289
|
+
const stream = await getEpisodeStreamUrl(session, {
|
|
290
|
+
detailPath: series.raw.detailPath,
|
|
291
|
+
season: 1,
|
|
292
|
+
episode: 1,
|
|
293
|
+
quality: 'best'
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
console.log('Stream URL:', stream.stream?.url);
|
|
297
|
+
|
|
298
|
+
// Download episode
|
|
299
|
+
const filePath = await downloadEpisode(session, {
|
|
300
|
+
detailPath: series.raw.detailPath,
|
|
301
|
+
season: 1,
|
|
302
|
+
episode: 1,
|
|
303
|
+
quality: 720,
|
|
304
|
+
outputDir: './downloads'
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
console.log('Downloaded:', filePath);
|
|
308
|
+
}
|
|
254
309
|
}
|
|
310
|
+
|
|
311
|
+
main().catch((error) => {
|
|
312
|
+
console.error('Error:', error);
|
|
313
|
+
process.exit(1);
|
|
314
|
+
});
|
|
255
315
|
```
|
|
256
316
|
|
|
257
317
|
### Proxy Configuration
|
|
258
318
|
|
|
259
319
|
```typescript
|
|
260
|
-
import { MovieboxSession } from 'invenio-scraper';
|
|
320
|
+
import { MovieboxSession } from '@weroperking/invenio-scraper';
|
|
261
321
|
|
|
262
322
|
// HTTP proxy
|
|
263
323
|
const session = new MovieboxSession({
|
|
@@ -286,31 +346,39 @@ import {
|
|
|
286
346
|
GeoBlockedError,
|
|
287
347
|
MirrorExhaustedError,
|
|
288
348
|
RetryLimitExceededError
|
|
289
|
-
} from 'invenio-scraper';
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
349
|
+
} from '@weroperking/invenio-scraper';
|
|
350
|
+
|
|
351
|
+
async function main(): Promise<void> {
|
|
352
|
+
const session = new MovieboxSession();
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
const results = await search(session, { query: 'Inception' });
|
|
356
|
+
console.log(`Found ${results.totalCount} results`);
|
|
357
|
+
} catch (error) {
|
|
358
|
+
if (error instanceof GeoBlockedError) {
|
|
359
|
+
console.error('Content is geo-blocked in your region');
|
|
360
|
+
} else if (error instanceof MirrorExhaustedError) {
|
|
361
|
+
console.error('All mirrors failed:', error.failures);
|
|
362
|
+
} else if (error instanceof RetryLimitExceededError) {
|
|
363
|
+
console.error(`Failed after ${error.attempts} attempts`);
|
|
364
|
+
} else if (error instanceof MovieboxHttpError) {
|
|
365
|
+
console.error(`HTTP ${error.status} error for ${error.url}`);
|
|
366
|
+
} else if (error instanceof MovieboxApiError) {
|
|
367
|
+
console.error('API error:', error.message);
|
|
368
|
+
}
|
|
306
369
|
}
|
|
307
370
|
}
|
|
371
|
+
|
|
372
|
+
main().catch((error) => {
|
|
373
|
+
console.error('Error:', error);
|
|
374
|
+
process.exit(1);
|
|
375
|
+
});
|
|
308
376
|
```
|
|
309
377
|
|
|
310
378
|
### Custom Logger
|
|
311
379
|
|
|
312
380
|
```typescript
|
|
313
|
-
import { MovieboxSession, createLogger, createNoopLogger } from 'invenio-scraper';
|
|
381
|
+
import { MovieboxSession, createLogger, createNoopLogger } from '@weroperking/invenio-scraper';
|
|
314
382
|
|
|
315
383
|
// Enable logging
|
|
316
384
|
const session = new MovieboxSession({
|
|
@@ -350,7 +418,7 @@ import type {
|
|
|
350
418
|
StreamResult,
|
|
351
419
|
DownloadProgress,
|
|
352
420
|
Logger
|
|
353
|
-
} from 'invenio-scraper';
|
|
421
|
+
} from '@weroperking/invenio-scraper';
|
|
354
422
|
```
|
|
355
423
|
|
|
356
424
|
## 📄 Documentation
|
package/package.json
CHANGED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"code": 0,
|
|
3
|
-
"message": "ok",
|
|
4
|
-
"data": {
|
|
5
|
-
"downloads": [
|
|
6
|
-
{
|
|
7
|
-
"id": "3790310583266853480",
|
|
8
|
-
"url": "https://bcdnw.hakunaymatata.com/bt/306d0e9a2acc0f4d192f31c9095b80a4.mp4?sign=eba469176a59ba4498d5949bd97d2fd1&t=1763025319",
|
|
9
|
-
"resolution": 360,
|
|
10
|
-
"size": "434972896"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"id": "4645687748723180736",
|
|
14
|
-
"url": "https://bcdnw.hakunaymatata.com/resource/8f5faef179e8906a2e50b3b6ffb2fb4c.mp4?sign=e711b619a98698faf961fcbfe32bee0e&t=1763026761",
|
|
15
|
-
"resolution": 480,
|
|
16
|
-
"size": "874797261"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "8689459235262005880",
|
|
20
|
-
"url": "https://bcdnw.hakunaymatata.com/resource/ed322112b874e19b0c6af6239c6fdf0b.mp4?sign=58677e8952fe354e24fccae2a704560c&t=1763027663",
|
|
21
|
-
"resolution": 720,
|
|
22
|
-
"size": "2097433997"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"id": "834314734957724416",
|
|
26
|
-
"url": "https://bcdnw.hakunaymatata.com/resource/51f86f8256537ccbbdbacdf1a679961e.mp4?sign=9adc4bc891563ed6d79d2b9999f05f51&t=1763028461",
|
|
27
|
-
"resolution": 1080,
|
|
28
|
-
"size": "4134165328"
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
"captions": [
|
|
32
|
-
{
|
|
33
|
-
"id": "6174305433189499136",
|
|
34
|
-
"lan": "ar",
|
|
35
|
-
"lanName": "اَلْعَرَبِيَّةُ",
|
|
36
|
-
"url": "https://cacdn.hakunaymatata.com/subtitle/948c4db26a6d345360769b06fc40b356.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9zdWJ0aXRsZS8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=L1K8OvrL7zEKR1tk3N3FIWNSRuYMJz6PvdVqDZ1IiVzPuktlqVNKA3MJgFiYUS5F68Ck6WixgIO6hA80Dio78bjYk4ZYl-ihv1d1ZFMfWtBj4Reu2jfNe5xzkXJptpCBA0AjdjNvv5AMZfTZk8Kq~1kJpVpHpN6x1y45zc7M-xTSSMLXsaV4O7mez6XKW7Pb1IAhkNjfJ3vp9D4oHKgT-9wEMk2GixI6EV-Q9hq1qNxOk3RUlFGJLJnbNVU331JRiufEGdZwtp148sQR85sxO1vfGphjDuplH6~~ItYaCaI34wsG97WqOUaqda2ZyPo0UYm3cmhjzLODkAlGP3s9iA__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
37
|
-
"size": "169092",
|
|
38
|
-
"delay": 0
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"id": "5060704399811559688",
|
|
42
|
-
"lan": "bn",
|
|
43
|
-
"lanName": "বাংলা",
|
|
44
|
-
"url": "https://cacdn.hakunaymatata.com/msubt/8b7b8df83c85bc5c83041f7683fcf257.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9tc3VidC8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=7ZjG0d3xTz66ye1qHmBejuSXWVE252BoKS1UCQ4bgfB16eZNBl9sBRN9jY76wqJAt1u9PJapSP2BBiNsDsiWT1Z5rFW5hKODqRjJCA6Z-YqfWLEQD9R3MlQv9NecvEwmGuY1feWLb1PWD2xfhkmsNhHxSwptIWAew7y7lcUL56EUFdmjO2OXVsWrkgYiFgO02jsNdHJilvIOH4Ru7GkVrbH4LlGcQdaL6HX7zf4cJtwIPt9jOW-czAvvyZPcifyH0pyjNHuWW7sflHBPMotSp6Eiu9ywUifSo-WPK174x7qcucrDzZDJD73yM9LaNa6a~CbD-bBw7krC~VDkHBHOag__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
45
|
-
"size": "301930",
|
|
46
|
-
"delay": 0
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"id": "1411642237431284344",
|
|
50
|
-
"lan": "en",
|
|
51
|
-
"lanName": "English",
|
|
52
|
-
"url": "https://cacdn.hakunaymatata.com/subtitle/8c36ad2a402cd9a21748596d197f5f0f.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9zdWJ0aXRsZS8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=L1K8OvrL7zEKR1tk3N3FIWNSRuYMJz6PvdVqDZ1IiVzPuktlqVNKA3MJgFiYUS5F68Ck6WixgIO6hA80Dio78bjYk4ZYl-ihv1d1ZFMfWtBj4Reu2jfNe5xzkXJptpCBA0AjdjNvv5AMZfTZk8Kq~1kJpVpHpN6x1y45zc7M-xTSSMLXsaV4O7mez6XKW7Pb1IAhkNjfJ3vp9D4oHKgT-9wEMk2GixI6EV-Q9hq1qNxOk3RUlFGJLJnbNVU331JRiufEGdZwtp148sQR85sxO1vfGphjDuplH6~~ItYaCaI34wsG97WqOUaqda2ZyPo0UYm3cmhjzLODkAlGP3s9iA__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
53
|
-
"size": "189486",
|
|
54
|
-
"delay": 0
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"id": "8698843652904419488",
|
|
58
|
-
"lan": "fil",
|
|
59
|
-
"lanName": "Filipino",
|
|
60
|
-
"url": "https://cacdn.hakunaymatata.com/msubt/a051cab7be3270b66ba8c81dc2b23762.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9tc3VidC8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=7ZjG0d3xTz66ye1qHmBejuSXWVE252BoKS1UCQ4bgfB16eZNBl9sBRN9jY76wqJAt1u9PJapSP2BBiNsDsiWT1Z5rFW5hKODqRjJCA6Z-YqfWLEQD9R3MlQv9NecvEwmGuY1feWLb1PWD2xfhkmsNhHxSwptIWAew7y7lcUL56EUFdmjO2OXVsWrkgYiFgO02jsNdHJilvIOH4Ru7GkVrbH4LlGcQdaL6HX7zf4cJtwIPt9jOW-czAvvyZPcifyH0pyjNHuWW7sflHBPMotSp6Eiu9ywUifSo-WPK174x7qcucrDzZDJD73yM9LaNa6a~CbD-bBw7krC~VDkHBHOag__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
61
|
-
"size": "194604",
|
|
62
|
-
"delay": 0
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"id": "8214277814707782296",
|
|
66
|
-
"lan": "fr",
|
|
67
|
-
"lanName": "Français",
|
|
68
|
-
"url": "https://cacdn.hakunaymatata.com/msubt/75ae65ef569b6cd9660e7cf6b39167b1.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9tc3VidC8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=7ZjG0d3xTz66ye1qHmBejuSXWVE252BoKS1UCQ4bgfB16eZNBl9sBRN9jY76wqJAt1u9PJapSP2BBiNsDsiWT1Z5rFW5hKODqRjJCA6Z-YqfWLEQD9R3MlQv9NecvEwmGuY1feWLb1PWD2xfhkmsNhHxSwptIWAew7y7lcUL56EUFdmjO2OXVsWrkgYiFgO02jsNdHJilvIOH4Ru7GkVrbH4LlGcQdaL6HX7zf4cJtwIPt9jOW-czAvvyZPcifyH0pyjNHuWW7sflHBPMotSp6Eiu9ywUifSo-WPK174x7qcucrDzZDJD73yM9LaNa6a~CbD-bBw7krC~VDkHBHOag__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
69
|
-
"size": "194671",
|
|
70
|
-
"delay": 0
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"id": "1130273850534626080",
|
|
74
|
-
"lan": "in_id",
|
|
75
|
-
"lanName": "Indonesian",
|
|
76
|
-
"url": "https://cacdn.hakunaymatata.com/subtitle/5efa24446ba76b5b6fcaae3995c26527.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9zdWJ0aXRsZS8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=L1K8OvrL7zEKR1tk3N3FIWNSRuYMJz6PvdVqDZ1IiVzPuktlqVNKA3MJgFiYUS5F68Ck6WixgIO6hA80Dio78bjYk4ZYl-ihv1d1ZFMfWtBj4Reu2jfNe5xzkXJptpCBA0AjdjNvv5AMZfTZk8Kq~1kJpVpHpN6x1y45zc7M-xTSSMLXsaV4O7mez6XKW7Pb1IAhkNjfJ3vp9D4oHKgT-9wEMk2GixI6EV-Q9hq1qNxOk3RUlFGJLJnbNVU331JRiufEGdZwtp148sQR85sxO1vfGphjDuplH6~~ItYaCaI34wsG97WqOUaqda2ZyPo0UYm3cmhjzLODkAlGP3s9iA__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
77
|
-
"size": "143431",
|
|
78
|
-
"delay": 0
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"id": "2464300049795352128",
|
|
82
|
-
"lan": "pa",
|
|
83
|
-
"lanName": "ਪੰਜਾਬੀ",
|
|
84
|
-
"url": "https://cacdn.hakunaymatata.com/msubt/c64b0ae2c824791dee9aa54ee6028b0f.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9tc3VidC8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=7ZjG0d3xTz66ye1qHmBejuSXWVE252BoKS1UCQ4bgfB16eZNBl9sBRN9jY76wqJAt1u9PJapSP2BBiNsDsiWT1Z5rFW5hKODqRjJCA6Z-YqfWLEQD9R3MlQv9NecvEwmGuY1feWLb1PWD2xfhkmsNhHxSwptIWAew7y7lcUL56EUFdmjO2OXVsWrkgYiFgO02jsNdHJilvIOH4Ru7GkVrbH4LlGcQdaL6HX7zf4cJtwIPt9jOW-czAvvyZPcifyH0pyjNHuWW7sflHBPMotSp6Eiu9ywUifSo-WPK174x7qcucrDzZDJD73yM9LaNa6a~CbD-bBw7krC~VDkHBHOag__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
85
|
-
"size": "305852",
|
|
86
|
-
"delay": 0
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"id": "9128666788744626840",
|
|
90
|
-
"lan": "pt",
|
|
91
|
-
"lanName": "Português",
|
|
92
|
-
"url": "https://cacdn.hakunaymatata.com/subtitle/a64dd7891d4e8a35003d1c1e21ce87d8.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9zdWJ0aXRsZS8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=L1K8OvrL7zEKR1tk3N3FIWNSRuYMJz6PvdVqDZ1IiVzPuktlqVNKA3MJgFiYUS5F68Ck6WixgIO6hA80Dio78bjYk4ZYl-ihv1d1ZFMfWtBj4Reu2jfNe5xzkXJptpCBA0AjdjNvv5AMZfTZk8Kq~1kJpVpHpN6x1y45zc7M-xTSSMLXsaV4O7mez6XKW7Pb1IAhkNjfJ3vp9D4oHKgT-9wEMk2GixI6EV-Q9hq1qNxOk3RUlFGJLJnbNVU331JRiufEGdZwtp148sQR85sxO1vfGphjDuplH6~~ItYaCaI34wsG97WqOUaqda2ZyPo0UYm3cmhjzLODkAlGP3s9iA__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
93
|
-
"size": "145936",
|
|
94
|
-
"delay": 0
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"id": "6120448891034240320",
|
|
98
|
-
"lan": "ru",
|
|
99
|
-
"lanName": "Русский",
|
|
100
|
-
"url": "https://cacdn.hakunaymatata.com/msubt/caaa6ade4896ea3dedcfc49faeac3e97.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9tc3VidC8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=7ZjG0d3xTz66ye1qHmBejuSXWVE252BoKS1UCQ4bgfB16eZNBl9sBRN9jY76wqJAt1u9PJapSP2BBiNsDsiWT1Z5rFW5hKODqRjJCA6Z-YqfWLEQD9R3MlQv9NecvEwmGuY1feWLb1PWD2xfhkmsNhHxSwptIWAew7y7lcUL56EUFdmjO2OXVsWrkgYiFgO02jsNdHJilvIOH4Ru7GkVrbH4LlGcQdaL6HX7zf4cJtwIPt9jOW-czAvvyZPcifyH0pyjNHuWW7sflHBPMotSp6Eiu9ywUifSo-WPK174x7qcucrDzZDJD73yM9LaNa6a~CbD-bBw7krC~VDkHBHOag__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
101
|
-
"size": "227561",
|
|
102
|
-
"delay": 0
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"id": "1725586977921070040",
|
|
106
|
-
"lan": "ur",
|
|
107
|
-
"lanName": "اُردُو",
|
|
108
|
-
"url": "https://cacdn.hakunaymatata.com/msubt/8a68518c580cca419afc888f562a2209.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9tc3VidC8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=7ZjG0d3xTz66ye1qHmBejuSXWVE252BoKS1UCQ4bgfB16eZNBl9sBRN9jY76wqJAt1u9PJapSP2BBiNsDsiWT1Z5rFW5hKODqRjJCA6Z-YqfWLEQD9R3MlQv9NecvEwmGuY1feWLb1PWD2xfhkmsNhHxSwptIWAew7y7lcUL56EUFdmjO2OXVsWrkgYiFgO02jsNdHJilvIOH4Ru7GkVrbH4LlGcQdaL6HX7zf4cJtwIPt9jOW-czAvvyZPcifyH0pyjNHuWW7sflHBPMotSp6Eiu9ywUifSo-WPK174x7qcucrDzZDJD73yM9LaNa6a~CbD-bBw7krC~VDkHBHOag__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
109
|
-
"size": "243647",
|
|
110
|
-
"delay": 0
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
"id": "842043474382833832",
|
|
114
|
-
"lan": "zh",
|
|
115
|
-
"lanName": "中文",
|
|
116
|
-
"url": "https://cacdn.hakunaymatata.com/subtitle/7d6471b79c8ca64df92ac0ab42422056.srt?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jYWNkbi5oYWt1bmF5bWF0YXRhLmNvbS9zdWJ0aXRsZS8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzYzNjMzMzA0fX19XX0_&Signature=L1K8OvrL7zEKR1tk3N3FIWNSRuYMJz6PvdVqDZ1IiVzPuktlqVNKA3MJgFiYUS5F68Ck6WixgIO6hA80Dio78bjYk4ZYl-ihv1d1ZFMfWtBj4Reu2jfNe5xzkXJptpCBA0AjdjNvv5AMZfTZk8Kq~1kJpVpHpN6x1y45zc7M-xTSSMLXsaV4O7mez6XKW7Pb1IAhkNjfJ3vp9D4oHKgT-9wEMk2GixI6EV-Q9hq1qNxOk3RUlFGJLJnbNVU331JRiufEGdZwtp148sQR85sxO1vfGphjDuplH6~~ItYaCaI34wsG97WqOUaqda2ZyPo0UYm3cmhjzLODkAlGP3s9iA__&Key-Pair-Id=KMHN1LQ1HEUPL",
|
|
117
|
-
"size": "127218",
|
|
118
|
-
"delay": 0
|
|
119
|
-
}
|
|
120
|
-
],
|
|
121
|
-
"limited": false,
|
|
122
|
-
"limitedCode": "",
|
|
123
|
-
"freeNum": 6,
|
|
124
|
-
"hasResource": true
|
|
125
|
-
}
|
|
126
|
-
}
|