private void Populate(Raw_AniDB_Anime animeInfo) { this.AirDate = animeInfo.AirDate; this.AllCinemaID = animeInfo.AllCinemaID; this.AnimeID = animeInfo.AnimeID; //this.AnimeNfo = animeInfo.AnimeNfoID; this.AnimePlanetID = animeInfo.AnimePlanetID; this.AnimeTypeRAW = animeInfo.AnimeTypeRAW; this.ANNID = animeInfo.ANNID; this.AvgReviewRating = animeInfo.AvgReviewRating; this.AwardList = animeInfo.AwardList; this.BeginYear = animeInfo.BeginYear; this.DateTimeDescUpdated = DateTime.Now; this.DateTimeUpdated = DateTime.Now; this.Description = animeInfo.Description; this.EndDate = animeInfo.EndDate; this.EndYear = animeInfo.EndYear; this.MainTitle = animeInfo.MainTitle; this.AllTitles = ""; this.AllCategories = ""; this.AllTags = ""; //this.EnglishName = animeInfo.EnglishName; this.EpisodeCount = animeInfo.EpisodeCount; this.EpisodeCountNormal = animeInfo.EpisodeCountNormal; this.EpisodeCountSpecial = animeInfo.EpisodeCountSpecial; //this.genre this.ImageEnabled = 1; //this.KanjiName = animeInfo.KanjiName; this.LatestEpisodeNumber = animeInfo.LatestEpisodeNumber; //this.OtherName = animeInfo.OtherName; this.Picname = animeInfo.Picname; this.Rating = animeInfo.Rating; //this.relations this.Restricted = animeInfo.Restricted; this.ReviewCount = animeInfo.ReviewCount; //this.RomajiName = animeInfo.RomajiName; //this.ShortNames = animeInfo.ShortNames.Replace("'", "|"); //this.Synonyms = animeInfo.Synonyms.Replace("'", "|"); this.TempRating = animeInfo.TempRating; this.TempVoteCount = animeInfo.TempVoteCount; this.URL = animeInfo.URL; this.VoteCount = animeInfo.VoteCount; }
public static Raw_AniDB_Anime ProcessAnimeDetails(XmlDocument docAnime, int animeID) { // most of the genral anime data will be over written by the UDP command Raw_AniDB_Anime anime = new Raw_AniDB_Anime(); anime.AnimeID = animeID; // check if there is any data try { string id = docAnime["anime"].Attributes["id"].Value; } catch (Exception ex) { //BaseConfig.MyAnimeLog.Write("Invalid xml document: {0}", animeID.ToString()); return null; } anime.Description = TryGetProperty(docAnime, "anime", "description"); anime.AnimeTypeRAW = TryGetProperty(docAnime, "anime", "type"); string episodecount = TryGetProperty(docAnime, "anime", "episodecount"); int epCount = 0; int.TryParse(episodecount, out epCount); anime.EpisodeCount = epCount; anime.EpisodeCountNormal = epCount; int convertedAirDate = Utils.GetAniDBDateAsSeconds(TryGetProperty(docAnime, "anime", "startdate"), true); int convertedEndDate = Utils.GetAniDBDateAsSeconds(TryGetProperty(docAnime, "anime", "enddate"), false); //anime.AirDate = TryGetProperty(docAnime, "anime", "startdate"); //anime.EndDate = TryGetProperty(docAnime, "anime", "enddate"); anime.AirDate = Utils.GetAniDBDateAsDate(convertedAirDate); anime.EndDate = Utils.GetAniDBDateAsDate(convertedEndDate); anime.BeginYear = anime.AirDate.HasValue ? anime.AirDate.Value.Year : 0; anime.EndYear = anime.EndDate.HasValue ? anime.EndDate.Value.Year : 0; //string enddate = TryGetProperty(docAnime, "anime", "enddate"); string restricted = docAnime["anime"].Attributes["restricted"].Value; bool res = false; bool.TryParse(restricted, out res); anime.Restricted = res ? 1 : 0; anime.URL = TryGetProperty(docAnime, "anime", "url"); anime.Picname = TryGetProperty(docAnime, "anime", "picture"); anime.DateTimeUpdated = DateTime.Now; anime.DateTimeDescUpdated = anime.DateTimeUpdated; anime.ImageEnabled = 1; #region Related Anime if (docAnime["anime"]["relatedanime"] != null) { XmlNodeList raItems = docAnime["anime"]["relatedanime"].GetElementsByTagName("anime"); if (raItems != null) { anime.RelatedAnimeIdsRAW = ""; anime.RelatedAnimeTypesRAW = ""; foreach (XmlNode node in raItems) { try { int id = int.Parse(node.Attributes["id"].Value); int relType = ConvertReltTypeTextToEnum(TryGetAttribute(node, "type")); if (anime.RelatedAnimeIdsRAW.Length > 0) anime.RelatedAnimeIdsRAW += "'"; if (anime.RelatedAnimeTypesRAW.Length > 0) anime.RelatedAnimeTypesRAW += "'"; anime.RelatedAnimeIdsRAW += id.ToString(); anime.RelatedAnimeTypesRAW += relType.ToString(); } catch (Exception ex) { //BaseConfig.MyAnimeLog.Write("Error in GetEpisodes: {0}", ex); } } } } #endregion #region Titles if (docAnime["anime"]["titles"] != null) { XmlNodeList titleItems = docAnime["anime"]["titles"].GetElementsByTagName("title"); if (titleItems != null) { foreach (XmlNode node in titleItems) { try { string titleType = node.Attributes["type"].Value.Trim().ToLower(); string languageType = node.Attributes["xml:lang"].Value.Trim().ToLower(); string titleValue = node.InnerText.Trim(); if (titleType.Trim().ToUpper() == "MAIN") { anime.MainTitle = titleValue; } } catch (Exception ex) { //BaseConfig.MyAnimeLog.Write("Error in GetEpisodes: {0}", ex); } } } } #endregion #region Ratings // init ratings anime.VoteCount = 0; anime.TempVoteCount = 0; anime.Rating = 0; anime.TempRating = 0; anime.ReviewCount = 0; anime.AvgReviewRating = 0; NumberStyles style = NumberStyles.Number; CultureInfo culture = CultureInfo.CreateSpecificCulture("en-GB"); if (docAnime["anime"]["ratings"] != null) { XmlNodeList ratingItems = docAnime["anime"]["ratings"].ChildNodes; if (ratingItems != null) { foreach (XmlNode node in ratingItems) { try { if (node.Name.Trim().ToLower() == "permanent") { int iCount = 0; int.TryParse(TryGetAttribute(node, "count"), out iCount); anime.VoteCount = iCount; decimal iRating = 0; decimal.TryParse(node.InnerText.Trim(), style, culture, out iRating); anime.Rating = (int)(iRating * 100); } if (node.Name.Trim().ToLower() == "temporary") { int iCount = 0; int.TryParse(TryGetAttribute(node, "count"), out iCount); anime.TempVoteCount = iCount; decimal iRating = 0; decimal.TryParse(node.InnerText.Trim(), style, culture, out iRating); anime.TempRating = (int)(iRating * 100); } if (node.Name.Trim().ToLower() == "review") { int iCount = 0; int.TryParse(TryGetAttribute(node, "count"), out iCount); anime.ReviewCount = iCount; decimal iRating = 0; decimal.TryParse(node.InnerText.Trim(), style, culture, out iRating); anime.AvgReviewRating = (int)(iRating * 100); } } catch (Exception ex) { //BaseConfig.MyAnimeLog.Write("Error in GetEpisodes: {0}", ex); } } } } #endregion //anime.VersionNumber = Raw_AniDB_Anime.LastVersion; //BaseConfig.MyAnimeLog.Write("Anime: {0}", anime.ToString()); return anime; //anime.Save(true, createSeriesRecord); //AniDB_Anime.UpdateDescription(anime.AnimeID, anime.Description); }
/// <summary> /// we are depending on the HTTP api call to get most of the info /// we only use UDP to get mssing information /// </summary> /// <param name="animeInfo"></param> public void PopulateAndSaveFromUDP(Raw_AniDB_Anime animeInfo) { // raw fields this.reviewIDListRAW = animeInfo.ReviewIDListRAW; // save now for FK purposes AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); repAnime.Save(this); CreateAnimeReviews(); }
public void PopulateAndSaveFromHTTP(ISession session, Raw_AniDB_Anime animeInfo, List<Raw_AniDB_Episode> eps, List<Raw_AniDB_Anime_Title> titles, List<Raw_AniDB_Category> cats, List<Raw_AniDB_Tag> tags, List<Raw_AniDB_Character> chars, List<Raw_AniDB_RelatedAnime> rels, List<Raw_AniDB_SimilarAnime> sims, List<Raw_AniDB_Recommendation> recs, bool downloadRelations) { logger.Trace("------------------------------------------------"); logger.Trace(string.Format("PopulateAndSaveFromHTTP: for {0} - {1}", animeInfo.AnimeID, animeInfo.MainTitle)); logger.Trace("------------------------------------------------"); DateTime start0 = DateTime.Now; Populate(animeInfo); // save now for FK purposes AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); repAnime.Save(session, this); DateTime start = DateTime.Now; CreateEpisodes(session, eps); TimeSpan ts = DateTime.Now - start; logger.Trace(string.Format("CreateEpisodes in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; CreateTitles(session, titles); ts = DateTime.Now - start; logger.Trace(string.Format("CreateTitles in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; CreateTags(session, tags); ts = DateTime.Now - start; logger.Trace(string.Format("CreateTags in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; CreateCharacters(session, chars); ts = DateTime.Now - start; logger.Trace(string.Format("CreateCharacters in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; CreateRelations(session, rels, downloadRelations); ts = DateTime.Now - start; logger.Trace(string.Format("CreateRelations in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; CreateSimilarAnime(session, sims); ts = DateTime.Now - start; logger.Trace(string.Format("CreateSimilarAnime in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; CreateRecommendations(session, recs); ts = DateTime.Now - start; logger.Trace(string.Format("CreateRecommendations in : {0}", ts.TotalMilliseconds)); start = DateTime.Now; repAnime.Save(this); ts = DateTime.Now - start0; logger.Trace(string.Format("TOTAL TIME in : {0}", ts.TotalMilliseconds)); logger.Trace("------------------------------------------------"); }
public static Raw_AniDB_Anime ProcessAnimeDetails(XmlDocument docAnime, int animeID) { // most of the genral anime data will be over written by the UDP command Raw_AniDB_Anime anime = new Raw_AniDB_Anime { AnimeID = animeID }; // check if there is any data if (docAnime?["anime"]?.Attributes["id"]?.Value == null) { logger.Warn("AniDB ProcessAnimeDetails - Received no or invalid info in XML"); return(null); } anime.Description = TryGetProperty(docAnime, "anime", "description")?.Replace('`', '\''); anime.AnimeTypeRAW = TryGetProperty(docAnime, "anime", "type"); string episodecount = TryGetProperty(docAnime, "anime", "episodecount"); int.TryParse(episodecount, out int epCount); anime.EpisodeCount = epCount; anime.EpisodeCountNormal = epCount; string dateString = TryGetProperty(docAnime, "anime", "startdate"); anime.AirDate = null; if (!string.IsNullOrEmpty(dateString)) { if (DateTime.TryParseExact(dateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime date)) { anime.AirDate = date; } else if (DateTime.TryParseExact(dateString, "yyyy-MM", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime date2)) { anime.AirDate = date2; } } dateString = TryGetProperty(docAnime, "anime", "enddate"); anime.EndDate = null; if (!string.IsNullOrEmpty(dateString)) { if (DateTime.TryParseExact(dateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime date)) { anime.EndDate = date; } } anime.BeginYear = anime.AirDate?.Year ?? 0; anime.EndYear = anime.EndDate?.Year ?? 0; //string enddate = TryGetProperty(docAnime, "anime", "enddate"); string restricted = docAnime["anime"].Attributes["restricted"]?.Value; if (bool.TryParse(restricted, out bool res)) { anime.Restricted = res ? 1 : 0; } else { anime.Restricted = 0; } anime.URL = TryGetProperty(docAnime, "anime", "url"); anime.Picname = TryGetProperty(docAnime, "anime", "picture"); anime.DateTimeUpdated = DateTime.Now; anime.DateTimeDescUpdated = anime.DateTimeUpdated; anime.ImageEnabled = 1; #region Related Anime XmlNodeList raItems = docAnime["anime"]["relatedanime"]?.GetElementsByTagName("anime"); if (raItems != null) { anime.RelatedAnimeIdsRAW = string.Empty; anime.RelatedAnimeTypesRAW = string.Empty; foreach (XmlNode node in raItems) { if (node?.Attributes?["id"]?.Value == null) { continue; } if (!int.TryParse(node.Attributes["id"].Value, out int id)) { continue; } int relType = ConvertReltTypeTextToEnum(TryGetAttribute(node, "type")); if (anime.RelatedAnimeIdsRAW.Length > 0) { anime.RelatedAnimeIdsRAW += "'"; } if (anime.RelatedAnimeTypesRAW.Length > 0) { anime.RelatedAnimeTypesRAW += "'"; } anime.RelatedAnimeIdsRAW += id.ToString(); anime.RelatedAnimeTypesRAW += relType.ToString(); } } #endregion #region Titles XmlNodeList titleItems = docAnime["anime"]["titles"]?.GetElementsByTagName("title"); if (titleItems != null) { foreach (XmlNode node in titleItems) { string titleType = node?.Attributes?["type"]?.Value?.Trim().ToLower(); if (string.IsNullOrEmpty(titleType)) { continue; } string languageType = node.Attributes["xml:lang"]?.Value?.Trim().ToLower(); if (string.IsNullOrEmpty(languageType)) { continue; } string titleValue = node.InnerText.Trim(); if (string.IsNullOrEmpty(titleValue)) { continue; } if (titleType.Trim().ToUpper().Equals("MAIN")) { anime.MainTitle = titleValue.Replace('`', '\''); } } } #endregion #region Ratings // init ratings anime.VoteCount = 0; anime.TempVoteCount = 0; anime.Rating = 0; anime.TempRating = 0; anime.ReviewCount = 0; anime.AvgReviewRating = 0; NumberStyles style = NumberStyles.Number; CultureInfo culture = CultureInfo.CreateSpecificCulture("en-GB"); XmlNodeList ratingItems = docAnime["anime"]["ratings"]?.ChildNodes; if (ratingItems == null) { return(anime); } foreach (XmlNode node in ratingItems) { string name = node?.Name?.Trim().ToLower(); if (string.IsNullOrEmpty(name)) { continue; } if (!int.TryParse(TryGetAttribute(node, "count"), out int iCount)) { continue; } if (!decimal.TryParse(node.InnerText.Trim(), style, culture, out decimal iRating)) { continue; } iRating = (int)Math.Round(iRating * 100); if (name.Equals("permanent")) { anime.VoteCount = iCount; anime.Rating = (int)iRating; } else if (name.Equals("temporary")) { anime.TempVoteCount = iCount; anime.TempRating = (int)iRating; } else if (name.Equals("review")) { anime.ReviewCount = iCount; anime.AvgReviewRating = (int)iRating; } } #endregion return(anime); }
public static Raw_AniDB_Anime ProcessAnimeDetails(XmlDocument docAnime, int animeID) { // most of the genral anime data will be over written by the UDP command Raw_AniDB_Anime anime = new Raw_AniDB_Anime { AnimeID = animeID }; // check if there is any data try { string id = docAnime["anime"].Attributes["id"].Value; } catch { //BaseConfig.MyAnimeLog.Write("Invalid xml document: {0}", animeID.ToString()); return(null); } anime.Description = TryGetProperty(docAnime, "anime", "description"); anime.AnimeTypeRAW = TryGetProperty(docAnime, "anime", "type"); string episodecount = TryGetProperty(docAnime, "anime", "episodecount"); int.TryParse(episodecount, out int epCount); anime.EpisodeCount = epCount; anime.EpisodeCountNormal = epCount; int convertedAirDate = AniDB.GetAniDBDateAsSeconds(TryGetProperty(docAnime, "anime", "startdate"), true); int convertedEndDate = AniDB.GetAniDBDateAsSeconds(TryGetProperty(docAnime, "anime", "enddate"), false); //anime.AirDate = TryGetProperty(docAnime, "anime", "startdate"); //anime.EndDate = TryGetProperty(docAnime, "anime", "enddate"); anime.AirDate = AniDB.GetAniDBDateAsDate(convertedAirDate); anime.EndDate = AniDB.GetAniDBDateAsDate(convertedEndDate); anime.BeginYear = anime.AirDate.HasValue ? anime.AirDate.Value.Year : 0; anime.EndYear = anime.EndDate.HasValue ? anime.EndDate.Value.Year : 0; //string enddate = TryGetProperty(docAnime, "anime", "enddate"); string restricted = docAnime["anime"].Attributes["restricted"].Value; bool.TryParse(restricted, out bool res); anime.Restricted = res ? 1 : 0; anime.URL = TryGetProperty(docAnime, "anime", "url"); anime.Picname = TryGetProperty(docAnime, "anime", "picture"); anime.DateTimeUpdated = DateTime.Now; anime.DateTimeDescUpdated = anime.DateTimeUpdated; anime.ImageEnabled = 1; #region Related Anime if (docAnime["anime"]["relatedanime"] != null) { XmlNodeList raItems = docAnime["anime"]["relatedanime"].GetElementsByTagName("anime"); if (raItems != null) { anime.RelatedAnimeIdsRAW = ""; anime.RelatedAnimeTypesRAW = ""; foreach (XmlNode node in raItems) { try { int id = int.Parse(node.Attributes["id"].Value); int relType = ConvertReltTypeTextToEnum(TryGetAttribute(node, "type")); if (anime.RelatedAnimeIdsRAW.Length > 0) { anime.RelatedAnimeIdsRAW += "'"; } if (anime.RelatedAnimeTypesRAW.Length > 0) { anime.RelatedAnimeTypesRAW += "'"; } anime.RelatedAnimeIdsRAW += id.ToString(); anime.RelatedAnimeTypesRAW += relType.ToString(); } catch { //BaseConfig.MyAnimeLog.Write("Error in GetEpisodes: {0}", ex); } } } } #endregion #region Titles if (docAnime["anime"]["titles"] != null) { XmlNodeList titleItems = docAnime["anime"]["titles"].GetElementsByTagName("title"); if (titleItems != null) { foreach (XmlNode node in titleItems) { try { string titleType = node.Attributes["type"].Value.Trim().ToLower(); string languageType = node.Attributes["xml:lang"].Value.Trim().ToLower(); string titleValue = node.InnerText.Trim(); if (titleType.Trim().ToUpper() == "MAIN") { anime.MainTitle = titleValue; } } catch { //BaseConfig.MyAnimeLog.Write("Error in GetEpisodes: {0}", ex); } } } } #endregion #region Ratings // init ratings anime.VoteCount = 0; anime.TempVoteCount = 0; anime.Rating = 0; anime.TempRating = 0; anime.ReviewCount = 0; anime.AvgReviewRating = 0; NumberStyles style = NumberStyles.Number; CultureInfo culture = CultureInfo.CreateSpecificCulture("en-GB"); if (docAnime["anime"]["ratings"] != null) { XmlNodeList ratingItems = docAnime["anime"]["ratings"].ChildNodes; if (ratingItems != null) { foreach (XmlNode node in ratingItems) { try { if (node.Name.Trim().ToLower() == "permanent") { int.TryParse(TryGetAttribute(node, "count"), out int iCount); anime.VoteCount = iCount; decimal.TryParse(node.InnerText.Trim(), style, culture, out decimal iRating); anime.Rating = (int)(iRating * 100); } if (node.Name.Trim().ToLower() == "temporary") { int.TryParse(TryGetAttribute(node, "count"), out int iCount); anime.TempVoteCount = iCount; decimal.TryParse(node.InnerText.Trim(), style, culture, out decimal iRating); anime.TempRating = (int)(iRating * 100); } if (node.Name.Trim().ToLower() == "review") { int.TryParse(TryGetAttribute(node, "count"), out int iCount); anime.ReviewCount = iCount; decimal.TryParse(node.InnerText.Trim(), style, culture, out decimal iRating); anime.AvgReviewRating = (int)(iRating * 100); } } catch { //BaseConfig.MyAnimeLog.Write("Error in GetEpisodes: {0}", ex); } } } } #endregion //anime.VersionNumber = Raw_AniDB_Anime.LastVersion; //BaseConfig.MyAnimeLog.Write("Anime: {0}", anime.ToString()); return(anime); //anime.Save(true, createSeriesRecord); //AniDB_Anime.UpdateDescription(anime.AnimeID, anime.Description); }
public void PopulateAndSaveFromHTTP(ISession session, Raw_AniDB_Anime animeInfo, List<Raw_AniDB_Episode> eps, List<Raw_AniDB_Anime_Title> titles, List<Raw_AniDB_Category> cats, List<Raw_AniDB_Tag> tags, List<Raw_AniDB_Character> chars, List<Raw_AniDB_RelatedAnime> rels, List<Raw_AniDB_SimilarAnime> sims, List<Raw_AniDB_Recommendation> recs, bool downloadRelations) { logger.Trace("------------------------------------------------"); logger.Trace(String.Format("PopulateAndSaveFromHTTP: for {0} - {1}", animeInfo.AnimeID, animeInfo.MainTitle)); logger.Trace("------------------------------------------------"); Stopwatch taskTimer = new Stopwatch(); Stopwatch totalTimer = Stopwatch.StartNew(); Populate(animeInfo); // save now for FK purposes RepoFactory.AniDB_Anime.Save(this); taskTimer.Start(); CreateEpisodes(eps); taskTimer.Stop(); logger.Trace("CreateEpisodes in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); CreateTitles(titles); taskTimer.Stop(); logger.Trace("CreateTitles in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); CreateTags(tags); taskTimer.Stop(); logger.Trace("CreateTags in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); CreateCharacters(session, chars); taskTimer.Stop(); logger.Trace("CreateCharacters in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); CreateRelations(session, rels, downloadRelations); taskTimer.Stop(); logger.Trace("CreateRelations in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); CreateSimilarAnime(session, sims); taskTimer.Stop(); logger.Trace("CreateSimilarAnime in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); CreateRecommendations(session, recs); taskTimer.Stop(); logger.Trace("CreateRecommendations in : " + taskTimer.ElapsedMilliseconds); taskTimer.Restart(); RepoFactory.AniDB_Anime.Save(this); totalTimer.Stop(); logger.Trace("TOTAL TIME in : " + totalTimer.ElapsedMilliseconds); logger.Trace("------------------------------------------------"); }