Пример #1
0
        /// <summary>
        /// Deletes the old feed items for which extension settings have been
        /// created.
        /// </summary>
        /// <param name="user">The user that owns the feed items.</param>
        /// <param name="feedItemIds">IDs of the feed items to be removed.</param>
        /// <param name="feedId">ID of the feed that holds the feed items.</param>
        private void DeleteOldFeedItems(AdWordsUser user, List <long> feedItemIds, long feedId)
        {
            if (feedItemIds.Count == 0)
            {
                return;
            }
            List <FeedItemOperation> operations = new List <FeedItemOperation>();

            foreach (long feedItemId in feedItemIds)
            {
                FeedItemOperation operation = new FeedItemOperation()
                {
                    @operator = Operator.REMOVE,
                    operand   = new FeedItem()
                    {
                        feedItemId = feedItemId,
                        feedId     = feedId
                    }
                };
                operations.Add(operation);
            }
            FeedItemService feedItemService = (FeedItemService)user.GetService(
                AdWordsService.v201609.FeedItemService);

            feedItemService.mutate(operations.ToArray());
            return;
        }
Пример #2
0
        /// <summary>
        /// Creates feed items with the values to use in ad customizations for each
        /// ad group in <code>adGroupIds</code>.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="adGroupIds">IDs of adgroups to which ad customizations are
        /// made.</param>
        /// <param name="adCustomizerFeed">The ad customizer feed.</param>
        private static void CreateCustomizerFeedItems(AdWordsUser user, long[] adGroupIds,
                                                      AdCustomizerFeed adCustomizerFeed)
        {
            using (FeedItemService feedItemService =
                       (FeedItemService)user.GetService(AdWordsService.v201809.FeedItemService))
            {
                List <FeedItemOperation> feedItemOperations = new List <FeedItemOperation>();

                DateTime marsDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                feedItemOperations.Add(CreateFeedItemAddOperation(adCustomizerFeed, "Mars",
                                                                  "$1234.56", marsDate.ToString("yyyyMMdd HHmmss")));

                DateTime venusDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 15);
                feedItemOperations.Add(CreateFeedItemAddOperation(adCustomizerFeed, "Venus",
                                                                  "$1450.00", venusDate.ToString("yyyyMMdd HHmmss")));

                FeedItemReturnValue feedItemReturnValue =
                    feedItemService.mutate(feedItemOperations.ToArray());

                foreach (FeedItem addedFeedItem in feedItemReturnValue.value)
                {
                    Console.WriteLine("Added feed item with ID {0}", addedFeedItem.feedItemId);
                }

                // Add feed item targeting to restrict the feed item to specific ad groups.
                RestrictFeedItemToAdGroup(user, feedItemReturnValue.value[0], adGroupIds[0]);
                RestrictFeedItemToAdGroup(user, feedItemReturnValue.value[1], adGroupIds[1]);
            }
        }
Пример #3
0
        public void GetFeedItems_FeedItemHtmlParserParseThrowsException_LogsErrorAndThrowsBoomkatServiceException()
        {
            var feedItemHtmlParserFake = A.Fake <IFeedItemHtmlParser>();
            var pages = (IList <string>)null;

            A.CallTo(() => feedItemHtmlParserFake.Parse(A <IHtmlDocument> .Ignored, out pages)).Throws(new Exception("foo"));
            var logFactoryFake = A.Fake <ILogFactory>();
            var logFake        = A.Fake <ILog>();

            A.CallTo(() => logFactoryFake.GetLogger(A <Type> .Ignored)).Returns(logFake);

            var feedItemService = new FeedItemService(
                feedItemHtmlParserFake,
                A.Fake <IHtmlWebFactory>(),
                A.Fake <IUrlBuilder>(),
                logFactoryFake);

            try {
                var feedItemsResult = feedItemService.GetFeedItems(1);
            }
            catch (Exception ex) {
                Assert.That(ex, Is.TypeOf <BoomkatServiceException>());
            }

            A.CallTo(() => logFake.ErrorFormat(A <string> .Ignored, A <object[]> .Ignored)).MustHaveHappened(Repeated.Exactly.Once);
        }
        /// <summary>
        /// Creates FeedItems with the values to use in ad customizations for each
        /// ad group in <code>adGroupIds</code>.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="adGroupIds">IDs of adgroups to which ad customizations are
        /// made.</param>
        /// <param name="adCustomizerFeed">The ad customizer feed.</param>
        private static void CreateCustomizerFeedItems(AdWordsUser user, long[] adGroupIds,
                                                      AdCustomizerFeed adCustomizerFeed)
        {
            // Get the FeedItemService.
            FeedItemService feedItemService = (FeedItemService)user.GetService(
                AdWordsService.v201605.FeedItemService);

            List <FeedItemOperation> feedItemOperations = new List <FeedItemOperation>();

            DateTime marsDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

            feedItemOperations.Add(CreateFeedItemAddOperation(adCustomizerFeed, "Mars", "$1234.56",
                                                              marsDate.ToString("yyyyMMdd HHmmss"), adGroupIds[0]));

            DateTime venusDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 15);

            feedItemOperations.Add(CreateFeedItemAddOperation(adCustomizerFeed, "Venus", "$1450.00",
                                                              venusDate.ToString("yyyyMMdd HHmmss"), adGroupIds[1]));

            FeedItemReturnValue feedItemReturnValue = feedItemService.mutate(
                feedItemOperations.ToArray());

            foreach (FeedItem addedFeedItem in feedItemReturnValue.value)
            {
                Console.WriteLine("Added feed item with ID {0}", addedFeedItem.feedItemId);
            }
        }
