Merge pull request #4 from karl0ss/hevcSwitch

Hevc switch
This commit is contained in:
Karl Hudgell 2022-06-18 10:14:10 +01:00 committed by GitHub
commit 173be22b54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 94 additions and 47 deletions

View File

@ -1,41 +1,62 @@
const fs = require('fs') const fs = require('fs')
const { linkAdder } = require('./JDLinkAdder'); const { linkAdder } = require('./JDLinkAdder');
const { getLinksFromURL } = require('./LinkGrabber') const { getLinksFromURL } = require('./LinkGrabber')
const { checkFileName } = require('./checkFileName')
async function filterFeed() { async function filterFeed() {
let myshowlist = JSON.parse(fs.readFileSync('config.json')).Shows let myshowlist = JSON.parse(fs.readFileSync('config.json')).Shows
let hevcSwitch = JSON.parse(fs.readFileSync('config.json')).OnlyHEVC
let feed = JSON.parse(fs.readFileSync('./feedCache.json')); let feed = JSON.parse(fs.readFileSync('./feedCache.json'));
let retry_show_cache = []
let urls_to_check = []
for (let show of myshowlist) {
myshowlist.forEach(async show => {
try { try {
// Find show on feed // Find show on feed
let list_filtered_for_show = feed.filter(item => item.title.includes(show.Name)) let list_filtered_for_show = feed.filter(item => item.title.includes(show.Name))
if (list_filtered_for_show.length > 0) { if (list_filtered_for_show.length > 0) {
for (let match of list_filtered_for_show) {
// If show is found get url then return all links on that page // If show is found get url then return all links on that page
let full_link_list_from_page = await getLinksFromURL(list_filtered_for_show[0].link) let full_link_list_from_page = await getLinksFromURL(match.link)
if (hevcSwitch) {
// Only get urls with HEVC in name // Only get urls with HEVC in name
let urls_with_HEVC_in_url = full_link_list_from_page.filter(item => item.includes('HEVC')) urls_to_check = full_link_list_from_page.filter(item => item.includes('HEVC'))
if (urls_with_HEVC_in_url.length == 0) { if (urls_to_check.length == 0) {
// If no urls with HEVC check for H265 // If no urls with HEVC check for H265
urls_with_HEVC_in_url = full_link_list_from_page.filter(item => item.includes('H265')) urls_to_check = full_link_list_from_page.filter(item => item.includes('H265'))
}
} else {
urls_to_check = full_link_list_from_page
} }
// Only keep urls that match show quality // Only keep urls that match show quality
let urls_with_quality_in_url = urls_with_HEVC_in_url.filter(item => item.includes(show.Quality)) let urls_with_quality_in_url = urls_to_check.filter(item => item.includes(show.Quality))
// Remove any url trying to direct to a torrent site search // Remove any url trying to direct to a torrent site search
let urls_without_torrent_in_url = urls_with_quality_in_url.filter(item => !item.includes('torrent')) let urls_without_torrent_in_url = urls_with_quality_in_url.filter(item => !item.includes('torrent'))
// Remove any url that doesn't include MeGusta // Remove any url that doesn't include MeGusta
let only_MeGusta_links = urls_without_torrent_in_url.filter(item => item.includes('MeGusta')) if (hevcSwitch) {
pre_nitroFlare = urls_without_torrent_in_url.filter(item => item.includes('MeGusta'))
} else {
pre_nitroFlare = urls_without_torrent_in_url
}
// NitroFlare doesn't group with the rest of the links in JD, remove them. // NitroFlare doesn't group with the rest of the links in JD, remove them.
let remove_nitroflare = only_MeGusta_links.filter(item => !item.includes('nitro')) let remove_nitroflare = pre_nitroFlare.filter(item => !item.includes('nitro'))
// Do some stuff
urlObj = checkFileName(remove_nitroflare)
let download_list = urlObj.urlList
// Send Links to JDdownloader // Send Links to JDdownloader
if (remove_nitroflare.length !== 0) { if (download_list.length !== 0) {
log.info(remove_nitroflare.length + ' links for ' + show.Name + ' have been sent to JDdownloader') log.info(download_list.length + ' links for ' + urlObj.fileName + ' have been sent to JDdownloader')
linkAdder(remove_nitroflare) linkAdder(download_list)
} else { } else {
// No HEVC links found // No HEVC links found
log.info(remove_nitroflare.length + ' HEVC links for ' + show.Name + ' have been found') log.info(download_list.length + ' links for ' + show.Name + ' have been found, will recheck next time.')
for (let feed_item of list_filtered_for_show) {
retry_show_cache.push(feed_item)
}
}
} }
} else { } else {
// Show not found on the current feed cache // Show not found on the current feed cache
log.info(show.Name + ' not on feed') log.info(show.Name + ' not on feed')
@ -43,10 +64,9 @@ async function filterFeed() {
} catch (error) { } catch (error) {
log.error('Something went wrong ' + error) log.error('Something went wrong ' + error)
} }
}
}) log.info('Wiping feed cache')
// log.info('Wiping feed cache') fs.writeFileSync('./feedCache.json', JSON.stringify(retry_show_cache));
// fs.writeFileSync(global.fileName, JSON.stringify('[]'));
} }
module.exports = { module.exports = {

View File

@ -6,6 +6,7 @@ global.log = require('simple-node-logger').createSimpleLogger({
timestampFormat: 'YYYY-MM-DD HH:mm:ss.SSS' timestampFormat: 'YYYY-MM-DD HH:mm:ss.SSS'
}); });
async function main() {
let RSSFeedRefreshMins = JSON.parse(fs.readFileSync('config.json')).RSSFeedRefreshMins let RSSFeedRefreshMins = JSON.parse(fs.readFileSync('config.json')).RSSFeedRefreshMins
let JDPostLinksMins = JSON.parse(fs.readFileSync('config.json')).JDPostLinksMins let JDPostLinksMins = JSON.parse(fs.readFileSync('config.json')).JDPostLinksMins
@ -13,5 +14,8 @@ log.info('Refreshing RSS Items every ' + RSSFeedRefreshMins + ' Minutes')
log.info('Checking for links and sending to JDdownloader every ' + JDPostLinksMins + ' Minutes') log.info('Checking for links and sending to JDdownloader every ' + JDPostLinksMins + ' Minutes')
setInterval(feedUpdater, RSSFeedRefreshMins * 60000); setInterval(await feedUpdater, RSSFeedRefreshMins * 60000);
setInterval(filterFeed, JDPostLinksMins * 60000); setInterval(await filterFeed, JDPostLinksMins * 60000);
}
main()

View File

@ -11,17 +11,19 @@ I have put together this simple project to allow me to do that, people may find
- Specify time to check file cache to send links to JDownloader - Specify time to check file cache to send links to JDownloader
- Ability to add multiple shows to check for - Ability to add multiple shows to check for
- Ability to check for different qualities per show you are looking for - Ability to check for different qualities per show you are looking for
- Ability to turn OFF only HEVC search
# Configuration # Configuration
There is a ``config-sample.json`` file that needs to be renamed to ``config.json``, after this you can update it with your required settings.
There is a `config-sample.json` file that needs to be renamed to `config.json`, after this you can update it with your required settings.
- JDUserName - Your MyJDownloader Username - JDUserName - Your MyJDownloader Username
- JDPassword - Your MyJDownloader Password - JDPassword - Your MyJDownloader Password
- RSSFeed - The url to the rss feed you want to watch (Only tested with - https://rlsbb.cc/feed/) - RSSFeed - The url to the rss feed you want to watch (Only tested with - rlsbb)
- RSSFeedRefreshMins - How often to poll your rss feed down to local file cache - RSSFeedRefreshMins - How often to poll your rss feed down to local file cache
- JDPostLinksMins": How often to check your file cache for your shows and send found links to JDownloader - JDPostLinksMins - How often to check your file cache for your shows and send found links to JDownloader
- Autostart - Tells JDownloader to add and start the downloads straight away (true/false) - Autostart - Tells JDownloader to add and start the downloads straight away (true/false)
- OnlyHEVC - If false, this will download any files that it finds on the post that matches the quality (true/false)
- Shows - This needs to be a comma separated list of json objects of the show and quality you want to check for. - Shows - This needs to be a comma separated list of json objects of the show and quality you want to check for.
An example shown below An example shown below
@ -30,10 +32,11 @@ An example shown below
{ {
"JDUserName": "User", "JDUserName": "User",
"JDPassword": "Pass", "JDPassword": "Pass",
"RSSFeed": "https://rlsbb.cc/feed/", "RSSFeed": "https://mypage.com/feed/",
"RSSFeedRefreshMins": 10, "RSSFeedRefreshMins": 10,
"JDPostLinksMins": 180, "JDPostLinksMins": 180,
"Autostart": false, "Autostart": false,
"OnlyHEVC": true,
"Shows": [ "Shows": [
{ {
"Name": "Obi-Wan Kenobi", "Name": "Obi-Wan Kenobi",
@ -46,17 +49,21 @@ An example shown below
] ]
} }
``` ```
# Running # Running
## Release Version ## Release Version
Either download the version on the releases, as well as the `config-sample.json` and run execute, this is the simplest way, but may not be the latest code, and will not run in the background Either download the version on the releases, as well as the `config-sample.json` and run execute, this is the simplest way, but may not be the latest code, and will not run in the background
## Source Version ## Source Version
You will need NodeJS installed, then you can checkout this repo. You will need NodeJS installed, then you can checkout this repo.
For basic usage you can just navigate into the folder and run - For basic usage you can just navigate into the folder and run -
- ``npm i`` to install the requirements.
- ``node JDRssDownloader.js`` This will execute the process and add the links if they are found. - `npm i` to install the requirements.
- `node JDRssDownloader.js` This will execute the process and add the links if they are found.
My suggestion would be to use pm2 so it can run "in the background" My suggestion would be to use pm2 so it can run "in the background"
@ -64,11 +71,10 @@ My suggestion would be to use pm2 so it can run "in the background"
Not alot of testing has gone into this, and I threw it together in a few hours, and only for my use case, so there are bound to be issues, please open them and let me know if you find any. Not alot of testing has gone into this, and I threw it together in a few hours, and only for my use case, so there are bound to be issues, please open them and let me know if you find any.
# Future # Future
I have some ideas to make this a bit smarter, at the moment it doesn't clean the cache at all, and will keep sending the same links to JDownloader once they are in the cache, I am working on cleaning them out, but for now the best thing to do it to set JDownloader to automatically mark already downloaded links as finished, then it doesn't bother redownloading all the time.
Also want to add the ability to look at multiple RSS feeds, this seems quite easy, and I will do in the next couple of weeks. I have some ideas to make this a bit smarter and I want to add the ability to look at multiple RSS feeds, this seems quite easy, and I will do in the next couple of weeks.
# Thanks # Thanks
Thank for all the people who made any of the modules that I used to create this. Thank for all the people who made any of the modules that I used to create this.

16
checkFileName.js Normal file
View File

@ -0,0 +1,16 @@
function checkFileName(urls) {
let urlObj = {
"fileName": "",
"urlList": []
}
urls.forEach(url => {
let cut = url.match(/([^\/]*$)/mg);
if (cut[0] !== '') {
urlObj.fileName = cut[0].replace('.html', '')
urlObj.urlList.push(url)
}
});
return urlObj
}
module.exports = { checkFileName }

View File

@ -5,6 +5,7 @@
"RSSFeedRefreshMins": 10, "RSSFeedRefreshMins": 10,
"JDPostLinksMins": 180, "JDPostLinksMins": 180,
"Autostart": false, "Autostart": false,
"OnlyHEVC": true,
"Shows": [ "Shows": [
{ {
"Name": "", "Name": "",

View File

@ -1,6 +1,6 @@
{ {
"name": "jdrssdownloader", "name": "jdrssdownloader",
"version": "1.0.0", "version": "1.0.1",
"description": "", "description": "",
"main": "JDRssDownloader.js", "main": "JDRssDownloader.js",
"bin": "JDRssDownloader.js", "bin": "JDRssDownloader.js",