/// <summary> /// Gets the platform restrictions for sitelinks in a campaign. /// </summary> /// <param name="campaignFeed">The campaign feed.</param> /// <returns>The platform restrictions.</returns> private ExtensionSettingPlatform GetPlatformRestrictionsForCampaign( CampaignFeed campaignFeed) { string platformRestrictions = "NONE"; if (campaignFeed.matchingFunction.@operator == FunctionOperator.AND) { foreach (FunctionArgumentOperand argument in campaignFeed.matchingFunction.lhsOperand) { // Check if matchingFunction is of the form EQUALS(CONTEXT.DEVICE, 'Mobile'). if (argument is FunctionOperand) { FunctionOperand operand = (argument as FunctionOperand); if (operand.value.@operator == FunctionOperator.EQUALS) { RequestContextOperand requestContextOperand = operand.value.lhsOperand[0] as RequestContextOperand; if (requestContextOperand != null && requestContextOperand.contextType == RequestContextOperandContextType.DEVICE_PLATFORM) { platformRestrictions = (operand.value.rhsOperand[0] as ConstantOperand) .stringValue; } } } } } return((ExtensionSettingPlatform)Enum.Parse(typeof(ExtensionSettingPlatform), platformRestrictions, true)); }
private List<long> GetFeedItemsFromArgument(Function function) { List<long> feedItems = new List<long>(); if (function.lhsOperand.Length == 1) { RequestContextOperand requestContextOperand = function.lhsOperand[0] as RequestContextOperand; if (requestContextOperand != null && requestContextOperand.contextType == RequestContextOperandContextType.FEED_ITEM_ID) { foreach (ConstantOperand argument in function.rhsOperand) { feedItems.Add(argument.longValue); } } } return feedItems; }
private static void createSiteLinksCampaignFeed(AdWordsUser user, SiteLinksDataHolder siteLinksData, long campaignId) { // Get the CampaignFeedService. CampaignFeedService campaignFeedService = (CampaignFeedService)user.GetService(AdWordsService.v201406.CampaignFeedService); // Map the feed item ids to the campaign using an IN operation. RequestContextOperand feedItemRequestContextOperand = new RequestContextOperand(); feedItemRequestContextOperand.contextType = RequestContextOperandContextType.FEED_ITEM_ID; List <FunctionArgumentOperand> feedItemOperands = new List <FunctionArgumentOperand>(); foreach (long feedItemId in siteLinksData.SiteLinkFeedItemIds) { ConstantOperand feedItemOperand = new ConstantOperand(); feedItemOperand.longValue = feedItemId; feedItemOperand.type = ConstantOperandConstantType.LONG; feedItemOperands.Add(feedItemOperand); } Function feedItemfunction = new Function(); feedItemfunction.lhsOperand = new FunctionArgumentOperand[] { feedItemRequestContextOperand }; feedItemfunction.@operator = FunctionOperator.IN; feedItemfunction.rhsOperand = feedItemOperands.ToArray(); // Optional: to target to a platform, define a function and 'AND' it with // the feed item ID link: RequestContextOperand platformRequestContextOperand = new RequestContextOperand(); platformRequestContextOperand.contextType = RequestContextOperandContextType.DEVICE_PLATFORM; ConstantOperand platformOperand = new ConstantOperand(); platformOperand.stringValue = "Mobile"; platformOperand.type = ConstantOperandConstantType.STRING; Function platformFunction = new Function(); platformFunction.lhsOperand = new FunctionArgumentOperand[] { platformRequestContextOperand }; platformFunction.@operator = FunctionOperator.EQUALS; platformFunction.rhsOperand = new FunctionArgumentOperand[] { platformOperand }; // Combine the two functions using an AND operation. FunctionOperand feedItemFunctionOperand = new FunctionOperand(); feedItemFunctionOperand.value = feedItemfunction; FunctionOperand platformFunctionOperand = new FunctionOperand(); platformFunctionOperand.value = platformFunction; Function combinedFunction = new Function(); combinedFunction.@operator = FunctionOperator.AND; combinedFunction.lhsOperand = new FunctionArgumentOperand[] { feedItemFunctionOperand, platformFunctionOperand }; CampaignFeed campaignFeed = new CampaignFeed(); campaignFeed.feedId = siteLinksData.SiteLinksFeedId; campaignFeed.campaignId = campaignId; campaignFeed.matchingFunction = combinedFunction; // Specifying placeholder types on the CampaignFeed allows the same feed // to be used for different placeholders in different Campaigns. campaignFeed.placeholderTypes = new int[] { PLACEHOLDER_SITELINKS }; CampaignFeedOperation operation = new CampaignFeedOperation(); operation.operand = campaignFeed; operation.@operator = Operator.ADD; CampaignFeedReturnValue result = campaignFeedService.mutate(new CampaignFeedOperation[] { operation }); foreach (CampaignFeed savedCampaignFeed in result.value) { Console.WriteLine("Campaign with ID {0} was associated with feed with ID {1}", savedCampaignFeed.campaignId, savedCampaignFeed.feedId); } }