-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
63 lines (56 loc) · 1.74 KB
/
index.js
File metadata and controls
63 lines (56 loc) · 1.74 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
import config from "./config.json" assert { type: "json" };
import { mkdirp } from "mkdirp";
import m3u8ToMp4 from "m3u8-to-mp4";
import api from "api";
import pMap from "p-map";
const sdk = api("@jwp-platform/v1.0#ny7pq12le7jplsf");
sdk.auth(config.token);
const converter = new m3u8ToMp4();
(async function () {
await pMap(
config.sites,
async (site) => {
const mediaMap = [];
try {
console.info(`Processing site: ${site.id} - ${site.name}`);
const sitePath = `${site.id} - ${site.name}`;
await mkdirp(`${config.path}/${sitePath}`);
const { data } = await sdk.getV2SitesSite_idMedia({
page: "1",
page_length: "10000",
sort: "created%3Adsc",
site_id: site.id,
});
data.media.forEach((media) => {
if (media?.id && media?.media_type === "video") {
mediaMap.push({
id: media.id,
title: media?.metadata?.title || media.id,
});
}
});
await pMap(
mediaMap,
async (mediaItem) => {
console.info(
` - Downloading video: ${mediaItem.id} - ${mediaItem.title}`
);
await converter
.setInputFile(
`https://cdn.jwplayer.com/manifests/${mediaItem.id}.m3u8`
)
.setOutputFile(
`${config.path}/${sitePath}/${mediaItem.id} - ${mediaItem.title}.mp4`
)
.start();
},
{ concurrency: config.parallelDownloads }
);
} catch (err) {
console.error({ err, site });
}
},
{ concurrency: 1 }
);
console.info(`Finished processing, files located in: ${config.path}`);
})();