private static void createSiteLinksCampaignFeed(AdWordsUser user,
SiteLinksDataHolder siteLinksData, long campaignId)
{
// Get the CampaignFeedService.
CampaignFeedService campaignFeedService =
(CampaignFeedService) user.GetService(AdWordsService.v201306.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);
}
}