Beispiel #1
0
        private StudioMovie ParseElement(IElement element)
        {
            var movie = new StudioMovie();

            var link = element.QuerySelectorAll("a.sample-picker").FirstOrDefault();
            var time = element.QuerySelector("time");

            var url      = $"{BaseAddress}{link?.GetAttribute("href")}";
            var movieUri = new Uri(url);

            if (!string.IsNullOrEmpty(movieUri.Query))
            {
                url = url.Remove(url.IndexOf(movieUri.Query, StringComparison.CurrentCultureIgnoreCase), movieUri.Query.Length);
            }

            movie.Title       = link?.GetAttribute("title");
            movie.Uri         = url;
            movie.Description = element.QuerySelector(".scene-postcard-description")?.TextContent?.Trim();

            movie.Models = element.QuerySelector(".model-names")?.QuerySelectorAll("a")?.Select(e => e.TextContent.Trim()).Distinct();

            movie.Attachments = link?.Children.Where(e => e.LocalName == "img").Select(e =>
            {
                var value = e.GetAttribute("data-src");
                var uri   = value.StartsWith("//", StringComparison.Ordinal) ? $"http://{value.Substring("//".Length)}" : value;

                return(uri);
            }).ToArray();

            string timeValue;

            if (!string.IsNullOrEmpty(timeValue = time.InnerHtml))
            {
                if (timeValue.Trim().StartsWith(@"\n"))
                {
                    timeValue = timeValue.Substring(2);
                }

                movie.Date = DateTime.Parse(timeValue.Trim());
            }

            if (string.IsNullOrEmpty(movie.Title))
            {
                movie = ParseLegacyElement(element);
            }

            if (string.IsNullOrEmpty(movie.Description))
            {
                movie.Description = string.Empty;
            }

            return(movie);
        }
