示例#1
0
        /// <summary>
        /// Creates the feed for DSA page URLs.
        /// </summary>
        /// <param name="user">The AdWords User.</param>
        /// <returns>The feed details.</returns>
        private static DSAFeedDetails CreateFeed(AdWordsUser user)
        {
            using (FeedService feedService =
                       (FeedService)user.GetService(AdWordsService.v201802.FeedService))
            {
                // Create attributes.
                FeedAttribute urlAttribute = new FeedAttribute
                {
                    type = FeedAttributeType.URL_LIST,
                    name = "Page URL"
                };

                FeedAttribute labelAttribute = new FeedAttribute
                {
                    type = FeedAttributeType.STRING_LIST,
                    name = "Label"
                };

                // Create the feed.
                Feed sitelinksFeed = new Feed
                {
                    name       = "DSA Feed " + ExampleUtilities.GetRandomString(),
                    attributes = new FeedAttribute[]
                    {
                        urlAttribute,
                        labelAttribute
                    },
                    origin = FeedOrigin.USER
                };

                // Create operation.
                FeedOperation operation = new FeedOperation
                {
                    operand   = sitelinksFeed,
                    @operator = Operator.ADD
                };

                try
                {
                    // Add the feed.
                    FeedReturnValue result = feedService.mutate(new FeedOperation[]
                    {
                        operation
                    });

                    Feed savedFeed = result.value[0];
                    return(new DSAFeedDetails
                    {
                        feedId = savedFeed.id,
                        urlAttributeId = savedFeed.attributes[0].id,
                        labelAttributeId = savedFeed.attributes[1].id,
                    });
                }
                catch (Exception e)
                {
                    throw new System.ApplicationException("Failed to create DSA feed.", e);
                }
            }
        }
