To follow-up, I can't even seem to remove SiteLinks using my
methodology above. If I request the SiteLinks and then attempt a
REMOVE operation, I get a NotEmptyError.EMPTY_LIST exception because
my SitelinksExtension object has no Sitelinks attached. If I don't
remove and simply call another ADD while specifying the existing
SitelinksExtension Id, I get an INVALID_ADEXTENSION_ID errors. Lastly,
if I simply try to ADD without setting the Id or removing, then I get
a CANNOT_HAVE_MULTIPLE_SITELINKS_EXTENSIONS_PER_CAMPAIGN error.
Here's a snippet of my code:
CampaignAdExtensionServiceInterface extSvc =
user.getService(AdWordsService.V201003.CAMPAIGN_AD_EXTENSION_SERVICE);
try
{
CampaignAdExtensionSelector selector = new
CampaignAdExtensionSelector();
selector.setCampaignIds(new long[]
{ dbCampaign.getExternalIdAsLong() });
// Get all campaign ad extensions.
CampaignAdExtensionPage page = extSvc.get(selector);
// Display campaign ad extensions.
if (page.getEntries() != null &&
page.getEntries().length > 0)
{
for (CampaignAdExtension campaignAdExtension :
page.getEntries())
{
if
(campaignAdExtension.getAdExtension().getAdExtensionType().equals("SitelinksExtension"))
{
SitelinksExtension ext = new
SitelinksExtension();
ext.setId(campaignAdExtension.getAdExtension().getId());
CampaignAdExtension extension = new
CampaignAdExtension();
extension.setCampaignId(dbCampaign.getExternalIdAsLong());
extension.setAdExtension(ext);
CampaignAdExtensionOperation operation =
new CampaignAdExtensionOperation();
operation.setOperand(extension);
operation.setOperator(Operator.REMOVE);
extSvc.mutate(new
CampaignAdExtensionOperation[] { operation });
break;
}
}
}
}
catch (Exception e)
{
ServiceResult failure =
GoogleUtils.populateFaultToServiceResult(e);
results.put(dbCampaign, failure);
continue;
}
// Now add the new SiteLinks
List<CampaignAdExtensionOperation> lOperations = new
ArrayList<CampaignAdExtensionOperation>();
List<DBSiteLink> lSiteLinks = hmAdds.get(dbCampaign);
for (DBSiteLink dbSiteLink : lSiteLinks)
{
Sitelink sl = new Sitelink();
sl.setDestinationUrl(dbSiteLink.getDestinationUrl());
sl.setDisplayText(dbSiteLink.getDisplayText());
SitelinksExtension ext = new SitelinksExtension();
ext.setSitelinks(new Sitelink[] { sl });
CampaignAdExtension extension = new
CampaignAdExtension();
extension.setCampaignId(dbCampaign.getExternalIdAsLong());
extension.setAdExtension(ext);
CampaignAdExtensionOperation operation = new
CampaignAdExtensionOperation();
operation.setOperand(extension);
operation.setOperator(Operator.ADD);
lOperations.add(operation);
}
CampaignAdExtensionOperation[] operations =
lOperations.toArray(new
CampaignAdExtensionOperation[lOperations.size()]);
extSvc.mutate(operations);
Thanks for any help,
Joel
On Aug 17, 3:16 pm, joel <[email protected]> wrote:
> I'm implementing an API tool to manage Sitelinks. The API objects only
> provide an Id on the AdExtension object, and not for the Sitelink
> object. Therefore I can't add/remove/update individual Sitelinks for a
> Campaign, I need to delete the previous set of Sitelinks and re-add
> all of them. Since I can't modify these, I also don't see the need for
> the Id on the AdExtension object anyways. It seems as if the only way
> to work with this API is to always have my code:
>
> 1) GET/request any existing Sitelink AdExtension
> 2) Delete the existing SiteLink AdExtension if one does exist
> 3) Add a new one with my new list of Sitelinks
>
> Is there a better way to do this? If not, can you please consider
> adding Ids to the Sitelink objects so that those can be added/removed
> individually.
>
> Thanks,
>
> Joel
--
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en