Beispiel #2
0
        public async Task <StudioMovie> ParseDetailsAsync(string html, string movieUri)
        {
            try
            {
                var parser   = new HtmlParser();
                var document = await parser.ParseAsync(html);

                var movieId = int.Parse(movieUri.Split('/').LastOrDefault());

                var      title       = document.QuerySelector(".video-titles h1")?.TextContent?.Trim();
                var      categories  = document.QuerySelector(".tags-box")?.QuerySelectorAll("a")?.Select(e => e.TextContent.Trim()).Distinct();
                var      description = document.QuerySelector(".box-container")?.TextContent?.Trim();
                var      attachments = document.QuerySelector(".photo-slider-guest")?.QuerySelectorAll("a")?.Select(e => e.GetAttribute("href") + $"#{movieId}").Distinct();
                var      models      = document.QuerySelector(".pornstars-box").QuerySelectorAll("a.name").Select(e => e.TextContent.Trim()).Distinct();
                var      dateString  = document.QuerySelector("time")?.TextContent;
                DateTime?date        = null;
                TimeSpan?duration    = TimeSpan.Zero;

                if (!string.IsNullOrEmpty(dateString))
                {
                    date = DateTime.Parse(dateString);
                }

                var durationString = document.QuerySelector(".info-panel.duration")?.QuerySelector(".duration")?.TextContent?.Trim();

                if (!string.IsNullOrEmpty(durationString))
                {
                    durationString = durationString.Contains("min") ? Regex.Match(durationString, @"\d+").Value : durationString;
                    duration       = TimeSpan.FromMinutes(int.Parse(durationString));
                    duration       = duration > TimeSpan.FromHours(23) ? TimeSpan.FromHours(23) : duration;
                }

                var studioMovie = new StudioMovie
                {
                    Title       = title,
                    Description = description,
                    Categories  = categories,
                    Models      = models,
                    Attachments = attachments,
                    Uri         = movieUri,
                    Date        = date,
                    Duration    = duration
                };

                return(studioMovie);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            return(null);
        }
Beispiel #3
0
        public async Task <StudioMovie> ParseDetailsAsync(string html, string movieUri)
        {
            var parser   = new HtmlParser();
            var document = await parser.ParseAsync(html);

            var description = document.QuerySelector(".synopsis.grey-text");
            var child       = description.QuerySelector(".light-grey-text");

            if (child != null)
            {
                description.RemoveChild(child);
            }

            var duration        = TimeSpan.Zero;
            var durationElement = document.QuerySelector(".duration.light-grey-text")?.TextContent.Trim();

            if (durationElement != null)
            {
                durationElement = Regex.Match(durationElement, @"\d+").Value;
                duration        = TimeSpan.FromMinutes(int.Parse(durationElement));
            }

            var attachments = document.QuerySelector(".contain-scene-images.desktop-only")?.QuerySelectorAll("img")
                              .Select(e =>
            {
                var src = e.GetAttribute("src");
                return(src.StartsWith("//") ? $"https:{src}" : src);
            });

            var categories = document.QuerySelector(".categories.grey-text")?.QuerySelectorAll("a.cat-tag")?.Select(e => e.TextContent.Trim()).Distinct().ToList();

            if (categories == null || !categories.Any())
            {
                categories = new List <string> {
                    "Other"
                };
            }

            var studioMovie = new StudioMovie
            {
                Duration    = duration,
                Description = description?.TextContent?.Trim(),
                Categories  = categories,
                Models      = document.QuerySelectorAll(".scene-title.grey-text")?.Select(e => e.TextContent.Trim()).Distinct(),
                Attachments = attachments
            };

            return(studioMovie);
        }
Beispiel #4
0
        public ActionResult Delete(StudioMovie requestStudioMovie, string Group)
        {
            StudioMovie conn = dsm.StudioMovies.Where(p => p.StudioId == requestStudioMovie.StudioId && p.MovieId == requestStudioMovie.MovieId).FirstOrDefault();

            dsm.StudioMovies.Remove(conn);
            dsm.SaveChanges();

            if (Group.Equals("Studio"))
            {
                return(RedirectToAction("Edit", Group, new { id = requestStudioMovie.StudioId }));
            }
            else
            {
                return(RedirectToAction("Edit", Group, new { id = requestStudioMovie.MovieId }));
            }
        }
Beispiel #5
0
        public async Task <StudioMovie> ParseDetailsAsync(string html, string requestUri)
        {
            var parser   = new HtmlParser();
            var document = await parser.ParseAsync(html);

            var      durationElement = document.QuerySelector(".scene-length")?.TextContent;
            TimeSpan?duration        = TimeSpan.Zero;

            if (!string.IsNullOrEmpty(durationElement))
            {
                durationElement = Regex.Match(durationElement, @"\d+").Value;
                duration        = TimeSpan.FromMinutes(int.Parse(durationElement));
            }
            else
            {
                Console.WriteLine($"Duration in this movie is missing: {requestUri}");
            }

            var description = document.QuerySelector("#scene-description")?.QuerySelector("p");
            var child       = description?.QuerySelector(".collapse");

            if (child != null)
            {
                description.RemoveChild(description.QuerySelector(".collapse"));
            }

            var categories = document.QuerySelector(".tag-card-container")?.QuerySelectorAll("a")?.Select(e => e.TextContent.Trim()).Distinct().ToList();

            if (categories == null || !categories.Any())
            {
                categories = new List <string> {
                    "Other"
                };
            }

            var movie = new StudioMovie
            {
                Attachments = null,
                Duration    = duration,
                Description = description?.TextContent.Trim(),
                Categories  = categories,
                Models      = document.QuerySelector(".related-model").QuerySelectorAll("a").Select(e => e.TextContent.Trim()).Distinct()
            };

            return(movie);
        }
Beispiel #6
0
        private static StudioMovie ParseLegacyElement(IElement element)
        {
            var movie = new StudioMovie();

            var card = element.QuerySelector(".card-image");

            var a = card.QuerySelectorAll("a").FirstOrDefault();

            movie.Title = a?.GetAttribute("title");
            var url      = $"{BaseAddress}{a?.GetAttribute("href")}";
            var movieUri = new Uri(url);

            if (!string.IsNullOrEmpty(movieUri.Query))
            {
                url = url.Remove(url.IndexOf(movieUri.Query, StringComparison.CurrentCultureIgnoreCase), movieUri.Query.Length);
            }

            movie.Uri = url;

            var models = element.QuerySelector(".model-names")?.QuerySelectorAll("a")?.Select(e => e.TextContent.Trim()).Distinct();

            movie.Models = models;

            var imgSrc = a?.QuerySelector("img")?.GetAttribute("data-src");

            if (!string.IsNullOrEmpty(imgSrc))
            {
                movie.Attachments = new List <string>
                {
                    imgSrc.StartsWith("//") ? $"https://{imgSrc}" : imgSrc
                };
            }

            movie.Description = element.QuerySelector(".scene-postcard-description")?.TextContent?.Trim();

            var date = element.QuerySelector(".scene-postcard-date").TextContent.Trim();

            if (DateTime.TryParse(date, out var dateTime))
            {
                movie.Date = dateTime;
            }

            return(movie);
        }
Beispiel #7
0
        public ActionResult New(StudioMovie requestStudioMovie, string Group)
        {
            StudioMovie sm = new StudioMovie();

            sm.MovieId  = requestStudioMovie.MovieId;
            sm.StudioId = requestStudioMovie.StudioId;

            dsm.StudioMovies.Add(sm);
            dsm.SaveChanges();

            if (Group.Equals("Studio"))
            {
                return(RedirectToAction("Edit", Group, new { id = requestStudioMovie.StudioId }));
            }
            else
            {
                return(RedirectToAction("Edit", Group, new { id = requestStudioMovie.MovieId }));
            }
        }
Beispiel #8
0
        private static StudioMovie ParseElement(IElement element)
        {
            var movie = new StudioMovie();

            movie.Title  = element.QuerySelector(".card-title a")?.TextContent;
            movie.Models = element.QuerySelector("h6.card-subtitle")?.QuerySelectorAll("a").Select(e => e.TextContent);
            var dateString = element.QuerySelector("small.text-muted")?.TextContent;

            movie.Date = DateTime.Parse(dateString);
            var src = element.QuerySelectorAll(".card-img-top")?.FirstOrDefault(e => e.HasAttribute("src"))?.GetAttribute("src");

            movie.Attachments = new[] { src };
            var durationString = element.QuerySelector(".card-info")?.QuerySelectorAll(".d-inline-flex")?.FirstOrDefault(e => e.InnerHtml.Contains("video_icon_white"))?.TextContent?.Trim();

            durationString = durationString.Contains("min") ? Regex.Match(durationString, @"\d+").Value : durationString;
            movie.Duration = TimeSpan.FromMinutes(int.Parse(durationString));
            movie.Duration = movie.Duration > TimeSpan.FromHours(23) ? TimeSpan.FromHours(23) : movie.Duration;
            movie.Uri      = $"{BaseAddress}{element.QuerySelector(".card-title a")?.GetAttribute("href")}";

            return(movie);
        }
Beispiel #9
0
        private static StudioMovie ParseLegacyElement(IElement element)
        {
            var movie = new StudioMovie();

            var a = element.QuerySelector(".contain-img");

            movie.Title = a.GetAttribute("title");
            var url = a.GetAttribute("href");

            var movieUri = new Uri(url);

            if (!string.IsNullOrEmpty(movieUri.Query))
            {
                url = url.Remove(url.IndexOf(movieUri.Query, StringComparison.CurrentCultureIgnoreCase), movieUri.Query.Length);
            }

            movie.Uri = url;

            var src = a.QuerySelectorAll("img").FirstOrDefault(e => string.IsNullOrEmpty(e.ClassName))?.GetAttribute("src");

            if (!string.IsNullOrEmpty(src))
            {
                movie.Attachments = new List <string>
                {
                    src.StartsWith("//") ? $"https:{src}" : src
                };
            }

            var date = element.QuerySelector(".entry-date").TextContent;

            movie.Date = DateTime.Parse(date);

            movie.Models = element.QuerySelector(".contain-actors").QuerySelectorAll("a.title").Select(e => e.TextContent).Distinct();

            return(movie);
        }