public async Task <IActionResult> ImportFromMalV2(string username) { var resultsLength = 0; var offset = 0; var shows = new List <RankedShow>(); var showNameSet = new HashSet <string>(); do { using (var request = new HttpRequestMessage(HttpMethod.Get, $"https://myanimelist.net/animelist/{username}/load.json?offset={offset}status=2")) using (var httpClient = _httpClientFactory.CreateClient()) using (var response = await httpClient.SendAsync(request).ConfigureAwait(false)) { var usersMalAnimeListPageJson = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var parsedJson = JArray.Parse(usersMalAnimeListPageJson); foreach (var showJson in parsedJson) { var showTitle = showJson.SelectToken("anime_title").Value <string>(); var showRank = showJson.SelectToken("score").Value <int>(); var watchingStatus = showJson.SelectToken("status").Value <int>(); if (watchingStatus == 2 || showRank != 0) { shows.Add(new RankedShow { Name = showTitle, Rank = showRank }); showNameSet.Add(showTitle); } } resultsLength = parsedJson.Count; } offset += 300; }while (resultsLength > 0); var showsThatExistInDb = _repository.FilterSetToShowNamesThatExist(showNameSet); return(Ok(new RankedShowList(shows .Where(show => showsThatExistInDb.Contains(show.Name)) .OrderByDescending(show => show.Rank) .Select((show, index) => new RankedShow { Name = show.Name, Rank = index + 1 })))); }