const googt = require('google-trends-api'); const Promise = require('promise'); const DAY = 1000 * 60 * 60 * 24; // 1 day in milliseconds const YEAR = DAY * 365; // 1 year in milliseconds const GEO = 'US'; //the scope of the trends /** desc: helper function for getYearStats, gets list of popularity for days in the month. */ function getMonthStats(word, month){ return new Promise(function(resolve, reject){ //set up query for 1 month length googt.interestOverTime({ keyword:word, startTime:new Date(Date.now() - (YEAR * month/12)), endTime:new Date(Date.now() - (YEAR * (month-1)/12)) }).then(function(results){ //parse the json, fill return array w tuples of date + value var times = JSON.parse(results).default.timelineData; var ret = []; for(var i = 0; i < times.length; ++i){ var tup = new Object(); tup.time = times[i].formattedTime; tup.value = times[i].value[0]; ret[i] = tup; } resolve(ret); }); }); } module.exports= { /* desc: returns an integer score for the word over the day */ getPopularity: function(word) { //must be a promise since call to trends API is async return new Promise(function(resolve, reject){ //specifies the keyword, time interval, granularity, and region googt.interestOverTime({keyword:word, startTime:new Date(Date.now() - DAY),granularTimeResolution:true, geo:GEO }) .then(function(results){ //turn into json object data = JSON.parse(results).default.timelineData; //add up values var total = 0; data.forEach(function(element){ total += element.value[0]; }) //tell function to return resolve(total); }).catch(function(err){ reject("Google Trends Query Failed"); }); }); }, /** desc: returns a list of tuples (date, value) representing word's popularity for the past year */ getYearStats: async function(word){ var ret = []; for (var i = 9; i > 0; --i) { await getMonthStats(word,i).then(function(data){ ret = ret.concat(data); }); console.log(i); } return ret; } };