private string GetLanguageCodes(SubtitleSearchQuery query) { string str1 = ""; foreach (string str2 in query.LanguageCodes) { str1 = str1 + str2 + ","; } if (query.LanguageCodes.Length > 0) { str1 = str1.Remove(str1.Length - 1, 1); } return(str1); }
/// <summary> /// Search subtitles in page /// </summary> /// <param name="page">html page</param> /// <param name="query">the search query</param> /// <returns>List of subtitles</returns> private static List <Subtitle> Search(HtmlDocument page, SubtitleSearchQuery query) { var subtitles = new List <Subtitle>(); var subtitlesGroups = GetSubtitlesGroups(page); var parsedSubtitles = ParseSubtitlesGroups(subtitlesGroups); foreach (var language in parsedSubtitles) { foreach (var group in language.Value) { foreach (var quality in group.Value) { foreach (var index in quality.Value) { // parse each subtitle here // mandatory fields: id, subtitle_version, var id = ""; var subtitleVersion = ""; var key = ""; foreach (var param in index.Value) { switch (param.Key) { case "\"id\"": { id = param.Value; break; } case "\"subtitle_version\"": { subtitleVersion = param.Value; break; } case "\"key\"": { key = param.Value; break; } default: { break; } } } // Add subtitles if (id != "" && subtitleVersion != "" && key != "") { var version = subtitleVersion.Replace("\"", ""); var cleanKey = key.Replace("\"", ""); string languageName; LanguageShortToLongCodeDictionary.TryGetValue(language.Key.Replace("\"", ""), out languageName); var languageCode = Languages.GetLanguageCode(languageName); // Check language if (query.HasLanguageCode(languageCode)) { subtitles.Add(new Subtitle(id + " " + cleanKey, version, version, languageCode)); } } } } } } return(subtitles); }
private List <Subtitle> Search(string baseUrl, SubtitleSearchQuery query) { Dictionary <string, string> dictionary = this.ParseLanguageOptions(); List <Subtitle> list = new List <Subtitle>(); foreach (string current in dictionary.Keys) { if (query.HasLanguageCode(Languages.FindLanguageCode(current))) { string str = dictionary[current]; string requestUriString = baseUrl + "&sJ=" + str; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUriString); if (this.SearchTimeout > 0) { httpWebRequest.Timeout = this.SearchTimeout * 1000; } HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); xmlReaderSettings.ProhibitDtd = false; xmlReaderSettings.ValidationType = ValidationType.None; XmlReader reader = XmlReader.Create(httpWebResponse.GetResponseStream(), xmlReaderSettings); this.xmlDoc = new XmlDocument(); this.xmlDoc.Load(reader); XmlNodeList elementsByTagName = this.xmlDoc.GetElementsByTagName("subtitle"); foreach (XmlNode xmlNode in elementsByTagName) { string id = null; string text = null; for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { if (xmlNode.ChildNodes[i].Name == "url") { id = xmlNode.ChildNodes[i].InnerText; } else { if (xmlNode.ChildNodes[i].Name == "release") { text = xmlNode.ChildNodes[i].InnerText.TrimEnd(new char[0]).TrimStart(new char[0]); } } } if (!string.IsNullOrEmpty(text)) { //if (text.Contains(" ")) //{ // string[] array = text.Split(new char[] // { // ' ' // }); // string[] array2 = array; // for (int j = 0; j < array2.Length; j++) // { // string text2 = array2[j]; // Subtitle item = new Subtitle(id, text2, text2, Languages.FindLanguageCode(current)); // list.Add(item); // } //} //else //{ Subtitle item2 = new Subtitle(id, text, text, Languages.FindLanguageCode(current)); list.Add(item2); //} } } } } return(list); }