Пример #5
0
        public void GetFeedItemsByGenre_HtmlWebLoadThrowsException_LogsErrorAndThrowsBoomkatServiceException()
        {
            var htmlWebFake = A.Fake <IHtmlWeb>();

            A.CallTo(() => htmlWebFake.Load(A <string> .Ignored)).Throws(new Exception("foo"));
            var htmlWebFactoryFake = A.Fake <IHtmlWebFactory>();

            A.CallTo(() => htmlWebFactoryFake.Get()).Returns(htmlWebFake);
            A.CallTo(() => htmlWebFake.Load(A <string> .Ignored)).Throws(new Exception("abc"));
            var logFactoryFake = A.Fake <ILogFactory>();
            var logFake        = A.Fake <ILog>();

            A.CallTo(() => logFactoryFake.GetLogger(A <Type> .Ignored)).Returns(logFake);

            var feedItemService = new FeedItemService(
                A.Fake <IFeedItemHtmlParser>(),
                htmlWebFactoryFake,
                A.Fake <IUrlBuilder>(),
                logFactoryFake);

            try {
                var feedItemsResult = feedItemService.GetFeedItemsByGenre(2, 1);
            }
            catch (Exception ex) {
                Assert.That(ex, Is.TypeOf <BoomkatServiceException>());
            }

            A.CallTo(() => logFake.ErrorFormat(A <string> .Ignored, A <object[]> .Ignored)).MustHaveHappened(Repeated.Exactly.Once);
        }
 /// <summary>
 /// Gets the feed items in a feed.
 /// </summary>
 /// <param name="user">The user that owns the feed.</param>
 /// <param name="feedId">The feed ID.</param>
 /// <returns>The list of feed items in the feed.</returns>
 private FeedItem[] GetFeedItems(AdWordsUser user, long feedId) {
   FeedItemService feedItemService = (FeedItemService) user.GetService(
       AdWordsService.v201509.FeedItemService);
   FeedItemPage page = feedItemService.query(string.Format("Select FeedItemId, " +
       "AttributeValues, Scheduling  where Status = 'ENABLED' and FeedId = '{0}'", feedId));
   return page.entries;
 }
Пример #7
0
        /// <summary>
        /// Update Site Link using Feed Item Service
        /// </summary>
        /// <param name="user">Adwords User Object</param>
        /// <param name="feedItem">Feed Item on which Operation to be performed</param>
        /// <returns>FeedItem returned after performing SET Operation</returns>
        public FeedItem UpdateSiteLinkUsingFeedItemService(AdWordsUser user, FeedItem feedItem)
        {
            FeedItemService   feedItemService   = (FeedItemService)user.GetService(AdWordsService.v201809.FeedItemService);
            FeedItemOperation feedItemOperation = new FeedItemOperation();

            feedItemOperation.operand   = feedItem;
            feedItemOperation.@operator = Operator.SET;
            try
            {
                FeedItemReturnValue feedItemReturnValue = feedItemService.mutate(new[] { feedItemOperation });
                if (feedItemReturnValue.value != null && feedItemReturnValue.value.Length > 0)
                {
                    FeedItem modifiedFeedItem = feedItemReturnValue.value[0];
                    Logger.Log(Logger.LogType.INFO, "Modification Successful for Feed(ID): " + feedItem.feedId + " with FeedItem(ID): " + feedItem.feedItemId);
                    return(modifiedFeedItem);
                }
                else
                {
                    Logger.Log(Logger.LogType.WARNING, "Nothing Modified for Feed(ID): " + feedItem.feedId + " with FeedItem(ID): " + feedItem.feedItemId);
                    return(null);
                }
            }
            catch (AdWordsApiException ex)
            {
                Logger.Log(Logger.LogType.EXCEPTION, Environment.NewLine + ex.Message + Environment.NewLine + ex.InnerException);
                return(null);
            }
        }
