示例#1
0
        private async Task <bool> InsertCharacter(VoiceActingRole voiceActingRole)
        {
            var existingCharacter = await characterRepository.GetAsync(voiceActingRole.Character.MalId);

            if (existingCharacter == null)
            {
                try
                {
                    JikanDotNet.Character characterFullData = await SendSingleCharacterRequest(voiceActingRole.Character.MalId, 0);

                    string nicknames = string.Empty;

                    if (characterFullData != null)
                    {
                        logger.Log($"Parsed id:{characterFullData.MalId}");

                        if (characterFullData.Nicknames.Any())
                        {
                            nicknames = string.Join(';', characterFullData.Nicknames.ToArray());
                        }

                        characterRepository.Add(
                            new Data.Model.Character
                        {
                            MalId      = characterFullData.MalId,
                            ImageUrl   = EmptyStringIfPlaceholder(characterFullData.ImageURL),
                            Name       = characterFullData.Name,
                            Popularity = characterFullData.MemberFavorites,
                            About      = characterFullData.About,
                            NameKanji  = characterFullData.NameKanji,
                            Nicknames  = nicknames
                        }
                            );
                        await characterRepository.CommitAsync();

                        return(true);
                    }
                    return(false);
                }
                catch (Exception ex)
                {
                    logger.Log($"Error during inserting character {voiceActingRole.Anime.Name} with id {voiceActingRole.Anime.MalId}: {ex.Message}");
                    return(false);
                }
            }
            else
            {
                return(true);                //already inserted
            }
        }
示例#2
0
        private async Task <JikanDotNet.Character> SendSingleCharacterRequest(long malId, short retryCount)
        {
            JikanDotNet.Character character = null;
            await Task.Delay(3000 + retryCount * 10000);

            try
            {
                character = await jikan.GetCharacter(malId);
            }
            catch (Exception ex)
            {
                if (retryCount < 10)
                {
                    if (ex.InnerException is JikanRequestException && (ex.InnerException as JikanRequestException).ResponseCode == System.Net.HttpStatusCode.TooManyRequests)
                    {
                        retryCount++;
                        return(await SendSingleCharacterRequest(malId, retryCount));
                    }
                    else
                    {
                        if (ex.InnerException is JikanRequestException)
                        {
                            System.Net.HttpStatusCode responseCode = (ex.InnerException as JikanRequestException).ResponseCode;

                            switch (responseCode)
                            {
                            case (System.Net.HttpStatusCode.NotFound):
                                BlacklistId(malId, "Character", "404 Not Found");
                                break;

                            case (System.Net.HttpStatusCode.InternalServerError):
                                BlacklistId(malId, "Character", "Not exist");
                                break;

                            case (System.Net.HttpStatusCode.TooManyRequests):
                                BlacklistId(malId, "Character", "429 Too much request");
                                break;

                            default:
                                BlacklistId(malId, "Character", "Other");
                                break;
                            }
                        }
                    }
                }
            }

            return(character);
        }
示例#3
0
        private async Task UpdateCharacter(Data.Model.Character character, JikanDotNet.Character characterParsedData)
        {
            character.Name       = characterParsedData.Name;
            character.About      = characterParsedData.About;
            character.ImageUrl   = characterParsedData.ImageURL;
            character.NameKanji  = characterParsedData.NameKanji;
            character.Popularity = characterParsedData.MemberFavorites;

            character.ImageUrl = EmptyStringIfPlaceholder(characterParsedData.ImageURL);

            if (characterParsedData.Nicknames.Any())
            {
                character.Nicknames = string.Join(';', characterParsedData.Nicknames.ToArray());
            }

            characterRepository.Update(character);

            await characterRepository.CommitAsync();
        }
示例#4
0
        public async Task UpdateAllCharacters()
        {
            try
            {
                logger.Log("Started UpdateAllCharacters job.");

                int  page                = 0;
                int  pageSize            = 100;
                long totalCharacterCount = await characterRepository.CountAsync(x => true);

                while (page * pageSize < totalCharacterCount)
                {
                    var characterCollection = await characterRepository.GetOrderedPageAsync(PredicateBuilder.True <Data.Model.Character>(), "MalId ASC", page, pageSize);

                    foreach (Data.Model.Character character in characterCollection.Results)
                    {
                        JikanDotNet.Character characterFullData = await SendSingleCharacterRequest(character.MalId, 0);

                        if (characterFullData != null)
                        {
                            logger.Log($"Parsed character with id {character.MalId}: {character.Name}");

                            await UpdateCharacter(character, characterFullData);
                        }
                        else
                        {
                            logger.Log($"Error on {character.MalId} - not found");
                            continue;
                        }
                    }

                    page++;
                }
                logger.Log("Finished UpdateAllCharacters job.");
            }
            catch (Exception ex)
            {
                logger.Log($"Exception: {ex.Message}");
            }
        }