/// <summary> /// Creates a new Feed for ad customizers. /// </summary> /// <param name="user">The AdWords user.</param> /// <returns>A new CustomizersDataHolder, populated with the feed ID and /// attribute IDs of the new Feed.</returns> private static CustomizersDataHolder CreateCustomizerFeed(AdWordsUser user) { // Get the FeedService. FeedService feedService = (FeedService) user.GetService(AdWordsService.v201406.FeedService); Feed customizerFeed = new Feed(); customizerFeed.name = "CustomizerFeed"; FeedAttribute nameAttribute = new FeedAttribute(); nameAttribute.name = "Name"; nameAttribute.type = FeedAttributeType.STRING; FeedAttribute priceAttribute = new FeedAttribute(); priceAttribute.name = "Price"; priceAttribute.type = FeedAttributeType.STRING; FeedAttribute dateAttribute = new FeedAttribute(); dateAttribute.name = "Date"; dateAttribute.type = FeedAttributeType.DATE_TIME; customizerFeed.attributes = new FeedAttribute[] { nameAttribute, priceAttribute, dateAttribute }; FeedOperation feedOperation = new FeedOperation(); feedOperation.operand = customizerFeed; feedOperation.@operator = (Operator.ADD); Feed addedFeed = feedService.mutate(new FeedOperation[] { feedOperation }).value[0]; CustomizersDataHolder dataHolder = new CustomizersDataHolder(); dataHolder.FeedId = addedFeed.id; dataHolder.NameFeedAttributeId = addedFeed.attributes[0].id; dataHolder.PriceFeedAttributeId = addedFeed.attributes[1].id; dataHolder.DateFeedAttributeId = addedFeed.attributes[2].id; Console.WriteLine("Feed with name '{0}' and ID {1} was added with:\n", addedFeed.name, dataHolder.FeedId); Console.WriteLine(" Name attribute ID {0}\n", dataHolder.NameFeedAttributeId); Console.WriteLine(" Price attribute ID {0}\n", dataHolder.PriceFeedAttributeId); Console.WriteLine(" Date attribute ID {0}\n", dataHolder.DateFeedAttributeId); return dataHolder; }
private static void createSiteLinksFeed( AdWordsUser user, SiteLinksDataHolder siteLinksData) { // Get the FeedService. FeedService feedService = (FeedService) user.GetService(AdWordsService.v201406.FeedService); // Create attributes. FeedAttribute textAttribute = new FeedAttribute(); textAttribute.type = FeedAttributeType.STRING; textAttribute.name = "Link Text"; FeedAttribute urlAttribute = new FeedAttribute(); urlAttribute.type = FeedAttributeType.URL; urlAttribute.name = "Link URL"; // Create the feed. Feed siteLinksFeed = new Feed(); siteLinksFeed.name = "Feed For Site Links"; siteLinksFeed.attributes = new FeedAttribute[] {textAttribute, urlAttribute}; siteLinksFeed.origin = FeedOrigin.USER; // Create operation. FeedOperation operation = new FeedOperation(); operation.operand = siteLinksFeed; operation.@operator = Operator.ADD; // Add the feed. FeedReturnValue result = feedService.mutate(new FeedOperation[] {operation}); Feed savedFeed = result.value[0]; siteLinksData.SiteLinksFeedId = savedFeed.id; FeedAttribute[] savedAttributes = savedFeed.attributes; siteLinksData.LinkTextFeedAttributeId = savedAttributes[0].id; siteLinksData.LinkUrlFeedAttributeId = savedAttributes[1].id; Console.WriteLine("Feed with name {0} and ID {1} with linkTextAttributeId {2}" + " and linkUrlAttributeId {3} was created.", savedFeed.name, savedFeed.id, savedAttributes[0].id, savedAttributes[1].id); }
/// <summary> /// Runs the code example. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="placesEmailAddress">The email address for Google Places /// account.</param> /// <param name="placesAccessToken">The OAuth2 access token for Google /// Places account.</param> public void Run(AdWordsUser user, string placesEmailAddress, string placesAccessToken) { FeedService feedService = (FeedService) user.GetService(AdWordsService.v201406.FeedService); CustomerFeedService customerFeedService = (CustomerFeedService) user.GetService( AdWordsService.v201406.CustomerFeedService); // Create a feed that will sync to the Google Places account specified // by placesEmailAddress. Do not add FeedAttributes to this object, // as AdWords will add them automatically because this will be a // system generated feed. Feed placesFeed = new Feed(); placesFeed.name = String.Format("Places feed #{0}", ExampleUtilities.GetRandomString()); PlacesLocationFeedData feedData = new PlacesLocationFeedData(); feedData.emailAddress = placesEmailAddress; OAuthInfo oAuthInfo = new OAuthInfo(); oAuthInfo.httpMethod = "GET"; oAuthInfo.httpRequestUrl = "https://www.google.com/local/add"; oAuthInfo.httpAuthorizationHeader = string.Format("Bearer {0}", placesAccessToken); feedData.oAuthInfo = oAuthInfo; placesFeed.systemFeedGenerationData = feedData; // Since this feed's feed items will be managed by AdWords, // you must set its origin to ADWORDS. placesFeed.origin = FeedOrigin.ADWORDS; // Create an operation to add the feed. FeedOperation feedOperation = new FeedOperation(); feedOperation.operand = placesFeed; feedOperation.@operator = Operator.ADD; try { // Add the feed. Since it is a system generated feed, AdWords will // automatically: // 1. Set up the FeedAttributes on the feed. // 2. Set up a FeedMapping that associates the FeedAttributes of the // feed with the placeholder fields of the LOCATION placeholder // type. FeedReturnValue addFeedResult = feedService.mutate(new FeedOperation[] { feedOperation }); Feed addedFeed = addFeedResult.value[0]; Console.WriteLine("Added places feed with ID {0}", addedFeed.id); // Add a CustomerFeed that associates the feed with this customer for // the LOCATION placeholder type. CustomerFeed customerFeed = new CustomerFeed(); customerFeed.feedId = addedFeed.id; customerFeed.placeholderTypes = new int[] { PLACEHOLDER_LOCATION }; // Create a matching function that will always evaluate to true. Function customerMatchingFunction = new Function(); ConstantOperand constOperand = new ConstantOperand(); constOperand.type = ConstantOperandConstantType.BOOLEAN; constOperand.booleanValue = true; customerMatchingFunction.lhsOperand = new FunctionArgumentOperand[] { constOperand }; customerMatchingFunction.@operator = FunctionOperator.IDENTITY; customerFeed.matchingFunction = customerMatchingFunction; // Create an operation to add the customer feed. CustomerFeedOperation customerFeedOperation = new CustomerFeedOperation(); customerFeedOperation.operand = customerFeed; customerFeedOperation.@operator = Operator.ADD; // After the completion of the Feed ADD operation above the added feed // will not be available for usage in a CustomerFeed until the sync // between the AdWords and Places accounts completes. The loop below // will retry adding the CustomerFeed up to ten times with an // exponential back-off policy. CustomerFeed addedCustomerFeed = null; AdWordsAppConfig config = new AdWordsAppConfig(); config.RetryCount = 10; ErrorHandler errorHandler = new ErrorHandler(config); do { try { CustomerFeedReturnValue customerFeedResult = customerFeedService.mutate(new CustomerFeedOperation[] { customerFeedOperation }); addedCustomerFeed = customerFeedResult.value[0]; Console.WriteLine("Added CustomerFeed for feed ID {0} and placeholder type {1}", addedCustomerFeed.feedId, addedCustomerFeed.placeholderTypes[0]); break; } catch (AdWordsApiException e) { ApiException apiException = (ApiException) e.ApiException; foreach (ApiError error in apiException.errors) { if (error is CustomerFeedError) { if ((error as CustomerFeedError).reason == CustomerFeedErrorReason.MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE) { errorHandler.DoExponentialBackoff(); errorHandler.IncrementRetriedAttempts(); } else { throw; } } } } } while (errorHandler.HaveMoreRetryAttemptsLeft()); // OPTIONAL: Create a CampaignFeed to specify which FeedItems to use at // the Campaign level. This will be similar to the CampaignFeed in the // AddSiteLinks example, except you can also filter based on the // business name and category of each FeedItem by using a // FeedAttributeOperand in your matching function. // OPTIONAL: Create an AdGroupFeed for even more fine grained control // over which feed items are used at the AdGroup level. } catch (Exception ex) { throw new System.ApplicationException("Failed to create customer feed.", ex); } }