mirror of
https://github.com/karl0ss/JDRssDownloader.git
synced 2025-04-27 20:03:40 +01:00
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
// Import dependencies
|
|
const fs = require("fs");
|
|
const Parser = require("rss-parser");
|
|
const { filterFeed } = require("./feed");
|
|
|
|
|
|
(async function main() {
|
|
|
|
|
|
// Make a new RSS Parser
|
|
const parser = new Parser();
|
|
|
|
// Get all the items in the RSS feed
|
|
const feed = await parser.parseURL(JSON.parse(fs.readFileSync('config.json')).RSSFeed);
|
|
|
|
let items = [];
|
|
|
|
// Clean up the string and replace reserved characters
|
|
const fileName = `${feed.title.replace(/\s+/g, "-").replace(/[/\\?%*:|"<>]/g, '').toLowerCase()}.json`;
|
|
|
|
if (fs.existsSync(fileName)) {
|
|
items = require(`./${fileName}`);
|
|
}
|
|
|
|
|
|
// Add the items to the items array
|
|
await Promise.all(feed.items.map(async (currentItem) => {
|
|
|
|
// Add a new item if it doesn't already exist
|
|
if (items.filter((item) => isEquivalent(item, currentItem)).length <= 0) {
|
|
items.push(currentItem);
|
|
}
|
|
|
|
}));
|
|
|
|
// Save the file
|
|
fs.writeFileSync(fileName, JSON.stringify(items));
|
|
|
|
// run next part
|
|
filterFeed(fileName)
|
|
})();
|
|
|
|
function isEquivalent(a, b) {
|
|
// Create arrays of property names
|
|
let aProps = Object.getOwnPropertyNames(a);
|
|
let bProps = Object.getOwnPropertyNames(b);
|
|
|
|
// if number of properties is different, objects are not equivalent
|
|
if (aProps.length != bProps.length) {
|
|
return false;
|
|
}
|
|
|
|
for (let i = 0; i < aProps.length; i++) {
|
|
let propName = aProps[i];
|
|
|
|
// if values of same property are not equal, objects are not equivalent
|
|
if (a[propName] !== b[propName]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// if we made it this far, objects are considered equivalent
|
|
return true;
|
|
} |