/// <summary> /// Iterate html main rows to get main fields. /// </summary> /// <param name="htmlDocument">.</param> /// <param name="pageSize">.</param> /// <returns>.</returns> private IList <HackerNewsItem> ReadMainFields(HtmlDocument htmlDocument, int pageSize) { IList <HackerNewsItem> hackerNewsItem; // Use the full path for html well formed string xpath = $"/html/body/center/table[@id=\"hnmain\"]/tbody/tr/td/table/tbody/tr[@id][position()>0 and position()<={pageSize}]"; HtmlNodeCollection htmlNodeList = htmlDocument.DocumentNode.SelectNodes(xpath); hackerNewsItem = new List <HackerNewsItem>(htmlNodeList.Count); foreach (HtmlNode htmlNode in htmlNodeList) { // Remove extra children while (htmlNode.ChildNodes.FirstOrDefault(x => x.Name.Equals("#text")) != null) { htmlNode.ChildNodes.Remove(htmlNode.ChildNodes.FirstOrDefault(x => x.Name.Equals("#text"))); } HackerNewsItem newHackerNewsItem = new HackerNewsItem(); // Id is inside element as "Id" over table row tag newHackerNewsItem.Id = StringConverter.GetInt32(htmlNode.Attributes["id"].Value); // Rank order ends with "." like "1." newHackerNewsItem.RankOrder = StringConverter.GetInt32(htmlNode.ChildNodes.FirstOrDefault().InnerText.Replace(".", "")); // Title is inside a link tag newHackerNewsItem.Title = htmlNode.ChildNodes.LastOrDefault().InnerText; hackerNewsItem.Add(newHackerNewsItem); } return(hackerNewsItem); }
async Task processPost(MainPage mainPage, int i) { HackerNewsItem item = await getDetail(mainPage, i); ListViewItems.Add(item.title); HackerNewsItems.Add(item); }
/// <summary> /// Iterate html main rows to get main fields. /// </summary> /// <param name="xmlDocument">.</param> /// <param name="pageSize">.</param> /// <returns>.</returns> private IList <HackerNewsItem> ReadMainFields(XmlDocument xmlDocument, int pageSize) { IList <HackerNewsItem> hackerNewsItem; // Use the full path for html well formed string xpath = $"//table/tr[@id][position()>0 and position()<={pageSize}]"; XmlNodeList xmlNodeList = xmlDocument.SelectNodes(xpath); hackerNewsItem = new List <HackerNewsItem>(xmlNodeList.Count); foreach (XmlNode xmlNode in xmlNodeList) { HackerNewsItem newHackerNewsItem = new HackerNewsItem(); // Id is inside element as "Id" over table row tag newHackerNewsItem.Id = StringConverter.GetInt32(xmlNode.Attributes["id"].Value); // Rank order ends with "." like "1." newHackerNewsItem.RankOrder = StringConverter.GetInt32(xmlNode.ChildNodes[0].ChildNodes[0].InnerText.Replace(".", "")); // Title is inside a link tag newHackerNewsItem.Title = xmlNode.ChildNodes[2].ChildNodes[0].InnerText; hackerNewsItem.Add(newHackerNewsItem); } return(hackerNewsItem); }
public void CanAskForInvalidItem() { HackerNewsApi client = new HackerNewsApi(); HackerNewsItem item = client.NewsItem(int.MaxValue).Result; Assert.IsTrue(item == null); }
public async Task <List <Domain.HackerNewsItemDomain> > GetHackerNewsItemDetailsV2(List <int> Ids) { List <Domain.HackerNewsItemDomain> itemList = new List <Domain.HackerNewsItemDomain>(); foreach (var x in Ids) { var dItem = await _context.HackerNewsItem.FindAsync(x); if (dItem == null) { HackerNewsItem item = await GetHackerNewsItemDetails(x); var newItem = _mapper.Map <HackerNewsItemDomain>(item); await _context.HackerNewsItem.AddAsync(newItem); itemList.Add(newItem); } else { itemList.Add(dItem); } } await _context.SaveChangesAsync(); return(itemList); }
public void CanGetStory() { HackerNewsApi client = new HackerNewsApi(); HackerNewsItem storyItem = client.NewsItem(GOOD_STORY_ID).Result; Assert.IsNotNull(storyItem); }
async Task <HackerNewsItem> getComment(DetailPage detailPage, int i) { Debug.WriteLine("in getComment at thestart"); HackerNewsItem item = await MainPage.getDetail(detailPage, i); this.comments.Add(item); Debug.WriteLine("in getComment at theend"); Debug.WriteLine("added comment with text " + item.text); return(item); }
public GetHackerNewsItemAsyncTests() { _id = 1; _hackerNewsItem = MockHackerNewsContractFactory.CreateMockHackerNewsItem(); _apiAccessHelper = new Mock <IApiAccessHelper>(MockBehavior.Strict); _apiAccessHelper.Setup(x => x.GetApiAsync <HackerNewsItem>(string.Format(ExternalApiUrls.HackerNewsItemUrl, _id)) ).ReturnsAsync(_hackerNewsItem); _repository = new HackerNewsRepository(_apiAccessHelper.Object); }
public DetailPage(HackerNewsItem item) { this.Title = item.title; this.BindingContext = item; this.item = item; this.comments = new ObservableCollection <HackerNewsItem>(); comments.Add(new HackerNewsItem { text = "ay" }); InitializeComponent(); commentsView.ItemsSource = this.comments; doAsyncWork(); }
public GetLatestHackerNewsAsyncTests() { _hackerNewsItem = MockHackerNewsContractFactory.CreateMockHackerNewsItem(); _hackerNewsRepository = new Mock <IHackerNewsRepository>(MockBehavior.Strict); SetupMockRepository(new List <int>() { _hackerNewsItem.Id }, _hackerNewsItem); _page = 0; _pageSize = 10; _titleSearchQuery = null; _businessLayer = new HackerNewsBusinessLayer(_hackerNewsRepository.Object); }
public HackerNewsItemViewModel Map(HackerNewsItem item) { var author = this.usersService.GetUserById(item.By); return(new HackerNewsItemViewModel { Score = item.Score, By = author != null?Map(author) : new HackerNewsUserViewModel { Id = "anonymous user", Karma = -1 }, Title = item.Title, Text = item.Text, Url = item.Url }); }
async void PostClicked(object sender, SelectedItemChangedEventArgs e) { if (e.SelectedItem != null) { string name = e.SelectedItem.ToString(); int index = ListViewItems.IndexOf(name); if (index >= -1) { //Debug.WriteLine("index is "+index+", name is "+name); HackerNewsItem item = HackerNewsItems[index]; await Navigation.PushAsync(new DetailPage(item)); } else { Debug.WriteLine("index is -1"); } } }
public async Task <HackerNewsItem> GetItem(int Id) { try { var response = await Client.GetAsync("item/" + Id + ".json"); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); HackerNewsItem itemList = JsonSerializer.Deserialize <HackerNewsItem>(json); return(itemList); } catch (Exception ex) { throw ex; } }
public void GetItemById_success() { const int itemId = 42; var item = this.itemsService.GetItemById(itemId); var expectedItem = new HackerNewsItem { Id = 42, Type = "story", Title = "An alternative to VC: "Selling In"", By = "sergei", Url = "http://www.venturebeat.com/contributors/2006/10/10/an-alternative-to-vc-selling-in/" }; Assert.NotNull(item); Assert.Equal(item.Url, expectedItem.Url); Assert.Equal(item.By, expectedItem.By); }
public static async Task <HackerNewsItem> getDetail(ContentPage instance, int itemId) { string detailUrl = "https://hacker-news.firebaseio.com/v0/item/" + itemId + ".json"; Task <string> getDetailTask = client.GetStringAsync(detailUrl); try { string urlContents = await getDetailTask; HackerNewsItem item = JsonConvert.DeserializeObject <HackerNewsItem>(urlContents); return(item); } #pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body catch (Exception e) #pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body { Debug.WriteLine(e.GetBaseException().ToString()); return(new HackerNewsItem { text = "none" }); } }
private void SetupMockRepository(List <int> newsStoryIds, HackerNewsItem newsItem) { _hackerNewsRepository.Setup(x => x.GetLatestHackerNewsStoryIdsAsync()).ReturnsAsync(newsStoryIds); _hackerNewsRepository.Setup(x => x.GetHackerNewsItemAsync(_hackerNewsItem.Id)).ReturnsAsync(newsItem); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { HackerNewsItem item = (HackerNewsItem)value; return(item.score + " points by " + item.by + " | " + item.descendants + " comments"); }
public async Task <Models.HackerNewsItem> GetHackerNewsItemDetails(int Id) { HackerNewsItem item = await _client.GetItem(Id); return(item); }