protected override string GetLanguageCode(SubtitlesLanguage subtitlesLanguage) { switch (subtitlesLanguage) { case SubtitlesLanguage.French: return("French"); case SubtitlesLanguage.English: return("English"); default: return(null); } }
public async override Task <SubtitlesSearchResultDto> GetAvailableSubtitlesAsync(string imdbCode, SubtitlesLanguage subtitlesLanguage) { var searchUrl = baseUrl + "/movie-imdb/" + imdbCode; var doc = await HttpRequester.GetHtmlDocumentAsync(searchUrl); if (doc == null) { return(null); } var nodes = doc.DocumentNode.SelectNodes("//table[@class='table other-subs']/tbody/tr"); if (nodes == null) { return(null); } var subtitlesSourceLinks = new List <string>(); var languageCode = GetLanguageCode(subtitlesLanguage); foreach (var node in nodes) { doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(node.InnerHtml); var languageInfo = doc.DocumentNode.SelectSingleNode("//span[@class='sub-lang']"); if (languageInfo != null && languageInfo.InnerText == languageCode) { var subtitleLink = doc.DocumentNode.SelectSingleNode("//td[@class='download-cell']//a")?.Attributes["href"]?.Value; if (subtitleLink != null) { subtitlesSourceLinks.Add(baseUrl + subtitleLink); } } } if (subtitlesSourceLinks.Any()) { return(new SubtitlesSearchResultDto() { Language = GetLanguageLabel(subtitlesLanguage), SubtitlesSourceUrls = subtitlesSourceLinks.ToArray() }); } return(null); }
protected override string GetLanguageLabel(SubtitlesLanguage subtitlesLanguage) { return(GetLanguageCode(subtitlesLanguage)); }
public override async Task <SubtitlesSearchResultDto> GetAvailableSubtitlesAsync(string imdbCode, SubtitlesLanguage subtitlesLanguage) { var openSubtitleMovieId = await GetOpenSubtitleMovieId(imdbCode); if (string.IsNullOrEmpty(openSubtitleMovieId)) { return(null); } var doc = await HttpRequester.GetHtmlDocumentAsync(baseUrl + "/en/search/idmovie-" + openSubtitleMovieId + "/sublanguageid-" + GetLanguageCode(subtitlesLanguage)); if (doc == null) { return(null); } var htmlTableResults = doc.DocumentNode.SelectSingleNode("//table[@id='search_results']"); if (htmlTableResults != null) { var searchResultsHtml = new HtmlDocument(); searchResultsHtml.LoadHtml(htmlTableResults.InnerHtml); return(new SubtitlesSearchResultDto() { Language = GetLanguageLabel(subtitlesLanguage), SubtitlesSourceUrls = searchResultsHtml.DocumentNode.SelectNodes("//a[contains(@onclick, '/subtitleserve/sub/')]")? .Select(n => { var values = n.Attributes["href"].Value.Split('/'); return "https://dl.opensubtitles.org/en/download/sub/" + values[values.Length - 1]; }).ToArray() }); } var singleResult = doc.DocumentNode.SelectSingleNode("//a[@id='bt-dwl-bt']")?.Attributes["href"]?.Value; if (!string.IsNullOrEmpty(singleResult)) { return new SubtitlesSearchResultDto() { Language = GetLanguageLabel(subtitlesLanguage), SubtitlesSourceUrls = new string[] { baseUrl + singleResult } } } ; return(null); }
protected abstract string GetLanguageLabel(SubtitlesLanguage subtitlesLanguage);
protected abstract string GetLanguageCode(SubtitlesLanguage subtitlesLanguage);
public abstract Task <SubtitlesSearchResultDto> GetAvailableSubtitlesAsync(string imdbCode, SubtitlesLanguage subtitlesLanguage);