Oh yeah that's it. Get his ass jsdom
This commit is contained in:
parent
1dca0db9bb
commit
4b6d192a93
4 changed files with 16 additions and 5 deletions
|
@ -20,6 +20,7 @@ NEXTCLOUD_FOLDER= # /Music/LastFMDownloader/
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
|
|
||||||
|
NOTIFICATION_SERVER_INSTANCE= # localhost
|
||||||
NOTIFICATION_SERVER_PORT= # 80
|
NOTIFICATION_SERVER_PORT= # 80
|
||||||
NOTIFICATION_SERVER_PASSWORD= # password123
|
NOTIFICATION_SERVER_PASSWORD= # password123
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ NEXTCLOUD_FOLDER= # /Music/LastFMDownloader/
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
|
|
||||||
|
NOTIFICATION_SERVER_INSTANCE= # localhost
|
||||||
NOTIFICATION_SERVER_PORT= # 80
|
NOTIFICATION_SERVER_PORT= # 80
|
||||||
NOTIFICATION_SERVER_PASSWORD= # password123
|
NOTIFICATION_SERVER_PASSWORD= # password123
|
||||||
|
|
||||||
|
@ -102,6 +103,7 @@ Here's the variables we left out when setting up `.env.example` for the first ti
|
||||||
```conf
|
```conf
|
||||||
# Notifications
|
# Notifications
|
||||||
|
|
||||||
|
NOTIFICATION_SERVER_INSTANCE= # localhost
|
||||||
NOTIFICATION_SERVER_PORT= # 80
|
NOTIFICATION_SERVER_PORT= # 80
|
||||||
NOTIFICATION_SERVER_PASSWORD= # password123
|
NOTIFICATION_SERVER_PASSWORD= # password123
|
||||||
|
|
||||||
|
@ -110,6 +112,10 @@ NOTIFICATION_CLIENT_PORT= # 80
|
||||||
NOTIFICATION_CLIENT_PROTOCOL= # https
|
NOTIFICATION_CLIENT_PROTOCOL= # https
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### NOTIFICATION_SERVER_INSTANCE
|
||||||
|
|
||||||
|
Mostly for testing, but if you're running your notification server seperate from LastFMDownloader (you shouldn't be, in production), fill this with your server's domain. Otherwise, use `localhost`.
|
||||||
|
|
||||||
##### NOTIFICATION_SERVER_PORT
|
##### NOTIFICATION_SERVER_PORT
|
||||||
|
|
||||||
This will be the port that your notification server runs on. Set this to any port but 80 or 443 - you will need to use a reverse proxy like **nginx** or **Apache** in order to properly run this application.
|
This will be the port that your notification server runs on. Set this to any port but 80 or 443 - you will need to use a reverse proxy like **nginx** or **Apache** in order to properly run this application.
|
||||||
|
|
12
index.js
12
index.js
|
@ -9,7 +9,7 @@ const path = require("path");
|
||||||
const { readFileSync, writeFileSync } = require("fs");
|
const { readFileSync, writeFileSync } = require("fs");
|
||||||
const io = require('socket.io-client');
|
const io = require('socket.io-client');
|
||||||
const NodeID3 = require('node-id3');
|
const NodeID3 = require('node-id3');
|
||||||
const xpath = require("xpath-html");
|
const { JSDOM } = require("jsdom");
|
||||||
|
|
||||||
function pathGenerator({ url, name, channelName }) {
|
function pathGenerator({ url, name, channelName }) {
|
||||||
return `${url}-${skewered(`${name} - ${channelName}`)}.mp3`;
|
return `${url}-${skewered(`${name} - ${channelName}`)}.mp3`;
|
||||||
|
@ -32,7 +32,11 @@ async function scrapeLastFMWebsiteForVideo(trackData) {
|
||||||
// classes: image-overlay-playlink-link
|
// classes: image-overlay-playlink-link
|
||||||
// attrs: data-youtube-id
|
// attrs: data-youtube-id
|
||||||
|
|
||||||
const attr = xpath.fromPageSource(lastFMSite).findElement("//a[contains(@class, 'image-overlay-playlink-link')]/@data-youtube-id").getAttribute("data-youtube-id");
|
let attr;
|
||||||
|
try {
|
||||||
|
const dom = new JSDOM(lastFMSite);
|
||||||
|
attr = dom.window.document.querySelector("a.image-overlay-playlink-link").getAttribute("data-youtube-id");
|
||||||
|
} catch (err) { return null; }
|
||||||
|
|
||||||
if (attr == null) return;
|
if (attr == null) return;
|
||||||
|
|
||||||
|
@ -228,7 +232,7 @@ async function main() {
|
||||||
if (await checkNextcloud(video, nextcloudClient)) return dismantle();
|
if (await checkNextcloud(video, nextcloudClient)) return dismantle();
|
||||||
|
|
||||||
socket.emit('nodeMessage', {
|
socket.emit('nodeMessage', {
|
||||||
message: `New song found - ${video.tags.title} by ${video.tags.artist}`,
|
message: `New song found - ${video.tags.name} from ${video.tags.channelName}`,
|
||||||
password: process.env.NOTIFICATION_SERVER_PASSWORD
|
password: process.env.NOTIFICATION_SERVER_PASSWORD
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -276,7 +280,7 @@ async function main() {
|
||||||
return dismantle();
|
return dismantle();
|
||||||
}
|
}
|
||||||
|
|
||||||
const socket = io.connect(`http://localhost:${process.env.NOTIFICATION_SERVER_PORT}`, {reconnect: true});
|
const socket = io.connect(`http://${process.env.NOTIFICATION_SERVER_INSTANCE}:${process.env.NOTIFICATION_SERVER_PORT}`, {reconnect: true});
|
||||||
|
|
||||||
socket.on('connect', function (s) {
|
socket.on('connect', function (s) {
|
||||||
console.log('Successfully connected to notification server');
|
console.log('Successfully connected to notification server');
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
"dotenv": "^16.4.4",
|
"dotenv": "^16.4.4",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"fix-esm": "^1.0.1",
|
"fix-esm": "^1.0.1",
|
||||||
|
"jsdom": "^24.0.0",
|
||||||
"node-id3": "^0.2.6",
|
"node-id3": "^0.2.6",
|
||||||
"node-notifier": "^10.0.1",
|
"node-notifier": "^10.0.1",
|
||||||
"node-youtube-music": "^0.10.3",
|
"node-youtube-music": "^0.10.3",
|
||||||
|
@ -20,7 +21,6 @@
|
||||||
"socket.io": "^4.7.4",
|
"socket.io": "^4.7.4",
|
||||||
"socket.io-client": "^4.7.4",
|
"socket.io-client": "^4.7.4",
|
||||||
"webdav": "^5.3.2",
|
"webdav": "^5.3.2",
|
||||||
"xpath-html": "^1.0.3",
|
|
||||||
"youtube-search-api": "^1.2.1"
|
"youtube-search-api": "^1.2.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue