From 68a0be65f5d32c452c29a6eaff3ca012e4b2fd5e Mon Sep 17 00:00:00 2001 From: "karl.hudgell" Date: Wed, 8 Jun 2022 12:28:30 +0100 Subject: [PATCH] initial commit --- .gitignore | 5 ++++ config-sample.json | 6 +++++ feed.js | 28 ++++++++++++++++++++ jd-link-adder.js | 17 ++++++++++++ main.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 17 ++++++++++++ 6 files changed, 138 insertions(+) create mode 100644 .gitignore create mode 100644 config-sample.json create mode 100644 feed.js create mode 100644 jd-link-adder.js create mode 100644 main.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a7d1922 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.env +node_modules +releasebb.json +config.json +package-lock.json diff --git a/config-sample.json b/config-sample.json new file mode 100644 index 0000000..f473317 --- /dev/null +++ b/config-sample.json @@ -0,0 +1,6 @@ +{ + "RSS_Feed": "", + "Quality": "720", + "Autostart": false, + "Shows": [] +} \ No newline at end of file diff --git a/feed.js b/feed.js new file mode 100644 index 0000000..408629c --- /dev/null +++ b/feed.js @@ -0,0 +1,28 @@ +const extractUrls = require("extract-urls"); +const fs = require('fs') +const { linkAdder } = require('./jd-link-adder'); + +function filterFeed(fileName) { + let myshowlist = JSON.parse(fs.readFileSync('config.json')).Shows + let feed = JSON.parse(fs.readFileSync(fileName)); + + myshowlist.forEach(show => { + try { + let list_filtered_for_show = feed.filter(item => item.title.includes(show)) + let extracted_urls_for_show = extractUrls(list_filtered_for_show[0]["content:encoded"]); + let urls_with_HEVC_in_url = extracted_urls_for_show.filter(item => item.includes('HEVC')) + let urls_with_720_in_url = urls_with_HEVC_in_url.filter(item => item.includes(JSON.parse(fs.readFileSync('config.json')).Quality)) + let urls_without_torrent_in_url = urls_with_720_in_url.filter(item => !item.includes('torrent')) + console.log(urls_without_torrent_in_url) + linkAdder(urls_without_torrent_in_url) + } catch (error) { + console.log(show + ' not on feed') + } + + }) +} + +module.exports = { + filterFeed +} + diff --git a/jd-link-adder.js b/jd-link-adder.js new file mode 100644 index 0000000..d92fced --- /dev/null +++ b/jd-link-adder.js @@ -0,0 +1,17 @@ +const { JDownloaderClient } = require('jdownloader-client') +const fs = require("fs"); + + +async function linkAdder(links) { + const client = new JDownloaderClient(process.env.JDUSERNAME, process.env.JDPASSWORD) + await client.connect() + const devices = await client.listDevices() + const addLinks = await client.linkGrabberAddLinks(devices[0].id, { + links: links, + autostart: JSON.parse(fs.readFileSync('config.json')).Autostart + }) +} + +module.exports = { + linkAdder +} \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..02ee489 --- /dev/null +++ b/main.js @@ -0,0 +1,65 @@ +// Import dependencies +require('dotenv').config() +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')).RSS_Feed); + + 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; +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..b8ecd16 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "jdrssdownloader", + "version": "1.0.0", + "description": "", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Karl0ss", + "license": "ISC", + "dependencies": { + "dotenv": "^16.0.1", + "extract-urls": "^1.3.2", + "jdownloader-client": "^1.0.0", + "rss-parser": "^3.12.0" + } +}