adwords-api
Version:
Unofficial SDK for Google Adwords API
163 lines (149 loc) • 4.05 kB
JavaScript
var
_ = require('lodash'),
async = require('async'),
soap = require('soap');
var AdWordsService = require('./adWordsService');
var types = require('../types/adGroupAd');
var adUrlUpgrades = require('../types/adUrlUpgrade');
function Service(options) {
var self = this;
AdWordsService.call(self, options);
self.Collection = types.collection;
self.Model = types.model;
self.AdUrlUpgradeCollection = adUrlUpgrades.collection;
self.AdUrlUpgrade = adUrlUpgrades.model;
self.parseGetResponse = function(response) {
if (self.validateOnly) {
return {
entries: null
};
} else if (response.rval) {
return {
entries: response.rval.entries || [],
};
} else {
return {};
}
};
self.parseMutateResponse = function(response) {
if (self.validateOnly) {
return {
partialFailureErrors: null,
value: null
};
} else if (response.rval) {
return {
partialFailureErrors: response.rval.partialFailureErrors,
value: response.rval.value || []
};
} else {
return {};
}
};
self.parseQueryResponse = function(response) {
return self.parseGetResponse(response);
};
self.parseUpgradeUrlResponse = function(response) {
if (self.validateOnly) {
return {
rval: null
};
} else if (response.rval) {
return response.rval;
} else {
return {};
}
};
self.selectable = [
'AdGroupAdDisapprovalReasons',
'AdGroupAdTrademarkDisapproved',
'AdGroupCreativeApprovalStatus',
'AdGroupId',
'AdvertisingId',
'CallOnlyAdBusinessName',
'CallOnlyAdCallTracked',
'CallOnlyAdConversionTypeId',
'CallOnlyAdCountryCode',
'CallOnlyAdDescription1',
'CallOnlyAdDescription2',
'CallOnlyAdDisableCallConversion',
'CallOnlyAdPhoneNumber',
'CallOnlyAdPhoneNumberVerificationUrl',
'CreationTime',
'CreativeFinalAppUrls',
'CreativeFinalMobileUrls',
'CreativeFinalUrls',
'CreativeTrackingUrlTemplate',
'CreativeUrlCustomParameters',
'Description1',
'Description2',
'DevicePreference',
'Dimensions',
'DisplayUrl',
'ExpandingDirections',
'ExperimentDataStatus',
'ExperimentDeltaStatus',
'ExperimentId',
'FileSize',
'Headline',
'Height',
'Id',
'ImageCreativeName',
'IndustryStandardCommercialIdentifier',
'IsCookieTargeted',
'IsTagged',
'IsUserInterestTargeted',
'Labels',
'MediaId',
'MimeType',
'PromotionLine',
'ReadyToPlayOnTheWeb',
'ReferenceId',
'RichMediaAdCertifiedVendorFormatId',
'RichMediaAdDuration',
'RichMediaAdImpressionBeaconUrl',
'RichMediaAdName',
'RichMediaAdSnippet',
'RichMediaAdSourceUrl',
'RichMediaAdType',
'SourceUrl',
'Status',
'TemplateAdDuration',
'TemplateAdName',
'TemplateAdUnionId',
'TemplateElementFieldName',
'TemplateElementFieldText',
'TemplateElementFieldType',
'TemplateId',
'TemplateOriginAdId',
'Trademarks',
'UniqueName',
'Url',
'Urls',
'VideoTypes',
'Width',
'YouTubeVideoIdString'
];
self.upgradeUrl = function(options, done) {
self.soapHeader.RequestHeader.clientCustomerId = options.clientCustomerId;
async.waterfall([
// get client
self.getClient,
// Request AdWords data...
function(client, cb) {
self.client.addSoapHeader(self.soapHeader, self.name, self.namespace, self.xmlns);
self.client.setSecurity(new soap.BearerSecurity(self.credentials.access_token));
self.client.upgradeUrl({operations: options.operations}, cb);
}
],
function(err, response) {
return done(err, self.parseUpgradeUrlResponse(response));
});
};
self.xmlns = 'https://adwords.google.com/api/adwords/cm/' + self.version;
self.wsdlUrl = self.xmlns + '/AdGroupAdService?wsdl';
}
Service.prototype = _.create(AdWordsService.prototype, {
constructor: Service
});
module.exports = Service;