@saintbull/vue-rss-parsify
Version:
Parser for rss feeds using allorigins.win api
24 lines (23 loc) • 1.22 kB
JavaScript
import { parseString } from "xml2js";
export default (function RssParsify() {
const parseHTML = element => {
return element.replace(/<\/?[^>]+(>|$)/g, "").replace(/'/g, "'").replace(/"/g, '"').replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/“/g, '"').replace(/”/g, '"').replace(/’/g, "'").replace(/–/g, "-").replace(/…/g, "...").replace(/‘/g, "'").replace(/—/g, "—").replace(/'/g, "'").replace(/ /g, " ").replace(/|/g, "|");
};
const flattenDeep = arr => Array.isArray(arr) ? arr.reduce((a, b) => a.concat(flattenDeep(b)), []) : [arr];
const parseToJSON = async feedUrl => {
const apiToParse = `https://api.allorigins.win/get?url=${feedUrl}`;
const response = await fetch(apiToParse);
const rssData = await response.json();
var jsonData = {};
parseString(rssData.contents, function (err, result) {
jsonData = result;
});
var parsedData = {};
parsedData = [...flattenDeep(jsonData.feed ? jsonData.feed.entry : []), ...flattenDeep(jsonData.rss ? jsonData.rss.channel[0].item : [])];
return parsedData;
};
return {
parseToJSON,
parseHTML
};
}).call(this);