let request = require ('request'); let Parser = require ('rss-parser'); let summarizer = require ('nodejs-text-summarizer'); var htmlToText = require ('html-to-text'); 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 (text, length, clearText = true) { if (clearText) { text = htmlToText.fromString (text, { wordwrap: false, ignoreHref: true, ignoreImage: true, }); } return summarizer (text, {n: length}); }; getTitlesFromWP = function (sourceUrl) { return new Promise ((resolve, reject) => { getDataFromWPJSON (sourceUrl) .then (rawData => { let result = ''; rawData.forEach (post => { result += post.title.rendered + ` `; }); resolve (result); }) .catch (err => { reject (constants.voiceResponseStrings.ERROR_FETCHING_CONTENT); }); }); }; getLatestNewsFromWP = function ( sourceUrl, postCount = 10, includeTitle = false ) { return new Promise ((resolve, reject) => { getDataFromWPJSON (sourceUrl, 1, postCount) .then (rawData => { let result = ''; let htmlToTextOptions = { wordwrap: false, ignoreHref: true, ignoreImage: true, }; try { rawData.forEach (post => { result += includeTitle ? post.title.rendered : ''; result += includeTitle ? `` : ''; result += summarizeText ( post.content.rendered, constants.FIXED_SUMMARY_LENGTH ); result += ``; }); resolve (result); } catch (err) { reject (constants.voiceResponseStrings.ERROR_SUMMARIZING_CONTENT); } }) .catch (err => { reject (constants.voiceResponseStrings.ERROR_FETCHING_CONTENT); }); }); }; module.exports = { getAnswerFromWP: function (sourceUrl, contentType) { //This function will extract needed data from JSON, which we got from getDataFromWPJSON switch (contentType) { case constants.contentType.TITLES: return getTitlesFromWP (sourceUrl); break; case constants.contentType.NEWS: return getLatestNewsFromWP (sourceUrl); break; } }, };