Beispiel #1
0
        private static void ParseKinogoMovie(ref HttpClient client, string href)
        {
            try
            {
                var document  = client.GetDocument(href, "Windows-1251");
                var movieName = document.QuerySelector("h1").TextContent.Split('(')[0].Trim();
                var nodes     = document.QuerySelector(".fullimg div[id]").ChildNodes;
                var cred      = new Dictionary <INode, string>();

                foreach (var node in nodes)
                {
                    if (node.GetType().FullName == "AngleSharp.Dom.Comment")
                    {
                        continue;
                    }
                    else
                    if (node.GetType().FullName == "AngleSharp.Html.Dom.HtmlBoldElement")
                    {
                        cred.Add(node, "");
                    }
                    else if (!string.IsNullOrWhiteSpace(node.TextContent.Trim()))
                    {
                        if (cred.Count == 0)
                        {
                            cred.Add(node, node.TextContent.Trim());
                        }
                        else
                        {
                            cred[cred.Last().Key] += node.TextContent.Trim();
                        }
                    }
                }

                #region User

                var user = new User()
                {
                    Id       = Guid.NewGuid(),
                    Language = Language.Ru,
                    UserName = "******",
                    Login    = "******",
                    Password = "******"
                };
                DbTasks.AddUsersIntoDb(ref user);

                #endregion

                #region Movie&Description

                var rate = document.QuerySelector("ul[itemprop='rating'] li.current-rating").GetStyle("width");
                var date = DateTime.TryParseExact(cred.FirstOrDefault(x => x.Key.TextContent?.IndexOf("Премьера", StringComparison.Ordinal) > -1).Value, "dd MMMM yyyy", CultureInfo.GetCultureInfo("RU-ru"), DateTimeStyles.AssumeLocal, out var ini);

                var movie = new Movie()
                {
                    Id           = Guid.NewGuid(),
                    OriginalName = movieName,
                    Country      = cred.FirstOrDefault(x => x.Key.TextContent == "Страна:").Value?.Trim() ?? "",
                    Date         = date ? ini : DateTime.Now,
                    Duration     = TimeSpan.Parse(cred.FirstOrDefault(x => x.Key.TextContent == "Продолжительность:").Value?.Trim().Trim('~').Trim() ?? "0"),
                };
                movie.Rates = new List <Rate>()
                {
                    new Rate()
                    {
                        Value = Convert.ToDecimal(new Regex("[a-zA-Z]+").Replace(rate, ""),
                                                  CultureInfo.InvariantCulture) / 20.0M,
                        Id       = Guid.NewGuid(),
                        MovieId  = movie.Id,
                        UserId   = user.Id,
                        RateType = RateType.Kinogo
                    }
                };

                DbTasks.AddMovieAndDescriptionIntoDb(ref movie, ref Movies, new Description()
                {
                    Id              = Guid.NewGuid(),
                    MovieId         = movie.Id,
                    Language        = Language.Ru,
                    MovieName       = movieName,
                    UserId          = user.Id,
                    DescriptionText = cred.First().Value.Trim()
                });

                #endregion

                #region Actors

                DbTasks.AddPersonsIntoDb(cred.FirstOrDefault(x => x.Key.TextContent == "В ролях:").Value?.Split(','),
                                         movie.Id, JobType.Actor);

                #endregion

                #region Scenarists

                //DbTasks.AddPersonsIntoDb(
                //    cred.FirstOrDefault(x => x.Key.TextContent == "Сценарий:").Value?.Split(','), movie.Id, JobType.Scenarist);

                #endregion

                #region Directors

                DbTasks.AddPersonsIntoDb(cred.FirstOrDefault(x => x.Key.TextContent == "Режиссер:").Value?.Split(','),
                                         movie.Id, JobType.Director);

                #endregion

                #region Tags

                DbTasks.AddTagsIntoDb(cred.FirstOrDefault(x => x.Key.TextContent == "Жанр:").Value?.Split(','), Language.Ru, movie.Id);

                #endregion

                #region Pictures
                var    items = new List <Item>();
                string videoHref;
                var    pictureHrefs = document.QuerySelectorAll(".screens a").Select(x => x.GetAttribute("href"));
                var    pictures     = pictureHrefs.Select((pictureHref, index) => new Picture()
                {
                    Id         = Guid.NewGuid(),
                    MovieId    = movie.Id,
                    Name       = pictureHref.Split("/").Last(),
                    Href       = pictureHref,
                    Sort       = index,
                    SourceType = SourceType.Kinogo,
                    Type       = PictureType.Preview
                }).ToList();


                var bannerHref = document.QuerySelector($"#news-id-{href.Split("-").First().Split("/").Last()} a").GetAttribute("href");
                var banner     = new Picture()
                {
                    Id         = Guid.NewGuid(),
                    MovieId    = movie.Id,
                    Name       = bannerHref.Split("/").Last(),
                    Href       = bannerHref,
                    Sort       = 1,
                    SourceType = SourceType.Kinogo,
                    Type       = PictureType.Banner
                };

                pictures.Add(banner);

                var boxes  = document.QuerySelectorAll(".box");
                var script = boxes.First()?.Children?.First()?.InnerHtml ?? "";
                if (!string.IsNullOrWhiteSpace(script))
                {
                    if (script.Length < 30)
                    {
                        //sdafsdf
                    }
                    var text    = script.Substring(30, script.Length - 4 - 30);
                    var encoded = Encoding.UTF8.GetString(Convert.FromBase64String(text));

                    var poster = encoded.InnerString("poster=", "\"");
                    if (!string.IsNullOrWhiteSpace(poster))
                    {
                        pictures.Add(new Picture()
                        {
                            Id         = Guid.NewGuid(),
                            MovieId    = movie.Id,
                            Name       = poster.Split("/").Last(),
                            Href       = poster,
                            Sort       = 1,
                            SourceType = SourceType.Kinogo,
                            Type       = PictureType.Poster
                        });
                    }

                    videoHref = encoded.InnerString("file=", "&amp;");
                    if (string.IsNullOrWhiteSpace(videoHref))
                    {
                        videoHref = encoded.InnerString("pl=", "&amp;");
                    }
                    if (!string.IsNullOrWhiteSpace(videoHref))
                    {
                        items.Add(new Item()
                        {
                            Id         = Guid.NewGuid(),
                            Value      = videoHref,
                            ItemType   = ItemType.Link,
                            MovieId    = movie.Id,
                            SourceType = SourceType.Kinogo
                        });
                    }
                }
                else
                {
                    var encoded = boxes.First()?.Children.Last().TextContent;

                    var poster = encoded.InnerString("\"poster\":\"", "\"");
                    if (!string.IsNullOrWhiteSpace(poster))
                    {
                        pictures.Add(new Picture()
                        {
                            Id         = Guid.NewGuid(),
                            MovieId    = movie.Id,
                            Name       = poster.Split("/").Last(),
                            Href       = poster,
                            Sort       = 1,
                            SourceType = SourceType.Kinogo,
                            Type       = PictureType.Poster
                        });
                    }

                    videoHref = encoded.InnerString("\"file\":\"", "\"");
                    if (!string.IsNullOrWhiteSpace(videoHref))
                    {
                        items.Add(new Item()
                        {
                            Id         = Guid.NewGuid(),
                            Value      = videoHref,
                            ItemType   = ItemType.Link,
                            MovieId    = movie.Id,
                            SourceType = SourceType.Kinogo
                        });
                    }

                    videoHref = encoded.InnerString("file:\"", "\"");
                    items.Add(new Item()
                    {
                        Id         = Guid.NewGuid(),
                        Value      = videoHref,
                        ItemType   = ItemType.Link,
                        MovieId    = movie.Id,
                        SourceType = SourceType.Kinogo
                    });
                }

                var content = boxes.Last().Children.Last().TextContent;
                videoHref = content.InnerString("file:\"", "\"");
                if (!string.IsNullOrWhiteSpace(videoHref))
                {
                    items.Add(new Item()
                    {
                        Id         = Guid.NewGuid(),
                        Value      = videoHref,
                        ItemType   = ItemType.Trailer,
                        MovieId    = movie.Id,
                        SourceType = SourceType.Kinogo
                    });
                }


                DbTasks.AddPictures(pictures);
                DbTasks.AddItems(items);

                #endregion
            }
            catch (Exception e)
            {
                // ignored
            }
        }
