facebook-nodejs-business-sdk
Version:
SDK for the Facebook Marketing API in Javascript and Node.js
214 lines (200 loc) • 6.21 kB
JavaScript
/**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
const bizSdk = require('facebook-nodejs-business-sdk');
const Ad = bizSdk.Ad;
const AdAccount = bizSdk.AdAccount;
const Business = bizSdk.Business;
const Campaign = bizSdk.Campaign;
const accountId = 'act_<ACCOUNT_ID>';
const accessToken = '<ACCESS_TOKEN>';
const bussinessId = ''; //ADD business ID here.
const campaignId = ''; //ADD Campaign ID Here
const api = bizSdk.FacebookAdsApi.init(accessToken);
const account = new AdAccount(accountId);
const showDebugingInfo = false;
if (showDebugingInfo) {
api.setDebug(true);
}
const errorFunction = scenarioName => {
let returnFunction = error => {
console.log('An error occurred while processing, ' + scenarioName);
console.log('Error Message:' + error);
console.log('Error Stack:' + error.stack);
};
return returnFunction;
};
const logPassedTest = (testName, data) => {
console.log(testName);
if (showDebugingInfo) {
console.log('Data:' + JSON.stringify(data));
}
};
let test1 = 'Node.js read';
account
.read([AdAccount.Fields.name, AdAccount.Fields.age])
.then(account => {
logPassedTest(test1 + ':Pass', account);
})
.catch(errorFunction(test1));
let test2 = 'Node.js get active ads';
account
.getAds([], {
[Ad.Fields.effective_status]: [Ad.EffectiveStatus.active],
})
.then(ad => {
logPassedTest(test2 + ':Pass', ad);
})
.catch(errorFunction(test2));
let test3 = 'Node.js getInsights Edge';
const insightsFields = [
'impressions',
'frequency',
'unique_clicks',
'actions',
'spend',
'cpc',
];
new Campaign(campaignId)
.getInsights(insightsFields, {})
.then(insight => {
logPassedTest(test3 + ':Pass', insight);
})
.catch(errorFunction(test3));
let test3a = 'Node.js getCampaigns Edge';
const campaignFields = [Campaign.Fields.objective];
account
.getCampaigns(campaignFields, {limit: 2})
.then(campaign => {
campaign.forEach(campaign => {});
logPassedTest(test3a + '-GetCampaigns:Pass', campaign);
})
.catch(errorFunction(test3a));
var test3b = 'Node.js getAssignedPages Edge';
new Business(bussinessId, {limit: 2})
.getAssignedPages([Business.Fields.name], {}, true)
.then(result => {
if (result) {
result.forEach(page => {});
logPassedTest(test3b + '-GetAssignedPages:Pass', result);
}
})
.catch(errorFunction(test3b));
let test4 = 'Node.js nestedCalls';
account
.read([AdAccount.Fields.name])
.then(account => {
logPassedTest(test4 + '-GetAdAcccount:Pass', account);
return account.getCampaigns([Campaign.Fields.name], {limit: 10});
})
.then(result => {
logPassedTest(test4 + '-GetCampaigns:Pass', result);
const campaignIds = result.map(campaign => {
return campaign.id;
});
const campaignAdsInsightsParams = Object.assign(
{
level: 'campaign',
filtering: [{field: 'campaign.id', operator: 'IN', value: campaignIds}],
},
{},
);
const campaigsAdsInsightsFields = insightsFields.concat('campaign_id');
return account.getInsights(
campaigsAdsInsightsFields,
campaignAdsInsightsParams,
);
})
.then(insights =>
logPassedTest(test4 + '-GetCampaignInsights:Pass', insights),
)
.catch(errorFunction(test4));
let test5 = 'Create Edge';
account
.createCampaign([], {
[Campaign.Fields.name]: 'Test Campaign - Delete',
[Campaign.Fields.status]: Campaign.Status.paused,
[Campaign.Fields.objective]: Campaign.Objective.page_likes,
})
.then(campaign => {
logPassedTest(test5 + ':Pass', account);
})
.catch(errorFunction(test5));
let test6 = 'Delete Image Edge';
account
.createAdImage([], {
bytes:
'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAOVBMVEX///87WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZhMeMJEaa5Xi9tKdb0+Xp5Wi9tXjNxThNH+wk/7AAAACnRSTlMAsHIoaM7g/fx9Zr/g5QAAAGlJREFUeNplkFsOwCAIBPGJrtbX/Q/bqm1qwnxuJrBAE6OVD15pQy/WYePsDiIjp9FGyuC4DK7l6pOrVH4s41D6R4EzpJGXsa0MTQqp/yQo8hhHMuApoB1JQ5COnCN3yT6ys7xL3i7/cwMYsAveYa+MxAAAAABJRU5ErkJggg==',
})
.then(result => {
logPassedTest(test6 + ':Pass', account);
return account.deleteAdImages({
hash: result.images.bytes.hash,
});
})
.catch(errorFunction(test6));
let test7 = 'CRUD Campaign';
let campaignIdToDelete;
account
.createCampaign([Campaign.Fields.status], {
[Campaign.Fields.name]: 'Test Campaign - Delete',
[Campaign.Fields.status]: Campaign.Status.paused,
[Campaign.Fields.objective]: Campaign.Objective.page_likes,
})
.then(campaign => {
logPassedTest(test7 + '-Create:Pass', campaign);
campaignIdToDelete = campaign.id;
return new Campaign(campaign.id).read([
Campaign.Fields.id,
Campaign.Fields.name,
Campaign.Fields.objective,
]);
})
.then(campaign => {
logPassedTest(test7 + '-Read:Pass', campaign);
return new Campaign(campaign.id, {
[Campaign.Fields.id]: campaign.id,
[Campaign.Fields.name]: 'Test Campaign - Updated',
}).update();
})
.then(campaign => {
logPassedTest(test7 + '-Update:Pass', campaign);
return new Campaign(campaignIdToDelete).delete();
})
.then(result => {
logPassedTest(test7 + '-Delete:Pass', result);
})
.catch(errorFunction(test7));
let test8 = 'Pagination Campaign';
account
.getCampaigns([Campaign.Fields.name], {limit: 2})
.then(campaigns => {
logPassedTest(test8 + '-GetCampaign:Pass', campaigns);
if (campaigns.length === 2 && campaigns.hasNext()) {
return campaigns.next();
} else {
Promise.reject(
new Error('campaigns length != 2 or not enough campaigns'),
);
}
})
.then(campaigns => {
logPassedTest(test8 + '-NextCampaign:Pass', campaigns);
if (campaigns.hasNext() && campaigns.hasPrevious()) {
return campaigns.previous();
} else {
Promise.reject(new Error('previous or next is not true'));
}
return campaigns.previous();
})
.then(campaigns => {
logPassedTest(test8 + '-PreviousCampaign:Pass', campaigns);
})
.catch(errorFunction(test8));