/* 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 { 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);