Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * Created by mayank on 15/7/16.
- */
- var request = require("request");
- var cheerio = require('cheerio');
- var parse = require('csv-parse');
- var DateFormat = require("../../utils/DateFormat")
- var Async = require("async")
- var ResponseHandler = require("../../utils/ResponseHandler")
- var DateFormat = require("../../utils/DateFormat")
- var AdPartnerService = require("../adPartner/AdPartnerService")
- var SiteAdPartnerService = require("../siteAdPartner/SiteAdPartnerService")
- var StatsService = require("../stats/StatsService")
- var moment = require("moment");
- var _ = require('lodash');
- /**
- * this method is called to fetch the sovrn site data and save the new adpartner for sovrn
- * @param data
- * @param res
- */
- var sovrnGetSite = function (data, res) {
- var adPartnerId = data.adPartnerId
- var siteId = data.siteId
- var userId = data.userId;
- var username = data.username;
- var password = data.password;
- var connectionName = data.connectionName;
- var advertiserOrPublisher = data.advertiserOrPublisher;
- Async.auto({
- checkAuthCred: Async.apply(sovrnLogin, username, password),
- getSovrnSite: ['checkAuthCred', Async.apply(getSovrnSites)],
- createSiteAdPartner: ['getSovrnSite', Async.apply(SiteAdPartnerService.createPublisherSiteAdPartnerUsingAdPartner,
- userId, siteId, adPartnerId, connectionName, advertiserOrPublisher)]
- }, function (err, results) {
- if (err) {
- ResponseHandler.errorResponseHandler(res, null, "Invalid Credentials")
- }
- else {
- ResponseHandler.successResponseHandler(res, {
- sites: results.getSovrnSite.site,
- siteAdPartner: results.createSiteAdPartner
- })
- }
- })
- }
- /**
- * this method is called to login sovrn
- * @param username
- * @param password
- * @param next
- */
- var sovrnLogin = function (username, password, next) {
- request.post({
- url: "https://api.sovrn.com/oauth/token",
- form: {
- grant_type: "password",
- username: username,
- password: password,
- client_id: "sovrn",
- client_secret: "sovrn"
- }
- }, function (err, httpResponse, body) {
- try {
- if (httpResponse.statusCode != 200) {
- err = true
- next(err)
- } else {
- var authCred = {
- username: username,
- password: password
- }
- next(null, {"authCred": authCred, access_details: JSON.parse(body)})
- }
- }catch (err){
- logger.error("Error in sovrnLogin ",err)
- next(null,err)
- }
- });
- }
- /**
- * this method is called to fetch the sites of sovrn
- * @param results
- * @param next
- */
- var getSovrnSites = function (results, next) {
- var authorization = results.checkAuthCred.access_details.token_type + ' ' + results.checkAuthCred.access_details.access_token;
- request({
- url: "https://api.sovrn.com/account/user",
- headers: {
- Authorization: authorization
- }
- }, function (err, httpResponse, body) {
- if (err) {
- err = true
- next(err)
- } else {
- var userDetails = JSON.parse(body);
- var site = [];
- for (var attribute in userDetails.websites) {
- if (userDetails.websites[attribute].approvalState == "approvedWithSubdomains") {
- site.push({
- site_id: userDetails.websites[attribute].id,
- site_name: userDetails.websites[attribute].site
- })
- }
- }
- results.checkAuthCred.authCred.iid = userDetails.iid;
- next(null, {"site": site})
- }
- })
- }
- /**
- * this method to fetch the data of the selected site of sovrn
- * @param data
- * @param res
- */
- var sovrnGetData = function (data, res) {
- var adPartnerId = data.adPartnerId
- var siteId = data.siteId
- var userId = data.userId
- var siteAdPartnerId = data.siteAdPartnerId
- var externalSiteId = data.externalSiteId
- var widgetForAuthCred = data.widgets
- var widgetToGetData = []
- for (var i = 0; i < widgetForAuthCred.length; i++) {
- widgetToGetData.push(widgetForAuthCred[i].widgetId)
- }
- var sitesAndWidgets = {}
- sitesAndWidgets.sites = externalSiteId
- sitesAndWidgets.widgets = widgetForAuthCred
- Async.auto({
- siteAdPartner: Async.apply(SiteAdPartnerService.getSiteAdPartnerById, siteAdPartnerId)
- }, function (err, results) {
- var auth_cred = JSON.parse(results.siteAdPartner.auth_cred)
- var username = auth_cred.username
- var password = auth_cred.password
- var sovrnSitesToFetch = externalSiteId
- var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
- Async.auto({
- authCred: Async.apply(sovrnLogin, username, password),
- getData: ['authCred', Async.apply(getDataFromSovrn, sovrnSitesToFetch,widgetToGetData, auth_cred, startDate)],
- statsObj: ['getData', Async.apply(createStatsObjForSovrn, userId, siteId, adPartnerId, siteAdPartnerId)],
- createBatchStats: ['statsObj', StatsService.createBatchStats],
- siteAdPartnerAccountSet: ['getData', Async.apply(SiteAdPartnerService.siteAdPartnerAccountSet, siteAdPartnerId, sitesAndWidgets)]
- }, function (err, results) {
- if (err) {
- err = true
- next(err)
- } else {
- ResponseHandler.successResponseHandler(res, true, "Save Succefully")
- }
- })
- })
- }
- /**
- * this method is called to get the site data selected by the user
- * @param sovrnSitesToFetch
- * @param startDate
- * @param results
- * @param next
- */
- var getDataFromSovrn = function (sovrnSitesToFetch, widgetIds, authCred, startDate, results, next) {
- var endDate = DateFormat.getTodatDate();
- var mapFunction = {};
- for (var i = 0; i < sovrnSitesToFetch.length; i++) {
- mapFunction[i] = Async.apply(sovrnParallel, sovrnSitesToFetch[i], authCred, results.authCred, startDate, endDate)
- }
- Async.parallel(mapFunction, function (err, results) {
- var data = [];
- try {
- for (var i = 0; i < Object.keys(results).length; i++) {
- for (var j = 0; j < Object.keys(results['' + i]).length; j++) {
- for (k = 0; k < results['' + i]['' + j]["body"]["display"]["tags"].length; k++) {
- var stats = {};
- if (_.includes(widgetIds, results['' + i]['' + j]["body"]["display"]["tags"][k]["zoneId"].toString().trim())) {
- stats.date = moment(new Date(results['' + i]['' + j]["body"]["startDate"])).format('YYYY-MM-DD');
- stats.impressions = results['' + i]['' + j]["body"]["display"]["tags"][k].impressions;
- stats.revenue = results['' + i]['' + j]["body"]["display"]["tags"][k].earnings;
- stats.site = results['' + i]['' + j]["body"]["site"];
- stats.siteId = results['' + i]['' + j]["siteId"]
- stats.widget_name = results['' + i]['' + j]["body"]["display"]["tags"][k]["zoneTitle"].trim()
- stats.widget_id = results['' + i]['' + j]["body"]["display"]["tags"][k]["zoneId"].toString().trim()
- data.push(stats);
- }
- }
- }
- }
- next(err, data);
- }catch(err){
- logger.error("Err in getDataFromSovrn ",err)
- next(null,"Err in getDataFromSovrn ")
- }
- })
- }
- /**
- * this method is called to fetch the data of sovrn combined
- * @param sovrnData
- * @param authCred
- * @param accesDetails
- * @param startDate
- * @param endDate
- * @param next
- */
- var sovrnParallel = function (sovrnData, authCred, accesDetails, startDate, endDate, next) {
- var actualEndDate = endDate;
- var dateToSend = new Date(configParamsGlobal.sovrn.START_DATE);
- var endDate = new Date(configParamsGlobal.sovrn.START_DATE);
- var todaysDate = new Date();
- var numberOfDaysToAdd = 1;
- var mapFunction = {};
- //endDate.setDate(endDate.getDate() + numberOfDaysToAdd);
- var i = 0;
- var isLoopToStop = false
- try {
- while (dateToSend.getTime() < todaysDate.getTime() && isLoopToStop == false) {
- if (dateToSend.getMonth() == todaysDate.getMonth() && dateToSend.getDate() == todaysDate.getDate()) {
- //endDate = new Date(actualEndDate);
- isLoopToStop = true;
- break;
- }
- var authorization = accesDetails.access_details.token_type + ' ' + accesDetails.access_details.access_token;
- var url = "https://api.sovrn.com/earnings/breakout/all?site=" + sovrnData.siteName.trim() + "&startDate=" + Date.UTC(dateToSend.getFullYear(), dateToSend.getMonth(), dateToSend.getDate()) + "&endDate=" + Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()) + "&iid=" + parseInt(authCred.iid);
- mapFunction[i] = Async.apply(sovrnSiteDataFetchByDaysParallel, url, authorization, sovrnData.siteId)
- dateToSend.setDate(dateToSend.getDate() + 1);
- endDate.setDate(endDate.getDate() + 1/*getDaysInMonth(dateToSend.getMonth()+1,dateToSend.getFullYear())*/);
- i++;
- }
- Async.parallel(mapFunction, function (err, results) {
- next(null, results);
- })
- }catch (err){
- logger.error("Err in sovrnParallel ",err)
- next(null,"Err in sovrnParallel ")
- }
- }
- /**
- * this method is called to fetch the data from sovrn by days
- * @param url
- * @param auth
- * @param next
- */
- var sovrnSiteDataFetchByDaysParallel = function (url, auth, siteId, next) {
- request.get({
- url: url,
- headers: {
- Authorization: auth
- }
- }, function (err, httpResponse, body) {
- if (err) {
- err = true
- next(err)
- } else {
- try {
- next(null, {"body": JSON.parse(body), siteId: siteId});
- }catch (err){
- logger.error("Error in sovrnSiteDataFetchByDaysParallel "+err)
- next(null,err)
- }
- }
- })
- }
- /**
- * method to check no. of days in current month
- * @param m
- * @param y
- * @returns {number}
- */
- function getDaysInMonth(m, y) {
- return /8|3|5|10/.test(--m) ? 30 : m == 1 ? (!(y % 4) && y % 100) || !(y % 400) ? 29 : 28 : 31;
- }
- /**
- *
- * @param userId
- * @param siteId
- * @param adPartnerId
- * @param siteAdPartnerId
- * @param results
- * @param next
- */
- var createStatsObjForSovrn = function (userId, siteId, adPartnerId, siteAdPartnerId, results, next) {
- var rows = results.getData
- var statsObj = []
- try {
- for (var i = 0; i < rows.length; i++) {
- var stats = {}
- stats.adpartner_id = adPartnerId
- stats.date = rows[i].date
- stats.users_id = userId
- stats.site_id = siteId
- stats.partner_id = adPartnerId
- stats.sites_adpartners_id = siteAdPartnerId
- stats.impressions = rows[i].impressions
- stats.revenue = rows[i].revenue
- stats.widget_name = rows[i].widget_name.trim()
- stats.widget_id = rows[i].widget_id.trim()
- stats.clicks = rows[i].clicks
- stats.external_site_name = rows[i].site.trim()
- stats.external_site_id = rows[i].siteId.trim()
- stats.uniquelyIdentifyKey = uniquelyIdentifyKey(stats.sites_adpartners_id, stats.date, siteId, stats.external_site_name, stats.external_site_id, stats.widget_name, stats.widget_id);
- statsObj.push(stats)
- }
- next(null, statsObj)
- }catch (err){
- logger.error("Err in createStatsObjForSovrn ",err)
- next(null,"Err in createStatsObjForSovrn ")
- }
- }
- /**
- *
- * @param siteAdPartner
- * @param date
- * @param siteId
- * @param sitename
- * @param widgetId
- * @param widgetName
- * @returns {string}
- */
- var uniquelyIdentifyKey = function (siteAdPartner, date, siteId, externalSiteName, externalSiteId, widget_name,widget_id) {
- return siteAdPartner + "_" + date + "_" + siteId + "_" + externalSiteName + "_" + externalSiteId + "_" + widget_name+"_"+widget_id
- }
- /**
- * this method is used to get the external site for update in sovrn
- * @param siteId
- * @param siteAdPartnerId
- * @param adPartnerId
- * @param previousAdUnits
- * @param res
- */
- var getExternalSiteSovrn = function (siteId, siteAdPartnerId, adPartnerId, authCred, res) {
- var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
- var endate = DateFormat.getTodatDate()
- var username = authCred.username;
- var password = authCred.password;
- Async.auto({
- checkAuthCred: Async.apply(sovrnLogin, username, password),
- getSovrnSite: ['checkAuthCred', Async.apply(getSovrnSites)],
- }, function (err, result) {
- var sitestoSend = []
- var sitesToGetAllWidgets = authCred.sites.sites
- for (var i = 0; i < sitesToGetAllWidgets.length; i++) {
- sitestoSend.push({
- id: sitesToGetAllWidgets[i].siteId+"***"+sitesToGetAllWidgets[i].siteName.trim()
- })
- }
- Async.auto({
- checkAuthCred: Async.apply(sovrnLogin, username, password),
- getSovrnWidget: ['checkAuthCred', Async.apply(getSovrnSitesWidgetData, sitestoSend, startDate, endate, authCred)]
- }, function (err, results) {
- var data = {}
- data.allSites = result.getSovrnSite
- data.allWidgets = results.getSovrnWidget
- data.previousSelectedSite = []//authCred.sites;
- for (var i = 0; i < authCred.sites.sites.length; i++) {
- var dataToPush = {};
- dataToPush.siteId = parseInt(authCred.sites.sites[i].siteId);
- dataToPush.siteName = authCred.sites.sites[i].siteName.trim();
- data.previousSelectedSite.push(dataToPush);
- }
- data.previousSelectedWidget = []//authCred.sites;
- for (var i = 0; i < authCred.sites.widgets.length; i++) {
- var dataToPush = {};
- dataToPush.id = authCred.sites.widgets[i].widgetId+"***"+authCred.sites.widgets[i].widgetName;
- dataToPush.label = authCred.sites.widgets[i].widgetName;
- data.previousSelectedWidget.push(dataToPush);
- }
- data.partnerName = configParamsGlobal.adPartner.Sovrn.partner_name
- ResponseHandler.successResponseHandler(res, data);
- })
- })
- }
- /**
- * call to update stats table according to edited sites
- * @param authCred
- * @param data
- * @param adPartnerId
- * @param updateSites
- * @param res
- */
- var updateExternalSiteFromSovrn = function (authCred, data, adPartnerId, updateSites, updateWidgets, res) {
- var username = authCred.username
- var password = authCred.password
- var siteToUpdate = []
- for (var i = 0; i < updateSites.length; i++) {
- siteToUpdate.push({
- siteId: updateSites[i]['id'].split("***")[0].trim(),
- siteName: updateSites[i]['id'].split("***")[1].trim()
- })
- }
- var widgetToUpdateAuthCred = []
- for(var i = 0 ; i<updateWidgets.length ; i++){
- widgetToUpdateAuthCred.push({
- widgetId:updateWidgets[i]['id'].split("***")[0].trim(),
- widgetName:updateWidgets[i]['id'].split("***")[1].trim(),
- })
- }
- var widgetToSendInGetData = []
- for (var i = 0; i < updateWidgets.length; i++) {
- widgetToSendInGetData.push(updateWidgets[i]['id'].split("***")[0].trim())
- }
- var sitesAndWidgetsToUpdateInAuthCred = {
- sites: siteToUpdate,
- widgets: widgetToUpdateAuthCred
- }
- var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
- Async.auto({
- getIntersectionSovrnData: Async.apply(checkIntersectionSovrnData, authCred.sites, siteToUpdate, widgetToUpdateAuthCred),
- }, function (err, results) {
- var newAddedSite = results.getIntersectionSovrnData.toUpdateData.toAddSite
- var deleteSite = results.getIntersectionSovrnData.toUpdateData.toDeleteSite
- var deleteWidget = results.getIntersectionSovrnData.toUpdateData.toDeleteWidget
- var siteToDelete = []
- for (var i = 0; i < deleteSite.length; i++) {
- siteToDelete.push({
- "siteId": deleteSite[i]['siteId'].trim(),
- "siteName": deleteSite[i]['siteName'].trim()
- })
- }
- Async.auto({
- authCred: Async.apply(sovrnLogin, username, password),
- getData: ['authCred', Async.apply(getDataFromSovrn, siteToUpdate, widgetToSendInGetData, authCred, startDate)],
- statsObj: ['getData', Async.apply(createStatsObjForSovrn, data.userId, data.siteId, adPartnerId, data.siteAdPartnerId)],
- createBatchStats: ['statsObj', StatsService.createBatchStats],
- siteAdPartnerAccountSet: ['getData', Async.apply(SiteAdPartnerService.siteAdPartnerAccountSet, data.siteAdPartnerId, sitesAndWidgetsToUpdateInAuthCred)],
- deleteUnUsedStats: ['getData', Async.apply(StatsService.deleteUnUsedStatsByWidgetSovrn, deleteWidget ,data.siteAdPartnerId)]
- }, function (err, results) {
- if (err) {
- } else {
- ResponseHandler.successResponseHandler(res, true, "Save Succefully")
- }
- })
- })
- }
- /**
- * method to find sites to be deleted and to be added.
- * @param sovrnData
- * @param siteToUpdate
- * @param next
- */
- var checkIntersectionSovrnData = function (sovrnData, siteToUpdate, widgetToUpdate, next) {
- var previousSites = sovrnData.sites
- var previousWidgets = sovrnData.widgets
- var newSites = siteToUpdate;
- var newWidgets = widgetToUpdate;
- var dataToReturn = {};
- dataToReturn.toAddSite = _.differenceBy(newSites, previousSites, 'siteId');
- dataToReturn.toDeleteSite = _.differenceBy(previousSites, newSites, 'siteId');
- dataToReturn.toDeleteWidget = _.differenceBy(previousWidgets, newWidgets, 'widgetId');
- next(null, {toUpdateData: dataToReturn})
- }
- /**
- * this method is used to get the sovrn widget
- * @param sites
- * @param sitedAdPartnerId
- * @param res
- */
- var getSovrnSiteWidget = function (sites, sitedAdPartnerId, res) {
- Async.auto({
- siteAdPartner: Async.apply(SiteAdPartnerService.getSiteAdPartnerById, sitedAdPartnerId)
- }, function (err, results) {
- var endDate = DateFormat.getTodatDate();
- var auth_cred = JSON.parse(results.siteAdPartner.auth_cred)
- var username = auth_cred.username
- var password = auth_cred.password
- var sitesToFetch = sites
- var siteData = [];
- for (var i = 0; i < sitesToFetch.length; i++) {
- siteData.push(sitesToFetch[i].id.split("***")[0].trim());
- }
- var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
- Async.auto({
- checkAuthCred: Async.apply(sovrnLogin, username, password),
- getSovrnSiteWidget: ['checkAuthCred', Async.apply(getSovrnSitesWidgetData, sites, startDate, endDate, auth_cred)]
- }, function (err, results) {
- if (err) {
- ResponseHandler.errorResponseHandler(res, null, "Invalid Credentials")
- }
- else {
- ResponseHandler.successResponseHandler(res, results.getSovrnSiteWidget, "Save Succefully")
- }
- })
- })
- }
- /**
- * this method is called to fetch the widget name from sovren site
- * @param sites
- * @param startDate
- * @param endate
- * @param auth_cred
- * @param results
- * @param next
- */
- var getSovrnSitesWidgetData = function (sites, startDate, endate, auth_cred, results, next) {
- var authorization = results.checkAuthCred.access_details.token_type + ' ' + results.checkAuthCred.access_details.access_token;
- var mapFunction = {};
- for (var i = 0; i < sites.length; i++) {
- mapFunction[i] = Async.apply(sovrnParallelWidgets, sites[i], authorization, parseInt(auth_cred.iid), startDate, endate)
- }
- Async.parallel(mapFunction, function (err, results) {
- var dataToSend = [];
- for (var i = 0; i < Object.keys(results).length; i++) {
- for (var j = 0; j < results["" + i].display.tags.length; j++) {
- var data = {};
- data.id = results["" + i].display.tags[j].zoneId+"***"+results["" + i].display.tags[j].zoneTitle;
- data.label = results["" + i].display.tags[j].zoneTitle
- dataToSend.push(data);
- }
- }
- var newDataToSend = _.uniq(dataToSend);
- next(err, newDataToSend);
- })
- }
- /**
- * this method to run a parallel call to fetch widget
- * @param site
- * @param authorization
- * @param iid
- * @param startDate
- * @param endDate
- * @param next
- */
- var sovrnParallelWidgets = function (site, authorization, iid, startDate, endDate, next) {
- var startDateTime = new Date(startDate);
- var endDateTime = new Date(endDate);
- var url = "https://api.sovrn.com/earnings/breakout/all?site=" + site.id.split("***")[1].trim() + "&startDate=" + Date.UTC(startDateTime.getFullYear(), startDateTime.getMonth(), startDateTime.getDate()) + "&endDate=" + Date.UTC(endDateTime.getFullYear(), endDateTime.getMonth(), endDateTime.getDate()) + "&iid=" + iid + "&country=US"
- request({
- url: url,
- headers: {
- Authorization: authorization
- }
- }, function (err, httpResponse, body) {
- next(err, JSON.parse(body));
- })
- }
- module.exports = {
- getSovrnSiteWidget: getSovrnSiteWidget,
- sovrnGetSite: sovrnGetSite,
- sovrnGetData: sovrnGetData,
- getExternalSiteSovrn: getExternalSiteSovrn,
- sovrnLogin: sovrnLogin,
- getDataFromSovrn: getDataFromSovrn,
- createStatsObjForSovrn: createStatsObjForSovrn,
- updateExternalSiteFromSovrn: updateExternalSiteFromSovrn
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement