188 lines
4.3 KiB
JavaScript
188 lines
4.3 KiB
JavaScript
/*
|
|
Index pages:
|
|
https://teamrock.com/radio/show/the-school-of-rock
|
|
https://teamrock.com/radio/show/the-metal-hammer-magazine-show#
|
|
https://teamrock.com/radio/show/the-classic-rock-magazine-show
|
|
*/
|
|
|
|
var request = require('request');
|
|
var cheerio = require('cheerio');
|
|
var STRING = require('string');
|
|
var logger = require('log4js').getLogger();
|
|
var Events = require('events');
|
|
var jsonfile = require('jsonfile');
|
|
var fs = require('fs');
|
|
var cron = require('node-cron');
|
|
|
|
//var root = 'http://teamrock.com';
|
|
|
|
var root = 'http://localhost:9000';
|
|
var wantedType = ['audio/mpeg'];
|
|
|
|
var eventHandler = new Events();
|
|
|
|
var rssJsonFile = __dirname + '/' + 'rr-rss.json';
|
|
|
|
module.exports = {
|
|
rssJsonFile : __dirname + '/' + 'rr-rss.json',
|
|
rssJson:{},
|
|
getPage: function(indexfile) {
|
|
logger.debug('getPage');
|
|
var url = root + indexfile;
|
|
logger.debug(url);
|
|
logger.info(indexfile);
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
'use strict';
|
|
var rssBlob = {};
|
|
|
|
request(url, function(err, resp, body) {
|
|
if (err) {
|
|
// Logger.error(err);
|
|
return reject(err);
|
|
// Throw err;
|
|
}
|
|
|
|
var $ = cheerio.load(body);
|
|
var audioblock = $('AUDIO');
|
|
|
|
audioblock.find('SOURCE').each(function(div) {
|
|
|
|
var s = $(this).attr('type');
|
|
|
|
if (wantedType.indexOf(s) !== -1) {
|
|
var f = $(this).attr('src');
|
|
var suffix = f.substr(f.lastIndexOf('.') + 1, f.length);
|
|
|
|
if (suffix === 'mp3') {
|
|
rssBlob.file = f;
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
var sectionHead = $('H2.section-title').text();
|
|
|
|
logger.debug(sectionHead);
|
|
|
|
return resolve(rssBlob);
|
|
}, function(error, response, body) {
|
|
if (response.statusCode !== 200) {
|
|
logger.error(response.statusCode);
|
|
logger.error(body);
|
|
return reject(error);
|
|
}
|
|
});
|
|
});
|
|
|
|
}, getIndexPage: function() {
|
|
|
|
var url, self = this;
|
|
|
|
url = 'http://localhost:9000/the-school-of-rock';
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
'use strict';
|
|
|
|
request(url, function(err, resp, body) {
|
|
if (err) {
|
|
// Logger.error(err);
|
|
return reject(err);
|
|
// Throw err;
|
|
}
|
|
|
|
var $ = cheerio.load(body);
|
|
var playlistBody = $('div.my-playlist');
|
|
|
|
var queue = [];
|
|
|
|
playlistBody.find('a.my-playlist-item').each(function(div) {
|
|
|
|
var s = $(this).attr('href');
|
|
if (self.rssJson.masterindex.indexOf(s) === -1) {
|
|
queue.push(s);
|
|
}
|
|
|
|
});
|
|
|
|
return resolve(queue);
|
|
}, function(error, response, body) {
|
|
if (response.statusCode !== 200) {
|
|
logger.error(response.statusCode);
|
|
logger.error(body);
|
|
return reject(error);
|
|
}
|
|
});
|
|
});
|
|
|
|
},
|
|
doUpdateEntry: function(d) {
|
|
logger.debug('Updatefile:', d);
|
|
},
|
|
doUpdateQueue: function(queue) {
|
|
'use strict';
|
|
logger.info('Update queue');
|
|
logger.debug(queue);
|
|
for(var t=0;t<queue.length;t++)
|
|
{
|
|
// this.rssJson.queue.push(queue[t]);
|
|
eventHandler.emit('updateEntry', queue[t]);
|
|
}
|
|
//logger.debug(this.rssJson);
|
|
|
|
}
|
|
, loadMainIndex: function() {
|
|
jsonfile.readFile(rssJsonFile, function(err, obj) {
|
|
if (err) {
|
|
|
|
logger.warn('Creating...');
|
|
logger.debug(module.exports.rssJson);
|
|
|
|
module.exports.rssJson = {title:'Team Rock Radio',
|
|
description:'Team Rock Radio',
|
|
link:'',
|
|
pubDate:'',
|
|
language:'en-us',
|
|
items:[], masterindex:[],queue:[]};
|
|
logger.debug(module.exports.rssJson);
|
|
}
|
|
else {
|
|
logger.info('RSS Data loaded...');
|
|
module.exports.rssJson = obj;
|
|
}
|
|
|
|
});
|
|
|
|
|
|
} };
|
|
|
|
|
|
var doUpdateQueue = (q) => {
|
|
module.exports.doUpdateQueue(q);
|
|
};
|
|
|
|
var doUpdateEntry = (q) => {
|
|
module.exports.getPage(q);
|
|
};
|
|
|
|
eventHandler.on('updateQueue', doUpdateQueue);
|
|
eventHandler.on('updateEntry', doUpdateEntry);
|
|
|
|
module.exports.loadMainIndex();
|
|
|
|
|
|
|
|
|
|
|
|
setTimeout(function() {
|
|
module.exports.getIndexPage()
|
|
.then((d)=> {
|
|
logger.warn(d);
|
|
eventHandler.emit('updateQueue', d);
|
|
})
|
|
.catch((e) => {
|
|
logger.error(e);
|
|
});
|
|
|
|
}, 5000);
|