I was extensively searching for script that can add price extensions to campaign by reading data from sheets but could not find any. But online I found a script that applies call out extension to ad groups by loading data from sheets. Could anyone please help me on changed script for price extension. Please find below the script for callout extension!
function main() {
var callouts = load_data(SPREADSHEET_URL);
Logger.log(callouts)
var callouts_objects = create_callouts(callouts);
var apply_results = apply_callouts(callouts);
}
function apply_callouts(callouts) {
var results = new Array();
for (var i = 0; i < callouts.length; i++) {
if (!callouts[i]["Status"]) continue;
var campaign_filter = callouts[i]["Campaign Contains"].toLowerCase();
var ad_group_filter = callouts[i]["AdGroup Contains"].toLowerCase();
campaign_filter = campaign_filter == "any" ? false : campaign_filter;
ad_group_filter = ad_group_filter == "any" ? false : campaign_filter;
var ad_groups_selector = AdsApp.adGroups();
if (campaign_filter) {
ad_groups_selector.withCondition("CampaignName CONTAINS_IGNORE_CASE '" + campaign_filter + "'");
}
if (ad_group_filter) {
ad_groups_selector.withCondition("Name CONTAINS_IGNORE_CASE '" + ad_group_filter + "'");
}
var adGroupIterator = ad_groups_selector.get();
while (adGroupIterator.hasNext()) {
ad_group = ad_groups_selector.next();
var operation = ad_group.addCallout(callouts[i]["Callout"]);
result = {
"AdGroupName": ad_group.getName(),
"Campaign Contains": campaign_filter,
"AdGroup Contains": ad_group_filter,
"Result": ad_group.getResult(),
"Error": ad_group.getErrors()
}
results.push(result);
}
}
return results;
}
function create_callouts(callouts) {
var results = new Array();
for (var i = 0; i < callouts.length; i++) {
var calloutBuilder = AdsApp.extensions().newCalloutBuilder();
var mobile_pref = callouts[i]["Mobile Preffered"].toLowerCase() == "any" ? true : false;
// Create a callout operation.
var calloutOperation = calloutBuilder
.withText(callouts[i]["Callout"]) // required
.withMobilePreferred(mobile_pref) // optional
.build();
// Optional: examine the outcome. The call to isSuccessful()
// will block until the operation completes.
if (calloutOperation.isSuccessful()) {
// Get the result.
var callout = calloutOperation.getResult();
results.push({
"Status": true,
"Callout": callout,
"Campaign Contains": callouts[i]["Campaign Contains"],
"AdGroup Contains": callouts[i]["AdGroup Contains"]
});
} else {
// Handle the errors.
var errors = calloutOperation.getErrors();
results.push({
"Status": true,
"Error": errors
});
}
}
return results;
}
function load_data(url) {
var reportSheet = SpreadsheetApp.openByUrl(url);
var rows = reportSheet.getDataRange();
var numRows = rows.getNumRows();
var numCols = rows.getNumColumns();
var values = rows.getValues(); // values[row_index][column_index]
var row = values[0];
var headerNames = new Array();
for (var i = 0; i < numCols; i++) {
var columns_name = row[i];
headerNames.push(columns_name);
}
var data = new Array();
for (var row_index = 1; row_index < numRows; row_index++) {
var row_data = {};
if (!values[row_index]) break;
for (var col_index = 0; col_index < numCols; col_index++) {
var cell_data = values[row_index][col_index];
if (!cell_data) continue;
row_data[headerNames[col_index]] = values[row_index][col_index];
}
if (!size_dict(row_data)) continue;
data.push(row_data);
}
return data;
}
function size_dict(d) {
c = 0;
for (i in d) ++c;
return c
}