/// <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; }
/// <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]); } }
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); } }
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; }
/// <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); } }
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); } }
/// <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); } }
/// <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); } }
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); } } }
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); }
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)); }