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 } }
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); }
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(); }
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}"); } }