示例#2
0
        private static void createSitelinksFeed(AdWordsUser user, SitelinksDataHolder sitelinksData,
                                                string feedName)
        {
            // Get the FeedService.
            FeedService feedService = (FeedService)user.GetService(AdWordsService.v201702.FeedService);

            // Create attributes.
            FeedAttribute textAttribute = new FeedAttribute();

            textAttribute.type = FeedAttributeType.STRING;
            textAttribute.name = "Link Text";

            FeedAttribute finalUrlAttribute = new FeedAttribute();

            finalUrlAttribute.type = FeedAttributeType.URL_LIST;
            finalUrlAttribute.name = "Link Final URLs";

            FeedAttribute line2Attribute = new FeedAttribute();

            line2Attribute.type = FeedAttributeType.STRING;
            line2Attribute.name = "Line 2";

            FeedAttribute line3Attribute = new FeedAttribute();

            line3Attribute.type = FeedAttributeType.STRING;
            line3Attribute.name = "Line 3";

            // Create the feed.
            Feed sitelinksFeed = new Feed();

            sitelinksFeed.name       = feedName;
            sitelinksFeed.attributes = new FeedAttribute[] { textAttribute, finalUrlAttribute,
                                                             line2Attribute, line3Attribute };
            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.FeedId = savedFeed.id;

            FeedAttribute[] savedAttributes = savedFeed.attributes;
            sitelinksData.LinkTextFeedAttributeId     = savedAttributes[0].id;
            sitelinksData.LinkFinalUrlFeedAttributeId = savedAttributes[1].id;
            sitelinksData.Line2FeedAttributeId        = savedAttributes[2].id;
            sitelinksData.Line3FeedAttributeId        = savedAttributes[3].id;

            Console.WriteLine("Feed with name {0} and ID {1} with linkTextAttributeId {2}, " +
                              "linkFinalUrlAttributeId {3}, line2AttributeId {4} and line3AttributeId {5} " +
                              "was created.", savedFeed.name, savedFeed.id, savedAttributes[0].id,
                              savedAttributes[1].id, savedAttributes[2].id, savedAttributes[3].id);
        }
        /// <summary>
        /// Create a feed that will sync to the Google My Business account
        /// specified by gmbEmailAddress.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="gmbEmailAddress">The GMB email address.</param>
        /// <param name="gmbAccessToken">The GMB access token.</param>
        /// <param name="businessAccountIdentifier">The GMB account identifier.</param>
        /// <returns>The newly created GMB feed.</returns>
        private static Feed CreateGmbFeed(AdWordsUser user, string gmbEmailAddress,
                                          string gmbAccessToken, string businessAccountIdentifier)
        {
            using (FeedService feedService = (FeedService)user.GetService(
                       AdWordsService.v201710.FeedService)) {
                // Create a feed that will sync to the Google My Business account
                // specified by gmbEmailAddress. Do not add FeedAttributes to this object,
                // as AdWords will add them automatically because this will be a
                // system generated feed.
                Feed gmbFeed = new Feed();
                gmbFeed.name = String.Format("Google My Business feed #{0}",
                                             ExampleUtilities.GetRandomString());

                PlacesLocationFeedData feedData = new PlacesLocationFeedData();
                feedData.emailAddress = gmbEmailAddress;
                feedData.businessAccountIdentifier = businessAccountIdentifier;

                // Optional: specify labels to filter Google My Business listings. If
                // specified, only listings that have any of the labels set are
                // synchronized into FeedItems.
                feedData.labelFilters = new string[] { "Stores in New York City" };

                OAuthInfo oAuthInfo = new OAuthInfo();
                oAuthInfo.httpMethod = "GET";

                // Permissions for the AdWords API scope will also cover GMB.
                oAuthInfo.httpRequestUrl          = user.Config.GetDefaultOAuth2Scope();
                oAuthInfo.httpAuthorizationHeader = string.Format("Bearer {0}", gmbAccessToken);
                feedData.oAuthInfo = oAuthInfo;

                gmbFeed.systemFeedGenerationData = feedData;

                // Since this feed's feed items will be managed by AdWords,
                // you must set its origin to ADWORDS.
                gmbFeed.origin = FeedOrigin.ADWORDS;

                // Create an operation to add the feed.
                FeedOperation feedOperation = new FeedOperation();
                feedOperation.operand   = gmbFeed;
                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 GMB feed with ID {0}", addedFeed.id);
                    return(addedFeed);
                } catch (Exception e) {
                    throw new System.ApplicationException("Failed to create GMB feed.", e);
                }
            }
        }
        private static void createSiteLinksFeed(
            AdWordsUser user, SiteLinksDataHolder siteLinksData)
        {
            // Get the FeedService.
            FeedService feedService = (FeedService)user.GetService(AdWordsService.v201409.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>
        /// Creates the feed for DSA page URLs.
        /// </summary>
        /// <param name="user">The AdWords User.</param>
        /// <returns>The feed details.</returns>
        private static DSAFeedDetails CreateFeed(AdWordsUser user)
        {
            // Get the FeedService.
            FeedService feedService = (FeedService)user.GetService(AdWordsService.v201705.FeedService);

            // Create attributes.
            FeedAttribute urlAttribute = new FeedAttribute();

            urlAttribute.type = FeedAttributeType.URL_LIST;
            urlAttribute.name = "Page URL";

            FeedAttribute labelAttribute = new FeedAttribute();

            labelAttribute.type = FeedAttributeType.STRING_LIST;
            labelAttribute.name = "Label";

            // Create the feed.
            Feed sitelinksFeed = new Feed();

            sitelinksFeed.name       = "DSA Feed " + ExampleUtilities.GetRandomString();
            sitelinksFeed.attributes = new FeedAttribute[] { urlAttribute, labelAttribute };
            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];

            return(new DSAFeedDetails {
                feedId = savedFeed.id,
                urlAttributeId = savedFeed.attributes[0].id,
                labelAttributeId = savedFeed.attributes[1].id,
            });
        }
        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="gmbEmailAddress">The email address for Google My Business
        /// account.</param>
        /// <param name="gmbAccessToken">The OAuth2 access token for Google
        /// My Business account.</param>
        /// <param name="businessAccountIdentifier">The account identifier for
        /// Google My Business account.</param>
        public void Run(AdWordsUser user, string gmbEmailAddress, string gmbAccessToken,
                        string businessAccountIdentifier)
        {
            FeedService feedService = (FeedService)user.GetService(AdWordsService.v201502.FeedService);

            CustomerFeedService customerFeedService = (CustomerFeedService)user.GetService(
                AdWordsService.v201502.CustomerFeedService);

            // Create a feed that will sync to the Google My Business account
            // specified by gmbEmailAddress. Do not add FeedAttributes to this object,
            // as AdWords will add them automatically because this will be a
            // system generated feed.
            Feed gmbFeed = new Feed();

            gmbFeed.name = String.Format("Google My Business feed #{0}",
                                         ExampleUtilities.GetRandomString());

            PlacesLocationFeedData feedData = new PlacesLocationFeedData();

            feedData.emailAddress = gmbEmailAddress;
            feedData.businessAccountIdentifier = businessAccountIdentifier;

            OAuthInfo oAuthInfo = new OAuthInfo();

            oAuthInfo.httpMethod = "GET";

            // Permissions for the AdWords API scope will also cover GMB.
            oAuthInfo.httpRequestUrl          = user.Config.GetDefaultOAuth2Scope();
            oAuthInfo.httpAuthorizationHeader = string.Format("Bearer {0}", gmbAccessToken);
            feedData.oAuthInfo = oAuthInfo;

            gmbFeed.systemFeedGenerationData = feedData;

            // Since this feed's feed items will be managed by AdWords,
            // you must set its origin to ADWORDS.
            gmbFeed.origin = FeedOrigin.ADWORDS;

            // Create an operation to add the feed.
            FeedOperation feedOperation = new FeedOperation();

            feedOperation.operand   = gmbFeed;
            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 GMB 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 GMB 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 e) {
                throw new System.ApplicationException("Failed to create customer feed.", e);
            }
        }