Пример #8
0
        private static void CreateSitelinksFeedItems(AdWordsUser user,
                                                     SitelinksDataHolder siteLinksData)
        {
            using (FeedItemService feedItemService =
                       (FeedItemService)user.GetService(AdWordsService.v201809.FeedItemService))
            {
                // Create operations to add FeedItems.
                FeedItemOperation home = NewSitelinkFeedItemAddOperation(siteLinksData, "Home",
                                                                         "http://www.example.com", "Home line 2", "Home line 3");
                FeedItemOperation stores = NewSitelinkFeedItemAddOperation(siteLinksData, "Stores",
                                                                           "http://www.example.com/stores", "Stores line 2", "Stores line 3");
                FeedItemOperation onSale = NewSitelinkFeedItemAddOperation(siteLinksData, "On Sale",
                                                                           "http://www.example.com/sale", "On Sale line 2", "On Sale line 3");
                FeedItemOperation support = NewSitelinkFeedItemAddOperation(siteLinksData,
                                                                            "Support", "http://www.example.com/support", "Support line 2",
                                                                            "Support line 3");
                FeedItemOperation products = NewSitelinkFeedItemAddOperation(siteLinksData,
                                                                             "Products", "http://www.example.com/prods", "Products line 2",
                                                                             "Products line 3");

                // This site link is using geographical targeting to use LOCATION_OF_PRESENCE.
                FeedItemOperation aboutUs = NewSitelinkFeedItemAddOperation(siteLinksData,
                                                                            "About Us", "http://www.example.com/about", "About Us line 2",
                                                                            "About Us line 3", true);

                FeedItemOperation[] operations = new FeedItemOperation[]
                {
                    home,
                    stores,
                    onSale,
                    support,
                    products,
                    aboutUs
                };

                FeedItemReturnValue result = feedItemService.mutate(operations);
                foreach (FeedItem item in result.value)
                {
                    Console.WriteLine("FeedItem with feedItemId {0} was added.", item.feedItemId);
                    siteLinksData.FeedItemIds.Add(item.feedItemId);
                }

                // Target the "aboutUs" sitelink to geographically target California.
                // See https://developers.google.com/adwords/api/docs/appendix/geotargeting for
                // location criteria for supported locations.
                RestrictFeedItemToGeoTarget(user, result.value[5], 21137);
            }
        }
Пример #9
0
 /// <summary>
 /// Creates the page URLs in the DSA page feed.
 /// </summary>
 /// <param name="user">The AdWords user.</param>
 /// <param name="feedDetails">The feed details.</param>
 /// <param name="labelName">The pagefeed url label.</param>
 private static void CreateFeedItems(AdWordsUser user, DSAFeedDetails feedDetails,
                                     string labelName)
 {
     using (FeedItemService feedItemService = (FeedItemService)user.GetService(
                AdWordsService.v201802.FeedItemService)) {
         FeedItemOperation[] operations = new FeedItemOperation[] {
             CreateDsaUrlAddOperation(feedDetails, "http://www.example.com/discounts/rental-cars",
                                      labelName),
             CreateDsaUrlAddOperation(feedDetails, "http://www.example.com/discounts/hotel-deals",
                                      labelName),
             CreateDsaUrlAddOperation(feedDetails, "http://www.example.com/discounts/flight-deals",
                                      labelName),
         };
         feedItemService.mutate(operations);
     }
 }
