Created
August 25, 2020 18:13
-
-
Save psynewave/5f5eb7d9dd14a9d07b46326fa43a64b7 to your computer and use it in GitHub Desktop.
Fetch RSS and Convert to JSON
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const RSS_URL = `https://cors-anywhere.herokuapp.com/https://archive.org/services/collection-rss.php?collection=podcast_jeff-regan-the-great-detec_426081250`; | |
const xmlToJson = (xml) => { | |
let obj = {}; | |
try { | |
xml.hasChildNodes(); | |
} catch (err) { | |
xml = new DOMParser().parseFromString(xml, "text/xml"); | |
} | |
if (xml.nodeType === 1) { | |
if (xml.attributes.length > 0) { | |
obj["@attributes"] = {}; | |
for (let j = 0; j < xml.attributes.length; j += 1) { | |
const attribute = xml.attributes.item(j); | |
obj["@attributes"][attribute.nodeName] = attribute.nodeValue; | |
} | |
} | |
} else if (xml.nodeType === 3) { | |
obj = xml.nodeValue; | |
} | |
if ( | |
xml.hasChildNodes() && | |
xml.childNodes.length === 1 && | |
xml.childNodes[0].nodeType === 3 | |
) { | |
obj = xml.childNodes[0].nodeValue; | |
} else if (xml.hasChildNodes()) { | |
for (let i = 0; i < xml.childNodes.length; i += 1) { | |
const item = xml.childNodes.item(i); | |
const nodeName = item.nodeName; | |
if (typeof obj[nodeName] === "undefined") { | |
obj[nodeName] = xmlToJson(item); | |
} else { | |
if (typeof obj[nodeName].push === "undefined") { | |
const old = obj[nodeName]; | |
obj[nodeName] = []; | |
obj[nodeName].push(old); | |
} | |
obj[nodeName].push(xmlToJson(item)); | |
} | |
} | |
} | |
return obj; | |
}; | |
const rssFetch = async () => { | |
const initial = await fetch(RSS_URL); | |
const initialXml = await initial.text(); | |
const xmlJson = xmlToJson(initialXml); | |
return xmlJson; | |
}; | |
rssFetch().then((resp) => { | |
console.log(resp); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment