Hi all, back in August I posted some requests for help with how adding and removing sitelinks works and would like to say a big thanks to Pete Lavetsky and Anash Oommen for their replies and advice.
Since the last post I have built an app for the google heads here to use to keep track of sitelinks across various accounts but have become a bit stuck on actually uploading sitelinks to an account. I'm using a particular account and campaign as a test account whilst checking everything is running smoothly but when I try to run even the example c# that Anash provided here http://adwordsapi.blogspot.com/2010/09/discover-v201003-using-ad-sitelinks.html I get errors when trying to parse the campaignid. I've had a quick look around the web and seen a few people with similar problems but not managed to find a solution that works. I've also tried the Google.Api.Ads.AdWords.v201101 version but get the same error trying to parse the campaignid. The code I have based on Anash's example at the url above is further down and the error I get back is: Exception Details: System.FormatException: Input string was not in a correct format. (Line: 39) Line 37: if (linkId != 1) Line 38: { Line 39: RemoveActiveSitelinkExtension(campaignId, long.Parse(linkId.ToString())); Line 40: } Line 41: //Begin code public static AdWordsUser user = new AdWordsUser(); public static CampaignAdExtensionService campaignExtensionService = (CampaignAdExtensionService)user.GetService(AdWordsService.v201003.CampaignAdExtensionService); protected void Page_Load(object sender, EventArgs e) { } protected void Send_Click(object sender, EventArgs e) { string cid = "12345678"; //not real, just an example id long campaignId = long.Parse(cid); Sitelink siteLink1 = new Sitelink(); siteLink1.displayText = "Bet Now Test"; siteLink1.destinationUrl = "http://www.sportingbet.com"; Sitelink siteLink2 = new Sitelink(); siteLink2.displayText = "Free Bet Test"; siteLink2.destinationUrl = "http://www.sportingbet.com"; long? linkId = GetActiveSitelinkExtension(campaignId); if (linkId != 1) { RemoveActiveSitelinkExtension(campaignId, long.Parse(linkId.ToString())); } AddSitelinks(campaignId, new Sitelink[] { siteLink1, siteLink2 }); } private long? GetActiveSitelinkExtension(long campaignId) { long? siteLinkExtensionId = null; // Get the campaign ad extension containing sitelinks. CampaignAdExtensionSelector selector = new CampaignAdExtensionSelector(); selector.campaignIds = new long[] { campaignId }; selector.statuses = new CampaignAdExtensionStatus[] { CampaignAdExtensionStatus.ACTIVE }; CampaignAdExtensionPage page = campaignExtensionService.get(selector); if (page != null && page.entries != null) { foreach (CampaignAdExtension extension in page.entries) { if (extension.adExtension is SitelinksExtension) { siteLinkExtensionId = extension.adExtension.id; break; } } } return siteLinkExtensionId; } private SitelinksExtension RemoveActiveSitelinkExtension(long campaignId, long siteLinkExtensionId) { CampaignAdExtension campaignAdExtension = new CampaignAdExtension(); campaignAdExtension.campaignId = campaignId; campaignAdExtension.adExtension = new AdExtension(); campaignAdExtension.adExtension.id = siteLinkExtensionId; CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation(); operation.@operator = Operator.REMOVE; operation.operand = campaignAdExtension; CampaignAdExtensionReturnValue retVal = campaignExtensionService.mutate(new CampaignAdExtensionOperation[] { operation }); if (retVal != null && retVal.value != null && retVal.value.Length > 0 && retVal.value[0].adExtension is SitelinksExtension) { return (SitelinksExtension)retVal.value[0].adExtension; } else { return null; } } private SitelinksExtension AddSitelinks(long campaignId, Sitelink[] siteLinks) { SitelinksExtension siteLinkExtension = new SitelinksExtension(); siteLinkExtension.sitelinks = siteLinks; CampaignAdExtension campaignAdExtension = new CampaignAdExtension(); campaignAdExtension.adExtension = siteLinkExtension; campaignAdExtension.campaignId = campaignId; CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation(); operation.@operator = Operator.ADD; operation.operand = campaignAdExtension; CampaignAdExtensionReturnValue retVal = campaignExtensionService.mutate(new CampaignAdExtensionOperation[] { operation }); if (retVal != null && retVal.value != null && retVal.value.Length > 0) { return retVal.value[0].adExtension as SitelinksExtension; } else { return null; } } //end code Any help with this would be great! Kind regards Paigey -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ 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 adwords-api@googlegroups.com To unsubscribe from this group, send email to adwords-api+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/adwords-api?hl=en