-
Notifications
You must be signed in to change notification settings - Fork 2
/
generate-episodes-json.ts
42 lines (34 loc) · 1.2 KB
/
generate-episodes-json.ts
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
import { writeFileSync } from "fs";
import { getEpisode, getEpisodes } from "./util/episodes";
import TurndownService from "turndown";
import { MaybeAsync } from "purify-ts/MaybeAsync";
function isHTML(text: string) {
return text.startsWith("<p>") || text.startsWith("<h");
}
async function main() {
const episodes = await getEpisodes(process.env.SIMPLECAST_PODCAST_ID);
writeFileSync("episodes.json.tmp", JSON.stringify(episodes));
const episodeRequests = episodes.collection.map(async (episode) =>
getEpisode("episodes.json.tmp", episode.number.toString())
);
const fullEpisodeDetails = await MaybeAsync.catMaybes(
episodeRequests.map((request) => MaybeAsync.fromPromise(() => request))
);
const episodesWithMarkdownDescription = fullEpisodeDetails.map((episode) => {
// Episodes before 55 have description in markdown, others are in HTML
if (!isHTML(episode.long_description)) {
return episode;
}
return {
...episode,
long_description: new TurndownService({ headingStyle: "atx" }).turndown(
episode.long_description
),
};
});
writeFileSync(
"public/episodes.json",
JSON.stringify(episodesWithMarkdownDescription)
);
}
main();