Пример #10
0
        /// <summary>
        /// Gets the feed items in a feed.
        /// </summary>
        /// <param name="user">The user that owns the feed.</param>
        /// <param name="feedId">The feed ID.</param>
        /// <returns>The list of feed items in the feed.</returns>
        public FeedItem[] GetFeedItems(AdWordsUser user, long feedId, [Optional] long feedItemId)
        {
            using (FeedItemService feedItemService = (FeedItemService)user.GetService(AdWordsService.v201809.FeedItemService))
            {
                Selector selector = new Selector()
                {
                    fields = new string[] {
                        FeedItem.Fields.FeedId,
                        FeedItem.Fields.FeedItemId,
                        FeedItem.Fields.AttributeValues,
                        FeedItem.Fields.PolicySummaries,
                        FeedItem.Fields.StartTime,
                        FeedItem.Fields.EndTime,
                        FeedItem.Fields.Status,
                        FeedItem.Fields.UrlCustomParameters,
                    },
                };

                Predicate[] predicates;
                if (feedItemId != 0)
                {
                    predicates = new Predicate[] {
                        Predicate.Equals(FeedItem.FilterableFields.FeedId, feedId),
                        Predicate.Equals(FeedItem.FilterableFields.FeedItemId, feedItemId),
                    };
                }
                else
                {
                    predicates = new Predicate[] {
                        Predicate.Equals(FeedItem.FilterableFields.FeedId, feedId),
                    };
                }

                selector.predicates = predicates;
                selector.paging     = Paging.Default;

                FeedItemPage page = feedItemService.get(selector);
                if (page.totalNumEntries > 0)
                {
                    return(page.entries);
                }
                return(null);
            }
        }
Пример #11
0
        private static void createSitelinksFeedItems(AdWordsUser user,
                                                     SitelinksDataHolder siteLinksData)
        {
            using (FeedItemService feedItemService =
                       (FeedItemService)user.GetService(AdWordsService.v201802.FeedItemService))
            {
                // Create operations to add FeedItems.
                FeedItemOperation home = newSitelinkFeedItemAddOperation(siteLinksData, "Home",
                                                                         "http://www.example.com", "Home line 2", "Home line 3");
                FeedItemOperation stores = newSitelinkFeedItemAddOperation(siteLinksData, "Stores",
                                                                           "http://www.example.com/stores", "Stores line 2", "Stores line 3");
                FeedItemOperation onSale = newSitelinkFeedItemAddOperation(siteLinksData, "On Sale",
                                                                           "http://www.example.com/sale", "On Sale line 2", "On Sale line 3");
                FeedItemOperation support = newSitelinkFeedItemAddOperation(siteLinksData,
                                                                            "Support", "http://www.example.com/support", "Support line 2",
                                                                            "Support line 3");
                FeedItemOperation products = newSitelinkFeedItemAddOperation(siteLinksData,
                                                                             "Products", "http://www.example.com/prods", "Products line 2",
                                                                             "Products line 3");

                // This site link is using geographical targeting by specifying the
                // criterion ID for California.
                FeedItemOperation aboutUs = newSitelinkFeedItemAddOperation(siteLinksData,
                                                                            "About Us", "http://www.example.com/about", "About Us line 2",
                                                                            "About Us line 3", 21137);

                FeedItemOperation[] operations = new FeedItemOperation[]
                {
                    home,
                    stores,
                    onSale,
                    support,
                    products,
                    aboutUs
                };

                FeedItemReturnValue result = feedItemService.mutate(operations);
                foreach (FeedItem item in result.value)
                {
                    Console.WriteLine("FeedItem with feedItemId {0} was added.", item.feedItemId);
                    siteLinksData.FeedItemIds.Add(item.feedItemId);
                }
            }
        }
