silvrgit/lib/rr_bot.js

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);