using System.Collections.Generic;
using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
static readonly HttpClient httpClient = new HttpClient();
static readonly string baseUrl = "https://jsonmock.hackerrank.com/api/articles?page=";
public static async Task Main()
var articles = await GetFilteredArticles(limit);
string jsonString = JsonSerializer.Serialize(articles);
Console.WriteLine("Filtered Articles");
Console.WriteLine(articles.Count());
Console.WriteLine(jsonString);
public static async Task<string[]> GetFilteredArticles(int limit)
var articles = await GetAllArticles();
var filteredArticles = articles.Where(a => a.NumComments != null && a.ArticleName != null).Take(limit);
var hasTiedComments = filteredArticles.GroupBy(a => a.NumComments).Any(g => g.Count() > 1);
return filteredArticles.OrderByDescending(a => a.NumComments).ThenByDescending(a => a.ArticleName).Select(a => a.ArticleName).ToArray();
return filteredArticles.OrderByDescending(a => a.NumComments).Select(a => a.ArticleName).ToArray();
private static async Task<List<Article>> GetAllArticles()
List<Article> articles = new List<Article>();
while (pageNumber <= totalPages)
var page = await httpClient.GetFromJsonAsync<Page>(baseUrl + pageNumber)
?? throw new Exception("Oops... Something went wrong");
articles.AddRange(page.Data);
totalPages = page.TotalPages;
var articleNames = articles.Select(a => a.ArticleName).ToArray();
string jsonString = JsonSerializer.Serialize(articles);
Console.WriteLine("All Articles");
Console.WriteLine(articles.Count());
Console.WriteLine(JsonSerializer.Serialize(articleNames));
[JsonPropertyName("total_pages")]
public int TotalPages { get; set; }
public List<Article> Data { get; set; }
public string Title { get; set; }
public string StoryTitle { get; set; }
public string ArticleName {
get { return Title != null ? Title : StoryTitle; }
[JsonPropertyName("num_comments")]
public int? NumComments { get; set; }