Beispiel #1
0
        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
            }))));
        }