let request = require ('request'); let Parser = require ('rss-parser'); let summarizer = require ('node-summary'); const constants = require ('../config/constants'); let parser = new Parser (); getDataFromRSSFeed = function (url) { //let feed = await parser.parseURL(url); //console.log(feed.title); //feed.items.forEach(item => { // console.log(item.title + ':' + item.link) //}); }; getDataFromWPJSON = function (sourceUrl, page = 1, maxPosts = 10) { return new Promise ((resolve, reject) => { var options = { method: 'GET', url: `${sourceUrl}/wp-json/wp/v2/posts`, qs: { page: page, per_page: maxPosts, }, }; request (options, (error, response, body) => { if (error) { reject (error); } else { resolve (JSON.parse (body)); } }); }); }; summarizeText = function (title, text) { return new Promise ((resolve, reject) => { summarizer.summarize (title, text, (err, summary) => { if (err) { reject (err); } else { resolve (summary); } }); }); }; module.exports = { getAnswerFromWP: function (sourceUrl) { //This function will extract needed data from JSON, which we got from getDataFromWPJSON //At the moment, it's taking titles and creates answer return new Promise ((resolve, reject) => { getDataFromWPJSON (sourceUrl) .then (rawData => { let result = ''; rawData.forEach (post => { result += post.title.rendered + ` `; }); resolve (result); }) .catch (err => { reject (constants.voiceResponseString.ERROR_FETCHING_CONTENT); }); }); }, getLatestNewsFromWP: function (sourceUrl, postCount = 10, includeTitle = false) { return new Promise ((resolve, reject) => { getDataFromWPJSON (sourceUrl, 1, postCount) .then (rawData => { let result = ''; let summarizers = []; rawData.forEach (post => { summarizers.push ( summarizeText (post.title.rendered, post.content.rendered).then(summary=>{ result += (includeTitle) ? post.title.rendered : ''; result += (includeTitle) ? `` : ''; result += summary; result += ``; }).catch(err=>{ result += constants.voiceResponseString.ERROR_SUMMARIZING_CONTENT; result += ``; }) ); }); Promise.all(summarizers).then(()=>{ resolve(result); }).catch(()=>{ reject(result); }); }) .catch (err => { reject (constants.voiceResponseString.ERROR_FETCHING_CONTENT); }); }); }, };