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