Files
einundzwanzig.space/tasks/fetch_feed.js
2020-10-05 15:17:34 +02:00

48 lines
1.5 KiB
JavaScript

const { writeFileSync } = require('fs')
const { join, resolve } = require('path')
const Parser = require('rss-parser')
const dir = resolve(__dirname, '..', 'generated')
const write = (name, data) => writeFileSync(join(dir, `${name}.json`), JSON.stringify(data, null, 2))
const parseInfo = e => {
const titleMatch = e.title.match(/([\w\s]+?)?\s?#(\d+) - (.*)/)
const [, categoryName = 'News', number, titlePlain] = titleMatch ? titleMatch : [,,,e.title]
const blockMatch = e.contentSnippet.match(/Blockzeit\s(\d+)/)
const block = blockMatch ? parseInt(blockMatch[1]) : null
const category = categoryName.toLowerCase().replace(/\W/, '-')
return { block, category, categoryName, number, titlePlain }
}
;(async () => {
const parser = new Parser()
const feed = await parser.parseURL('https://anchor.fm/s/d8d3c38/podcast/rss')
// Original Anchor-Feed
write('feed', feed)
// All episodes
const episodes = feed.items.map(e => ({
title: e.title.trim(),
content: e.content.trim(),
anchor: e.link,
date: e.isoDate,
enclosure: e.enclosure,
duration: e.itunes.duration,
image: e.itunes.image,
season: e.itunes.season,
episode: e.itunes.episode,
guid: e.guid,
...parseInfo(e)
}))
write('episodes', episodes)
// By category/season
write('news', episodes.filter(e => e.category === 'news'))
write('der-weg', episodes.filter(e => e.category === 'der-weg'))
write('interview', episodes.filter(e => e.category === 'interview'))
write('lesestunde', episodes.filter(e => e.category === 'lesestunde'))
})()