p2fb
Version:
Generate an Alexa Flash Briefing skill JSON feed from an iTunes podcast XML feed URL.
48 lines (39 loc) • 1.25 kB
JavaScript
const request = require('request-promise')
const parseString = require('xml2js').parseString
const pify = require('pify')
const moment = require('moment')
async function transform(podcastUrl, count) {
if (typeof podcastUrl !== 'string') {
return []
}
try {
const xml = await request(podcastUrl)
const result = await pify(parseString)(xml)
const { channel } = result.rss
const { item: items } = channel[0]
// if 0 or undefined
if (!count) {
count = items.length
}
const flashBriefingJson = items.slice(0, count).map(item => {
const guid = item.guid[0]._ || item.guid[0] || Math.floor(Math.random() * m);
const id = `urn:guid:${guid}`
const date = moment(item.pubDate[0], 'ddd, DD MMM HH:mm:ss').format(`YYYY-MM-DD[T]HH:mm:ss[.0Z]`)
const title = item.title[0]
const audioUrl = item.enclosure[0]['$'].url
const link = item.link[0]
return {
uid: id,
updateDate: date,
titleText: title,
mainText: '', // remains blank for audio flash briefings
streamUrl: audioUrl,
redirectionUrl: link
}
})
return flashBriefingJson
} catch (error) {
return error.message
}
}
module.exports = transform