Beispiel #2
0
        private static void ParseMultiplexMovie(ref HttpClient client, string href)
        {
            try
            {
                var document  = client.GetDocument(href);
                var movieName = document.QuerySelector("h1").TextContent;
                var results   = document
                                .QuerySelectorAll("ul.movie_credentials li")
                                .ToDictionary(elem => elem.FirstElementChild.TextContent);

                #region User

                var user = new User()
                {
                    Id       = Guid.NewGuid(),
                    Language = Language.Ru,
                    UserName = "******",
                    Login    = "******",
                    Password = "******"
                };
                DbTasks.AddUsersIntoDb(ref user);


                #endregion

                #region Movie&Description

                var movie = new Movie()
                {
                    Id           = Guid.NewGuid(),
                    OriginalName =
                        results.FirstOrDefault(cred => cred.Key == "Оригинальное название:").Value
                        ?.LastElementChild?.TextContent.Trim() ?? movieName,
                    Country = results.FirstOrDefault(cred => cred.Key == "Производство:").Value
                              ?.LastElementChild?.TextContent.Trim() ?? "",
                    Date = DateTime.Parse(
                        results.FirstOrDefault(cred => cred.Key == "Дата выхода:").Value?.LastElementChild
                        ?.TextContent.Trim() ?? DateTime.Now.ToString("d")),
                    Duration = TimeSpan.Parse(results.FirstOrDefault(cred => cred.Key == "Длительность:").Value
                                              ?.LastElementChild?.TextContent.Trim() ?? "0"),
                };
                movie.Rates = results.Where(y => y.Key == "Рейтинг Imdb:" || y.Key == "Рейтинг Kinopoisk:").Select(cr =>
                                                                                                                   new Rate()
                {
                    Id       = Guid.NewGuid(),
                    MovieId  = movie.Id,
                    Value    = Convert.ToDecimal(cr.Value),
                    UserId   = user.Id,
                    RateType = cr.Key.Contains("Kinopoisk") ? RateType.Kinopoisk : cr.Key.Contains("Imdb") ? RateType.Imdb : RateType.Multiplex
                }
                                                                                                                   ).ToList();

                DbTasks.AddMovieAndDescriptionIntoDb(ref movie, ref Movies, new Description()
                {
                    Id              = Guid.NewGuid(),
                    MovieId         = movie.Id,
                    Language        = Language.Ru,
                    MovieName       = movieName,
                    UserId          = user.Id,
                    DescriptionText = document.QuerySelector(".movie_description").TextContent
                });

                #endregion

                #region Actors

                DbTasks.AddPersonsIntoDb(
                    results.FirstOrDefault(cred => cred.Key == "В главных ролях:").Value?.LastElementChild?.TextContent
                    .Split(','), movie.Id, JobType.Actor);

                #endregion

                #region Scenarists

                DbTasks.AddPersonsIntoDb(
                    results.FirstOrDefault(cred => cred.Key == "Сценарий:").Value?.LastElementChild?.TextContent
                    .Split(','), movie.Id, JobType.Scenarist);

                #endregion

                #region Directors

                DbTasks.AddPersonsIntoDb(
                    results.FirstOrDefault(cred => cred.Key == "Режиссер:").Value?.LastElementChild?.TextContent
                    .Split(','), movie.Id, JobType.Director);

                #endregion

                #region Tags

                DbTasks.AddTagsIntoDb(
                    results.FirstOrDefault(cred => cred.Key == "Жанр:").Value?.LastElementChild.Children
                    .Select(item => item.GetAttribute("href").Split('/').Last()), Language.En, movie.Id);

                DbTasks.AddTagsIntoDb(
                    results.FirstOrDefault(cred => cred.Key == "Жанр:").Value?.LastElementChild.Children
                    .Select(item => item.TextContent), Language.Ru, movie.Id);

                #endregion

                #region Pictures

                var pictureHref = document.QuerySelector(".poster")?.GetAttribute("src") ?? "";
                if (!string.IsNullOrWhiteSpace(pictureHref))
                {
                    pictureHref = client.BaseAddress.AbsoluteUri + pictureHref;
                }

                var picture = new Picture()
                {
                    Id         = Guid.NewGuid(),
                    MovieId    = movie.Id,
                    Name       = pictureHref.Split("/").Last(),
                    Href       = pictureHref,
                    Sort       = 1,
                    SourceType = SourceType.Multiplex,
                    Type       = PictureType.Poster
                };
                var pictureHref2 = document.QuerySelector("#mvi_poster")?.GetAttribute("value") ?? "";
                if (!string.IsNullOrWhiteSpace(pictureHref2))
                {
                    pictureHref2 = client.BaseAddress.AbsoluteUri + pictureHref2;
                }

                var picture2 = new Picture()
                {
                    Id         = Guid.NewGuid(),
                    MovieId    = movie.Id,
                    Name       = pictureHref2.Split("/").Last(),
                    Href       = pictureHref2,
                    Sort       = 1,
                    SourceType = SourceType.Multiplex,
                    Type       = PictureType.Poster
                };
                var pictureHref3 = document.QuerySelector(".movie_mask")?.GetStyle("background")?.Replace("url('", "").Replace("')", "").Trim() ?? "";
                if (!string.IsNullOrWhiteSpace(pictureHref3))
                {
                    pictureHref3 = client.BaseAddress.AbsoluteUri + pictureHref3;
                }

                var picture3 = new Picture()
                {
                    Id         = Guid.NewGuid(),
                    MovieId    = movie.Id,
                    Name       = pictureHref3.Split("/").Last(),
                    Href       = pictureHref3,
                    Sort       = 1,
                    SourceType = SourceType.Multiplex,
                    Type       = PictureType.BackGroung
                };
                DbTasks.AddPictures(new List <Picture> {
                    picture, picture2, picture3
                });

                var trailer = document.QuerySelector("#desktop_trailer")?.GetAttribute("data-fullyturl") ?? "";
                var review  = document.QuerySelector("#desktop_review")?.GetAttribute("data-fullyturl") ?? "";

                var items = new List <Item>();
                if (!string.IsNullOrWhiteSpace(trailer))
                {
                    items.Add(
                        new Item()
                    {
                        Id         = Guid.NewGuid(),
                        Value      = trailer,
                        ItemType   = ItemType.Trailer,
                        MovieId    = movie.Id,
                        SourceType = SourceType.Multiplex,
                    }
                        );
                }
                if (!string.IsNullOrWhiteSpace(review))
                {
                    items.Add(
                        new Item()
                    {
                        Id         = Guid.NewGuid(),
                        Value      = review,
                        ItemType   = ItemType.Review,
                        MovieId    = movie.Id,
                        SourceType = SourceType.Multiplex,
                    }
                        );
                }
                items.Add(new Item()
                {
                    Id         = Guid.NewGuid(),
                    Value      = href,
                    ItemType   = ItemType.Link,
                    MovieId    = movie.Id,
                    SourceType = SourceType.Multiplex,
                });
                DbTasks.AddItems(items);

                #endregion
            }
            catch (Exception e)
            {
                // ignored
            }
        }