-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathindex.js
71 lines (67 loc) · 1.63 KB
/
index.js
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
const Axios = require("axios");
const config = require("./config");
const shell = require("shelljs");
const fs = require("fs");
const path = require("path");
const axios = Axios.create({
headers: {
Cookie: `_ga=${config._ga}; _gid=${config._gid}; GCID=${
config.GCID
}; GCESS=${config.GCESS}`,
"Content-Type": "application/json"
}
});
async function getList(cid) {
let res = await axios
.post(
"https://time.geekbang.org/serv/v1/column/articles",
{
cid: cid,
order: "earliest",
prev: 0,
sample: false,
size: 50
},
{
headers: {
Referer: `https://time.geekbang.org/course/intro/${cid}`
}
}
)
.catch(err => console.log(err.response));
if (res && res.data.data.list && res.data.data.list.length > 0) {
return res.data.data.list;
} else {
return [];
}
}
async function download(item) {
const localPath = `./download/${item.article_title.replace(
/((\s|\|))/g,
"_"
)}.mp4`;
return new Promise((resolve, reject) => {
if (fs.existsSync(path.resolve(__dirname, localPath))) {
resolve(0);
} else {
shell.exec(
`ffmpeg -i ${item.video_media_map.hd.url} ${localPath}`,
code => {
if (code === 0) {
resolve(0);
} else {
reject();
}
}
);
}
});
}
(async function() {
!fs.existsSync(path.resolve(__dirname, "download")) &&
fs.mkdirSync(path.resolve(__dirname, "download"));
const list = await getList(config.cid);
for await (const item of list) {
await download(item).catch(err => {});
}
})();