public VideoDetails GetDetails() { VideoDetails details = IMDbAPI.GetVideo(this.session, this.ID); if (details.Image == null) { details.Image = this.Image; } return(details); }
/// <summary> /// Gets the IMDb video /// </summary> /// <param name="session">Session instance.</param> /// <param name="imdbID">IMDb ID</param> /// <returns></returns> public static VideoDetails GetVideo(Session session, string imdbID) { VideoDetails details = new VideoDetails(); details.session = session; details.ID = imdbID; string url = string.Format(session.Settings.VideoInfo, imdbID); string data = session.MakeRequest(url); HtmlNode root = Utility.ToHtmlNode(data); if (root == null) { return details; } HtmlNode titleNode = root.SelectSingleNode("//title"); string title = titleNode.InnerText; title = title.Substring(title.IndexOf(':') + 1).Trim(); details.Title = HttpUtility.HtmlDecode(title); HtmlNode descNode = root.SelectSingleNode("//table[@id='video-details']/tr[1]/td[2]"); details.Description = HttpUtility.HtmlDecode(descNode.InnerText); string[] formats = null; MatchCollection matches = videoFormatExpression.Matches(data); foreach (Match m in matches) { string format = m.Groups["format"].Value; string video = m.Groups["video"].Value; if (formats == null) { string videoPlayerHtml = session.MakeRequest(session.Settings.BaseUri + video); var json = GetJsonForVideo(videoPlayerHtml); if (json != null) { formats = json["titleObject"]["encoding"].Select(q => (q as JProperty).Name).Where(q => q != "selected").ToArray(); } } if (formats != null) { switch (format) { case "SD": if (formats.Contains("240p")) details.Files[VideoFormat.SD] = video; break; case "480p": if (formats.Contains("480p")) details.Files[VideoFormat.HD480] = video; break; case "720p": if (formats.Contains("720p")) details.Files[VideoFormat.HD720] = video; break; } } else { details.Files[VideoFormat.SD] = video; break; } } if (details.Files.Count == 0) { details.Files.Add(VideoFormat.SD, "/video/screenplay/" + imdbID + "/player"); } return details; }