Looks like the parsing of the campaignid is a bit buggy! Using dotnet 4.0 and the latest version of the api so couldn't use long.Parse.
Changed string cid = "12345678"; //not real, just an example id long campaignId = long.Parse(cid); To string cid = "12345678"; //not real, just an example id long campaignId = Int64.Parse(cid); and that seems to have fixed it to a point but still get an occasional error thrown up by the api saying the IDENTITY ID wasn't found when removing sitelinks. If anyone knows a better way to parse a string as long that would be great otherwise will do some further testing to see if this keeps happening! On Nov 14, 6:05 pm, Paigey <chiswicki...@googlemail.com> wrote: > Looks like the value linkid on line 39 is null and the api doesn;t > allow nullable values. > I added > > if (linkId == null) > { > linkId = 0; > } > > to just before > > RemoveActiveSitelinkExtension(campaignId, > long.Parse(linkId.Value.ToString())); > > Now get the error > > Exception Details: System.Web.Services.Protocols.SoapException: > [RangeError.TOO_LOW @ operations[0].operand.adExtension.id.id] > > Source Error: (Line: 84) > > Line 82: operation.@operator = Operator.REMOVE; > Line 83: operation.operand = campaignAdExtension; > Line 84: CampaignAdExtensionReturnValue retVal = > Line 85: campaignExtensionService.mutate(new > CampaignAdExtensionOperation[] { > Line 86: operation }); > > On Nov 14, 5:41 pm, Paigey <chiswicki...@googlemail.com> wrote: > > > > > 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 > > herehttp://adwordsapi.blogspot.com/2010/09/discover-v201003-using-ad-site... > > 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- Hide quoted text - > > - Show quoted text - -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ 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