Пример #12
0
        private static void createSiteLinksFeedItems(
            AdWordsUser user, SiteLinksDataHolder siteLinksData)
        {
            // Get the FeedItemService.
            FeedItemService feedItemService =
                (FeedItemService)user.GetService(AdWordsService.v201406.FeedItemService);

            // Create operations to add FeedItems.
            FeedItemOperation home =
                newSiteLinkFeedItemAddOperation(siteLinksData,
                                                "Home", "http://www.example.com");
            FeedItemOperation stores =
                newSiteLinkFeedItemAddOperation(siteLinksData,
                                                "Stores", "http://www.example.com/stores");
            FeedItemOperation onSale =
                newSiteLinkFeedItemAddOperation(siteLinksData,
                                                "On Sale", "http://www.example.com/sale");
            FeedItemOperation support =
                newSiteLinkFeedItemAddOperation(siteLinksData,
                                                "Support", "http://www.example.com/support");
            FeedItemOperation products =
                newSiteLinkFeedItemAddOperation(siteLinksData,
                                                "Products", "http://www.example.com/prods");
            FeedItemOperation aboutUs =
                newSiteLinkFeedItemAddOperation(siteLinksData,
                                                "About Us", "http://www.example.com/about");

            FeedItemOperation[] operations =
                new FeedItemOperation[] { home, stores, onSale, support, products, aboutUs };

            FeedItemReturnValue result = feedItemService.mutate(operations);

            foreach (FeedItem item in result.value)
            {
                Console.WriteLine("FeedItem with feedItemId {0} was added.", item.feedItemId);
                siteLinksData.SiteLinkFeedItemIds.Add(item.feedItemId);
            }
        }
        /// <summary>
        /// Creates FeedItems with the values to use in ad customizations for each
        /// ad group in <code>adGroupIds</code>.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        /// <param name="adGroupIds">IDs of adgroups to which ad customizations are
        /// made.</param>
        /// <param name="dataHolder">The data holder that contains metadata about
        /// the customizer Feed.</param>
        private static void CreateCustomizerFeedItems(AdWordsUser user, long[] adGroupIds,
                                                      CustomizersDataHolder dataHolder)
        {
            // Get the FeedItemService.
            FeedItemService feedItemService = (FeedItemService)user.GetService(
                AdWordsService.v201406.FeedItemService);

            List <FeedItemOperation> feedItemOperations = new List <FeedItemOperation>();

            feedItemOperations.Add(CreateFeedItemAddOperation("Mars", "$1234.56", "20140601 000000",
                                                              adGroupIds[0], dataHolder));
            feedItemOperations.Add(CreateFeedItemAddOperation("Venus", "$1450.00", "20140615 120000",
                                                              adGroupIds[1], dataHolder));

            FeedItemReturnValue feedItemReturnValue = feedItemService.mutate(
                feedItemOperations.ToArray());

            foreach (FeedItem addedFeedItem in feedItemReturnValue.value)
            {
                Console.WriteLine("Added feed item with ID {0}", addedFeedItem.feedItemId);
                dataHolder.FeedItemIds.Add(addedFeedItem.feedItemId);
            }
        }
        public void FeedItemsByGenre_ReturnsFeedItemsResult()
        {
            var urlBuilderFake = A.Fake <IUrlBuilder>();

            A.CallTo(() => urlBuilderFake.BuildFeedItemByGenreUrl(A <int> .Ignored, A <int> .Ignored)).Returns("http://boomkat.com/genres/133/summary/page/1");
            var boomkatConfigurationFake = A.Fake <IBoomkatConfiguration>();

            A.CallTo(() => boomkatConfigurationFake.SiteUrl).Returns("http://boomkat.com");

            var feedItemService = new FeedItemService(
                new FeedItemHtmlParser(boomkatConfigurationFake),
                new HtmlWebFactory(A.Fake <IHtmlWebConfiguration>()),
                urlBuilderFake,
                A.Fake <ILogFactory>());

            var feedItemsResult = feedItemService.GetFeedItemsByGenre(133, 1);

            Assert.That(feedItemsResult, Is.Not.Null);
            Assert.That(feedItemsResult.Items, Is.Not.Empty);
            Assert.That(feedItemsResult.Items[0].Artist, Is.Not.Empty);
            Assert.That(feedItemsResult.Items[0].Album, Is.Not.Empty);
            Assert.That(feedItemsResult.Items[0].Url, Is.Not.Empty);
            Assert.That(feedItemsResult.Pages, Is.Not.Empty);
        }
Пример #15
0
        public void GetFeedItems_FeedItemHtmlParserParseReturnsFeedItems_ReturnsFeedItemsResultWithDistinctFeedItems()
        {
            var feedItemHtmlParserFake = A.Fake <IFeedItemHtmlParser>();
            var pages = (IList <string>)null;

            A.CallTo(() => feedItemHtmlParserFake.Parse(A <IHtmlDocument> .Ignored, out pages)).Returns(new List <IFeedItem> {
                new FeedItem {
                    Album = "abc", Artist = "def", Url = "ghi"
                }, new FeedItem {
                    Album = "abc", Artist = "def", Url = "ghi"
                }
            });

            var feedItemService = new FeedItemService(
                feedItemHtmlParserFake,
                A.Fake <IHtmlWebFactory>(),
                A.Fake <IUrlBuilder>(),
                A.Fake <ILogFactory>());

            var feedItemsResult = feedItemService.GetFeedItems(1);

            Assert.That(feedItemsResult, Is.Not.Null);
            Assert.That(feedItemsResult.Items.Count, Is.EqualTo(1));
        }