protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string[] responses = UlifHelper.GetPhrasesPages(phrase, networkSetting); if (responses.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } foreach (string str in responses) { string responseFromServer = str; responseFromServer = StringParser.Parse("<div class=\"p_cl\">", "</div>", responseFromServer); responseFromServer = StringParser.RemoveAll("<A ondblclick", ">", responseFromServer); responseFromServer = responseFromServer.Replace("</A>", ""); responseFromServer = responseFromServer.Replace("<B>", ""); responseFromServer = responseFromServer.Replace("</B>", ""); responseFromServer = responseFromServer.Replace("<I>", ""); responseFromServer = responseFromServer.Replace("</I>", ""); StringParser parser = new StringParser(responseFromServer); string[] translations = parser.ReadItemsList("<P>", "</P>", "3495783-4572385"); foreach (string subtranslation in translations) { Result subres = CreateNewResult("", languagesPair, subject); result.Childs.Add(subres); subres.Translations.Add(subtranslation); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.online-translator.com/text/references.aspx?prmtlang=en&direction={0}&word={1}"; query = string.Format(query, PromtUtils.ConvertLanguagesPair(languagesPair), HttpUtility.UrlEncode(phrase)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("class=\"ref_not_found\"") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } result.ArticleUrl = query; result.ArticleUrlCaption = phrase; StringParser parser = new StringParser(responseFromServer); string[] translation_list = parser.ReadItemsList("<span class=\"ref_source\"", "</table>"); string subphrase; string abbreviation; Result child; StringParser subparser; foreach (string translation in translation_list) { subphrase = StringParser.Parse(">", "</span>", translation); abbreviation = StringParser.Parse("<span class=\"ref_psp\">", "</span>", translation); child = CreateNewResult(subphrase, languagesPair, subject); child.Abbreviation = abbreviation; result.Childs.Add(child); subparser = new StringParser(translation); string[] subtranslation_list = subparser.ReadItemsList("<span class=\"ref_result\">", "</span>"); foreach (string subtranslation in subtranslation_list) { child.Translations.Add(HttpUtility.HtmlDecode(subtranslation)); } } }
public static void DoSearch(string searchHost, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://{0}.{1}/w/api.php?action=query&list=search&srsearch={2}&srlimit={3}&format=xml&srwhat=text"; string lang = WikiUtils.ConvertLanguage(languagesPair.To); query = string.Format(query, lang, searchHost, HttpUtility.UrlEncode(phrase), MonolingualSearchEngine.ResultsLimit); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("info=\"") >= 0) { string error = StringParser.Parse("info=\"", "\"", responseFromServer); throw new TranslationException(error); } if (responseFromServer.IndexOf("<p ns=\"0\" title=\"") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } StringParser parser = new StringParser(responseFromServer); string[] items = parser.ReadItemsList("<p ns=\"0\" title=\"", "\"", "787654323"); string link; foreach (string part in items) { //link = "html!"; link = "html!<p><a href=\"http://{0}.{1}/wiki/{2}\" title=\"http://{0}.{1}/wiki/{2}\">{3}</a></p>"; link = string.Format(link, lang, searchHost, part, part); result.Translations.Add(link); } }
public static void SetResult(Result result, string data, string host) { if (data.IndexOf("</strong> can be found at Merriam-WebsterUnabridged.com.") > 0) { result.Translations.Add(result.Phrase); return; } if (data.Contains("No entries found that match ")) { result.Translations.Add(result.Phrase); return; } result.HasAudio = data.Contains("title=\"Listen to the pronunciation of"); if (data.IndexOf("<div>Function: ") > 0) { string abbr = StringParser.Parse("<div>Function: ", "</div>", data); abbr = abbr.Replace("<em>", ""); abbr = abbr.Replace("</em>", ""); abbr = abbr.Replace("<span class=\"fl\">", ""); abbr = abbr.Replace("</span>", ""); result.Abbreviation = abbr; } if (data.IndexOf("<div>Pronunciation: ") > 0) { string abbr = StringParser.Parse("<div>Pronunciation: ", "</div>", data); abbr = StringParser.RemoveAll("<span", ">", abbr); abbr = abbr.Replace("</span>", ""); abbr = abbr.Replace("<em>", ""); abbr = abbr.Replace("</em>", ""); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += abbr; } if (data.IndexOf("<dd class=\"use\">") > 0) { string abbr = StringParser.Parse("<dd class=\"use\">", "</dd>", data); abbr = abbr.Replace("<em>", ""); abbr = abbr.Replace("</em>", ""); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += "Usage: " + abbr; } if (data.IndexOf("<div>Etymology: ") > 0) { string abbr = StringParser.Parse("<div>Etymology: ", "</div>", data); abbr = abbr.Replace("<em>", "("); abbr = abbr.Replace("</em>", ")"); abbr = StringParser.RemoveAll("<a href", ">", abbr); abbr = abbr.Replace("</a>", ""); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += "Etymology: " + abbr; } if (data.IndexOf("<div>Date: ") > 0) { string abbr = StringParser.Parse("<div>Date: ", "</div>", data); abbr = abbr.Replace("<em>", "("); abbr = abbr.Replace("</em>", ")"); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += "Date: " + abbr; } if (!data.Contains("class=\"d\">") && data.Contains("<span class=\"variant\">")) { //variant, like a blew - past of blow string variant = StringParser.Parse("<span class=\"variant\">", "</div>", data); SetAdditionalLinks(result, variant, host); variant = StringParser.RemoveAll("<span", ">", variant); variant = StringParser.RemoveAll("<a href", ">", variant); variant = variant.Replace("</a>", ""); variant = variant.Replace("</span>", ""); variant = variant.Replace("<em>", ""); variant = variant.Replace("</em>", ""); variant = variant.Replace("</dd>", " "); variant = variant.Replace("</dl>", ""); result.Translations.Add(variant.Trim()); return; } string defs = StringParser.Parse("class=\"d\">", "<script", data); defs = defs.Replace(" a</span>", " a "); defs = defs.Replace("</span>", ""); defs = defs.Replace("<em>", ""); defs = defs.Replace("</em>", ""); defs = defs.Replace("<strong>Synonyms</strong>", "Synonyms: "); defs = defs.Replace("<strong>Related Words</strong>", "Related Words: "); defs = defs.Replace("<strong>Antonyms</strong>", "Antonyms: "); //defs = defs.Replace("<strong>", ""); //defs = defs.Replace("</strong>", ""); defs = defs.Replace(":�<a", "- <a"); defs = defs.Replace("<span class=\"dxn\">", ""); SetAdditionalLinks(result, defs, host); defs = StringParser.RemoveAll("<a href", ">", defs); defs = defs.Replace("</a>", ""); defs = defs.Replace("<span class=\"sense_content\">", ""); //defs = StringParser.RemoveAll("<span class=\"sense_label\">", ">", defs); defs = defs.Replace("<span>", ""); defs = defs.Replace("�", ""); defs = defs.Replace("<span class=\"vi\">", ""); defs = defs.Replace("<span class=\"text\">", ""); defs = defs.Replace("<span class=\"\n sense_label", "<span class=\"sense_label"); defs = defs.Replace("<span class=\"unicode\">", ""); defs = defs.Replace("ʼ", "'"); if (defs.IndexOf("<br/>") < 0) { //single def if (defs.IndexOf("<span class=\"syn\">") < 0 && defs.IndexOf("<span class=\"rel\">") < 0 && defs.IndexOf("<span class=\"ant\">") < 0 ) { defs = StringParser.RemoveAll("<", ">", defs); result.Translations.Add(defs.Trim()); return; } } defs = "<start>" + defs; { defs = defs.Replace("<span class=\"verb_class\">", "<end><start>"); defs = defs.Replace("<div class=\"synonym\">", "<end><start>"); defs = defs.Replace("<span class=\"syn\">", "<end><start>"); defs = defs.Replace("<span class=\"rel\">", "<end><start>"); defs = defs.Replace("<span class=\"ant\">", "<end><start>"); defs = defs.Replace("<br/>", "<end><start>"); defs += "<end>"; //ending mark StringParser parser = new StringParser(defs); string[] defs_items = parser.ReadItemsList("<start>", "<end>"); string translation; foreach (string item in defs_items) { translation = item.Trim(); /*if(translation[0] <= '9' && translation[0] >= '0') * translation = item.Substring(1).Trim(); //skip idx * * if(translation[0] <= '9' && translation[0] >= '0') * translation = translation.Substring(1).Trim(); //skip idx * * if(translation.StartsWith(":")) * translation = translation.Substring(1); */ if (translation.StartsWith("<strong>")) { translation = StringParser.ExtractRight("</strong>", translation); } string subsense_tag = "<em class=\"su\">"; if (false && translation.IndexOf(subsense_tag) > 0) { //extract senses string toptranslaton = translation.Substring(0, translation.IndexOf(subsense_tag)); toptranslaton = StringParser.RemoveAll("<", ">", toptranslaton); if (toptranslaton.StartsWith("a :")) { toptranslaton = toptranslaton.Substring(3); } result.Translations.Add(toptranslaton.Trim()); translation = translation.Substring(translation.IndexOf(subsense_tag)); translation = translation.Replace(subsense_tag, "<end>" + subsense_tag); translation += "<end>"; StringParser subparser = new StringParser(translation); string[] sub_defs_items = subparser.ReadItemsList(subsense_tag, "<end>"); foreach (string subtranslation in sub_defs_items) { translation = subtranslation.Substring(1).Trim(); //skip idx if (translation.StartsWith(":")) { translation = translation.Substring(1); //skip idx } translation = StringParser.RemoveAll("<", ">", translation); result.Translations.Add(translation.Trim()); } } else { translation = StringParser.RemoveAll("<", ">", translation); result.Translations.Add(translation.Trim()); } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://www.dep.pl/dict?word=test&words=&lang=DE string query = "http://www.dep.pl/dict?word={0}&words=&lang=DE"; query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase)); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("has not been found - please post it to the") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("<table cellspacing=", "</table>", responseFromServer); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<td align=\"left\">", "</td>", "787654323"); int cnt = translations.Length; string tmp; for (int i = 0; i < cnt; i++) { tmp = translations[i]; tmp = StringParser.RemoveAll("<a href=", ">", tmp); tmp = StringParser.RemoveAll("<font", ">", tmp); tmp = tmp.Replace("</font>", ""); tmp = tmp.Replace("</a>", ""); translations[i] = tmp; } cnt = translations.Length / 2; string polish, german; string subphrase, subtranslation; Result subres = null; for (int i = 0; i < cnt; i++) { polish = translations[i * 2]; german = translations[i * 2 + 1]; if (languagesPair.From == Language.German) { subphrase = german; subtranslation = polish; } else { subphrase = polish; subtranslation = german; } if (translations.Length == 2 && string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0) { result.Translations.Add(subtranslation); return; } subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subtranslation); result.Childs.Add(subres); } } }
void TranslateWord(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { lock (sederetCode) { if (string.IsNullOrEmpty(sederetCode) || coockieTime < DateTime.Now.AddHours(-1)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://web.cecs.pdx.edu/~bule/bahasa/search.php"), networkSetting, WebRequestContentType.UrlEncodedGet, encoding); helpertop.CookieContainer = cookieContainer; coockieTime = DateTime.Now; string responseFromServertop = helpertop.GetResponse(); sederetCode = StringParser.Parse("<input type=\"hidden\" name=\"id\" value=\"", "\"", responseFromServertop); } } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://web.cecs.pdx.edu/~bule/bahasa/search.php"), networkSetting, WebRequestContentType.UrlEncoded, encoding); helper.CookieContainer = cookieContainer; //English to Indonesian, Indonesian to English string query = "id={0}&language={1}&method=fuzzy&stoken={2}"; if (languagesPair.From == Language.Indonesian) { query = string.Format(CultureInfo.InvariantCulture, query, sederetCode, "Indonesian to English", HttpUtility.UrlEncode(phrase)); } else { query = string.Format(CultureInfo.InvariantCulture, query, sederetCode, "English to Indonesian", HttpUtility.UrlEncode(phrase)); } helper.AddPostData(query); string responseFromServer = helper.GetResponse(); lock (sederetCode) { sederetCode = StringParser.Parse("<input type=\"hidden\" name=\"id\" value=\"", "\"", responseFromServer); } if (!responseFromServer.Contains("<th colspan=\"6\"><hr>")) { result.ResultNotFound = result.Childs.Count == 0; return; } string translation = StringParser.Parse("<th colspan=\"6\"><hr>", "<tr><td colspan=\"6\"><hr>", responseFromServer); Result child; StringParser subparser; { subparser = new StringParser(translation); string[] subtranslation_list = subparser.ReadItemsList("<td", "</td>"); for (int i = 0; i < subtranslation_list.Length; i += 6) { string subphrase = subtranslation_list[i]; subphrase = StringParser.ExtractRight(">", subphrase); child = CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(child); string subtranslation = subtranslation_list[i + 1]; subtranslation = StringParser.ExtractRight(">", subtranslation); child.Translations.Add(HttpUtility.HtmlDecode(subtranslation)); string abbr = subtranslation_list[i + 2]; abbr = StringParser.ExtractRight(">", abbr); child.Abbreviation = abbr; } } result.ResultNotFound = result.Childs.Count == 0; }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.cybermova.com/cgi-bin/olenuapro.pl"; if (languagesPair.From == Language.Ukrainian) { query = "http://www.cybermova.com/cgi-bin/oluaenpro.pl"; } WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncoded); helper.Encoding = Encoding.GetEncoding(1251); query = "Word={0}&EnUaBtn=En+--%3E+Ua"; query = string.Format(query, HttpUtility.UrlEncode(phrase, helper.Encoding)); helper.AddPostData(query); //"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.- " //"АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзиіїйклмнопрстуфхцчшщьюя'.- !?/,:;()\'\"\"" string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("<span id=result><B>") == -1) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("<body bgColor=LightSkyBlue>", "<FORM ACTION=", responseFromServer); StringParser phrasesParser = new StringParser(translation); string[] phrases = phrasesParser.ReadItemsList("<span id=result><B>", "</span>", "787654323"); string subphrase; string subtranslation; Result subres = null; foreach (string data in phrases) { int idx = data.IndexOf("</B>"); if (idx < 0) { throw new TranslationException("Can't found </B> tag"); } subphrase = data.Substring(0, idx); bool has_root = subphrase.IndexOf("||") > 0; string root = ""; if (has_root) { root = subphrase.Substring(0, subphrase.IndexOf("||")); subphrase = subphrase.Replace("||", ""); } subtranslation = data.Substring(idx + 4); subtranslation = StringParser.RemoveAll("<IMG", ">", subtranslation); if (subphrase.Length > 1) { subtranslation = subtranslation.Replace(subphrase.Substring(0, 1) + ". ", subphrase + " "); subtranslation = subtranslation.Replace(subphrase.Substring(0, 1) + "</B>. ", subphrase + "</B> "); } if (has_root) { subtranslation = subtranslation.Replace("~", root); subtranslation = subtranslation.Replace("||", ""); } subtranslation = subtranslation.Replace("<B>", ""); subtranslation = subtranslation.Replace("</B>", ""); subtranslation = subtranslation.Replace("<I>", ""); subtranslation = subtranslation.Replace("</I>", ""); if (subtranslation.IndexOf("1.") < 0 && subtranslation.IndexOf("1)") < 0) { if (string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0 && phrases.Length == 1) { //single answer result.Translations.Add(subtranslation); return; } subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subtranslation); result.Childs.Add(subres); } else { //parsing on parts if (subtranslation.IndexOf("1.") < 0) { int subsubdefinitionIdx = subtranslation.IndexOf("1)"); string abbr = subtranslation.Substring(0, subsubdefinitionIdx).Trim(); subtranslation = subtranslation.Substring(subsubdefinitionIdx + 2); List <string> subsubsubtranslations = new List <string>(); for (int i = 2; i < 100; i++) { int numIdx = subtranslation.IndexOf(i.ToString(CultureInfo.InvariantCulture) + ")"); if (numIdx < 0) { //last def if (subtranslation.Trim() != ".") { subsubsubtranslations.Add(subtranslation.Trim()); } else { subsubsubtranslations.Add(abbr); abbr = ""; } break; } else { string Definition = subtranslation.Substring(0, numIdx); subtranslation = subtranslation.Substring(numIdx + 2); subsubsubtranslations.Add(Definition.Trim()); } } if (string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0 && phrases.Length == 1) { //single answer result.Abbreviation = abbr; foreach (string s in subsubsubtranslations) { result.Translations.Add(s); } return; } subres = CreateNewResult(subphrase, languagesPair, subject); subres.Abbreviation = abbr; foreach (string s in subsubsubtranslations) { subres.Translations.Add(s); } result.Childs.Add(subres); } else { int subdefinitionIdx = subtranslation.IndexOf("1."); string tmp_subtranslation = subtranslation.Substring(subdefinitionIdx + 2).Trim(); if (string.IsNullOrEmpty(tmp_subtranslation)) { subtranslation = subtranslation.Substring(0, subdefinitionIdx).Trim(); } else { subtranslation = tmp_subtranslation; } List <string> subsubtranslations = new List <string>(); for (int i = 2; i < 100; i++) { int numIdx = subtranslation.IndexOf(i.ToString(CultureInfo.InvariantCulture) + "."); if (numIdx < 0) { //last def subsubtranslations.Add(subtranslation.Trim()); break; } else { string Definition = subtranslation.Substring(0, numIdx); subtranslation = subtranslation.Substring(numIdx + 2); subsubtranslations.Add(Definition.Trim()); } } subres = CreateNewResult(subphrase, languagesPair, subject); //subres.Translations.Add(" "); result.Childs.Add(subres); Result subsubres; foreach (string subsubtranslation in subsubtranslations) { if (subsubtranslation.IndexOf("1)") < 0) { subsubres = CreateNewResult("", languagesPair, subject); subsubres.Translations.Add(subsubtranslation); subres.Childs.Add(subsubres); } else { string subdata = subsubtranslation; int subsubdefinitionIdx = subdata.IndexOf("1)"); string abbr = subdata.Substring(0, subsubdefinitionIdx).Trim(); subdata = subdata.Substring(subsubdefinitionIdx + 2); List <string> subsubsubtranslations = new List <string>(); for (int i = 2; i < 100; i++) { int numIdx = subdata.IndexOf(i.ToString(CultureInfo.InvariantCulture) + ")"); if (numIdx < 0) { //last def if (subdata.Trim() != ".") { subsubsubtranslations.Add(subdata.Trim()); } else { subsubsubtranslations.Add(abbr); abbr = ""; } break; } else { string Definition = subdata.Substring(0, numIdx); subdata = subdata.Substring(numIdx + 2); subsubsubtranslations.Add(Definition.Trim()); } } subsubres = CreateNewResult(abbr, languagesPair, subject); foreach (string s in subsubsubtranslations) { subsubres.Translations.Add(s); } subres.Childs.Add(subsubres); } } } } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { if (string.IsNullOrEmpty(viewState)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.priberam.pt/dlpo/dlpo.aspx"), networkSetting, WebRequestContentType.UrlEncodedGet, Encoding.GetEncoding("iso-8859-1")); string responseFromServertop = helpertop.GetResponse(); viewState = StringParser.Parse("name=\"__VIEWSTATE\" value=\"", "\"", responseFromServertop); } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.priberam.pt/dlpo/definir_resultados.aspx"), networkSetting, WebRequestContentType.UrlEncoded, Encoding.GetEncoding("iso-8859-1")); string queryStr = "__EVENTTARGET=&__EVENTARGUMENT=&NOTVIEWSTATE={0}" + "&definActionTarget=%2Fdlpo%2Fdefinir_resultados.aspx" + "&pesqActionTarget=%2Fdlpo%2Fpesquisar_resultados.aspx" + "&conjugaActionTarget=%2Fdlpo%2Fconjugar_resultados.aspx" + "&CVdefinActionTarget=%2Fdcvpo%2Fdefinir_resultados.aspx" + "&CVpesqActionTarget=%2Fdcvpo%2Fpesquisar_resultados.aspx" + "&CVconjugaActionTarget=%2Fdcvpo%2Fconjugar_resultados.aspx" + "&h_seccao_index=&h_vista=&h_abrev_cat=1&h_abrev_flex=1&h_abrev_dom=1" + "&h_abrev_exemp=1&h_abrev_etim=1&h_abrev_outras=1&h_filtro=&h_dominio=" + "&h_var_geografica=&h_categoria=&h_reg_linguistico=&h_etimologia=" + "&h_desc_dominio=&h_desc_var_geografica=&h_desc_categoria=" + "&h_desc_reg_linguistico=&h_desc_etimologia=&accao=" + "&h_texto_pesquisa={1}&h_n={2}&accao=" + "&pal={1}&Dicionario%3ApalVisible={3}"; string query = string.Format(queryStr, HttpUtility.UrlEncode(viewState, helper.Encoding), HttpUtility.UrlEncode(phrase, helper.Encoding), 0, HttpUtility.UrlEncode(phrase, helper.Encoding) ); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); viewState = StringParser.Parse("name=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); if (responseFromServer.Contains("A palavra não foi encontrada.</span>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } if (responseFromServer.Contains("<blockquote>")) { StringParser parser = new StringParser(responseFromServer); string[] subblocks = parser.ReadItemsList("<blockquote>", "</blockquote>"); if (subblocks.Length == 1) { SetResult(result, subblocks[0]); } else { foreach (string block in subblocks) { Result child = new Result(result.ServiceItem, phrase, result.LanguagePair, result.Subject); result.Childs.Add(child); SetResult(child, block); } } } else if (responseFromServer.Contains("javascript:SeleccionaEntrada("")) { StringParser parser = new StringParser(responseFromServer); string[] sublinks = parser.ReadItemsList("javascript:SeleccionaEntrada("", "")\""); if (sublinks.Length <= 1) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string key = "",""; foreach (string sublink in sublinks) { int idx = sublink.IndexOf(key); if (idx < 0) { throw new TranslationException("Can't found start tag : \"","\" in string : " + sublink); } string val = sublink.Substring(0, idx); string num = sublink.Substring(idx + key.Length); query = string.Format(queryStr, HttpUtility.UrlEncode(viewState, helper.Encoding), HttpUtility.UrlEncode(val, helper.Encoding), num, HttpUtility.UrlEncode(phrase, helper.Encoding)); helper = new WebRequestHelper(result, new Uri("http://www.priberam.pt/dlpo/definir_resultados.aspx"), networkSetting, WebRequestContentType.UrlEncoded, Encoding.GetEncoding("iso-8859-1")); helper.AddPostData(query); responseFromServer = helper.GetResponse(); viewState = StringParser.Parse("name=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); if (responseFromServer.Contains("<blockquote>")) { parser = new StringParser(responseFromServer); string[] subblocks = parser.ReadItemsList("<blockquote>", "</blockquote>"); foreach (string block in subblocks) { Result child = new Result(result.ServiceItem, val, result.LanguagePair, result.Subject); result.Childs.Add(child); SetResult(child, block); } } } if (result.Childs.Count == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } else { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { if (string.IsNullOrEmpty(viewState)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.prolingoffice.com/page.aspx?l1=43"), networkSetting, WebRequestContentType.UrlEncodedGet, Encoding.GetEncoding(1251)); string responseFromServertop = helpertop.GetResponse(); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServertop); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServertop); } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.prolingoffice.com/page.aspx?l1=43"), networkSetting, WebRequestContentType.UrlEncoded, Encoding.GetEncoding(1251)); //__EVENTTARGET=_ctl1%24Menu1&__EVENTARGUMENT=1& //__VIEWSTATE={0}&q={1}&_ctl1%3AtsLang=rbLangU&LanguageH=RUS& //__EVENTVALIDATION={2} string query = "__EVENTTARGET=_ctl1%24Menu1&__EVENTARGUMENT=1&__VIEWSTATE={0}&q={1}&_ctl1%3AtsLang=rbLangU&LanguageH=RUS&__EVENTVALIDATION={2}"; query = string.Format(query, HttpUtility.UrlEncode(viewState, helper.Encoding), HttpUtility.UrlEncode(phrase, helper.Encoding), HttpUtility.UrlEncode(eventValidation, helper.Encoding)); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServer); if (responseFromServer.IndexOf("Перекладу цього слова не знайдено. Спробуйте записати слово інакше, або ознайомтеся з інформацією, яка міститься у <a") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.IndexOf("В слове содержатся ошибки. Возможно имелось в виду:</b>") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.IndexOf("Синонімів для цього слова не знайдено. Спробуйте записати слово інакше, або ознайомтеся з інформацією, яка міститься у <") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.IndexOf("В слове содержатся ошибки.</b>") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string translation = StringParser.Parse("<span class=\"wrd\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\">", "</TABLE></span>", responseFromServer); string abbr = StringParser.Parse("title=\"", "\"", translation); abbr += " " + StringParser.Parse("xslt\">", "</span>", translation).Trim(); //result.Abbreviation = abbr; StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<span class=\"tolk\"", "</td><td></td></tr>", "3495783-4572385"); foreach (string subtranslation in translations) { translation = StringParser.Parse(">", "</span>", subtranslation); Result subres; subres = CreateNewResult(translation, languagesPair, subject); result.Childs.Add(subres); parser = new StringParser(subtranslation); string[] subtranslations = parser.ReadItemsList("<a ", "/a>", "3495783-4572385"); foreach (string s in subtranslations) { subres.Translations.Add(StringParser.Parse(">", "<", s)); } } }
public static void DoTranslateDictionary(ServiceItem serviceItem, string url, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = string.Format(url, EncodePhrase(phrase, languagesPair)); query += ConvertLanguagesPair(languagesPair); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, GetEncoding(languagesPair)); if (languagesPair.From == Language.Japanese || languagesPair.To == Language.Japanese) { helper.StreamConvertor = new EucJPStreamFixer(); } string responseFromServer = helper.GetResponse(); if ((responseFromServer.IndexOf("ask in forum</a>") >= 0 && responseFromServer.IndexOf(" single words found") < 0) || (responseFromServer.IndexOf("спросить в форуме</a>") >= 0 && responseFromServer.IndexOf(" найдены отдельные слова") < 0) || responseFromServer.IndexOf("<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("createAutoComplete();", "</table>", responseFromServer); translation = translation.Replace("</TD>", "</td>"); translation = translation.Replace("<TD width", "<td width"); translation = translation.Replace("</td><tr>", "</td></tr><tr>"); translation = translation.Replace("</a><tr>", "</a></td></tr><tr>"); translation = translation.Replace("\"><tr>", "\"></td></tr><tr>"); translation = translation.Replace("</td>\r\n </tr>", "</td></tr>"); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</td></tr>"); string subpart; string subphrase = ""; string subtranslation; string abbreviation; Result subres = null; Result subsubres = null; foreach (string part in translations) { subpart = part; if (subpart.StartsWith("<td bgcolor=\"#DBDBDB\" width=\"100%\" colspan=\"2\">")) { //new subres subpart = subpart.Replace("<td bgcolor=\"#DBDBDB\" width=\"100%\" colspan=\"2\">", ""); subphrase = StringParser.Parse("\">", "</a>", subpart); subphrase = StringParser.RemoveAll("<span", ">", subphrase); subphrase = StringParser.RemoveAll("<a", ">", subphrase); subphrase = subphrase.Replace("<FONT SIZE=2>", ""); subphrase = subphrase.Replace("</FONT>", ""); if (subpart.Contains("<em>")) { abbreviation = StringParser.Parse("<em>", "</em>", subpart); } else { abbreviation = ""; } subres = serviceItem.CreateNewResult(subphrase, languagesPair, subject); subres.Abbreviation = abbreviation; subres.ArticleUrl = query; //subres.ArticleUrlCaption = phrase; result.Childs.Add(subres); } else { if (!subpart.Contains("title=\"")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } abbreviation = StringParser.Parse("title=\"", "\"", subpart); abbreviation += "("; abbreviation += StringParser.Parse("<i>", "</i>", subpart); abbreviation += ")"; //subsubres = serviceItem.CreateNewResult("", languagesPair, subject); //subsubres.Abbreviation = abbreviation; subsubres = serviceItem.CreateNewResult(abbreviation, languagesPair, subject); subsubres.ArticleUrl = "http://www.multitran.ru/c/" + StringParser.Parse("href=\"", "\"", subpart); subres.Childs.Add(subsubres); subtranslation = subpart.Substring(subpart.IndexOf("<td>") + 4); subtranslation = StringParser.RemoveAll("<span", ">", subtranslation); subtranslation = subtranslation.Replace("<a href=\"m.exe?t=", "<end><begin><a"); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subtranslation += "<end>"; parser = new StringParser(subtranslation); string[] subtranslations = parser.ReadItemsList("<begin>", "<end>"); foreach (string sub in subtranslations) { subtranslation = sub.Trim(); if (subtranslation.EndsWith(";")) { subtranslation = subtranslation.Substring(0, subtranslation.Length - 1); } subsubres.Translations.Add(subtranslation); } } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://slovnik.seznam.cz/?q=test&lang=en_cz string query = "http://slovnik.seznam.cz/?q={0}&lang={1}"; query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase), ConvertLanguagesPair(languagesPair)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("</strong>" nebylo ve Slovníku nic nalezeno.</h2>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { result.ArticleUrl = query; result.ArticleUrlCaption = phrase; //translation by self if (responseFromServer.Contains("<table id=\"words\">")) { string translation = StringParser.Parse("<table id=\"words\">", "</table>", responseFromServer); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</tr>"); Result subres = null; foreach (string str in translations) { string word = StringParser.Parse(">", "<", StringParser.Parse("<a", "/a>", str)); subres = CreateNewResult(word, languagesPair, subject); result.Childs.Add(subres); StringParser subparser = new StringParser("<td class=\"translated\">", "</td>", str); string[] subtranslations = subparser.ReadItemsList("<a", "/a>"); foreach (string sub_str in subtranslations) { if (!sub_str.Contains("<img src")) { subres.Translations.Add(StringParser.Parse(">", "<", sub_str)); } } } } //phrases if (responseFromServer.Contains("<div id=\"collocations\">")) { string translation = StringParser.Parse("<div id=\"collocations\">", "</div>", responseFromServer); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<dt>", "</dd>"); Result subres = null; foreach (string str in translations) { string word = StringParser.Parse(">", "<", StringParser.Parse("<a", "/a>", str)); subres = CreateNewResult(word, languagesPair, subject); result.Childs.Add(subres); StringParser subparser = new StringParser("<dd>", "</dd>", str + "</dd>"); string[] subtranslations = subparser.ReadItemsList("<a", "/a>"); foreach (string sub_str in subtranslations) { subres.Translations.Add(StringParser.Parse(">", "<", sub_str)); } } if (responseFromServer.Contains("&from=31\">2</a></span>")) { //more phrases string link = "html!<p><a href=\"{0}\" title=\"{0}\">{1}</a></p>"; link = string.Format(link, query + "&from=31", "More phrases ..."); subres = CreateNewResult(link, languagesPair, subject); result.Childs.Add(subres); } } if (result.Childs.Count == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string responseFromServer = UlifHelper.GetAntonymsPage(phrase, networkSetting); if (string.IsNullOrEmpty(responseFromServer)) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } responseFromServer = StringParser.Parse("<div class=\"p_cl\">", "</div>", responseFromServer); responseFromServer = StringParser.RemoveAll("<a ondblclick", ">", responseFromServer); responseFromServer = StringParser.RemoveAll("<font color", ">", responseFromServer); responseFromServer = StringParser.RemoveAll("<p align", ">", responseFromServer); responseFromServer = responseFromServer.Replace("</a>", ""); responseFromServer = responseFromServer.Replace("<b>", ""); responseFromServer = responseFromServer.Replace("</b>", ""); responseFromServer = responseFromServer.Replace("<i>", ""); responseFromServer = responseFromServer.Replace("</i>", ""); responseFromServer = responseFromServer.Replace("◘", ""); responseFromServer = responseFromServer.Replace("◊", ""); responseFromServer = responseFromServer.Replace("○", ""); responseFromServer = responseFromServer.Replace("□", ""); responseFromServer = responseFromServer.Replace("</font>", ""); responseFromServer = responseFromServer.Replace("</p>", ""); StringParser parser = new StringParser(responseFromServer); string[] blocks = parser.ReadItemsList("<tr>", "</tr>", "3495783-4572385"); Result subres; string left = ""; string right = ""; if (blocks.Length > 0) { parser = new StringParser(blocks[0].ToLowerInvariant()); string[] first_line = parser.ReadItemsList("<td>", "</td>", "3495783-4572385"); result.Translations.Add(first_line[0] + " - " + first_line[1]); left = first_line[0]; right = first_line[1]; } for (int i = 1; i < blocks.Length; i++) { if (blocks[i].Contains("<td>")) { subres = CreateNewResult("html!<hr style=\"width: 100%; height: 1px;\">", languagesPair, subject); result.Childs.Add(subres); parser = new StringParser(blocks[i].ToLowerInvariant()); string[] second_line = parser.ReadItemsList("<td>", "</td>", "3495783-4572385"); subres = CreateNewResult(left, languagesPair, subject); result.Childs.Add(subres); subres.Translations.Add(second_line[0]); subres = CreateNewResult(right, languagesPair, subject); result.Childs.Add(subres); subres.Translations.Add(second_line[1]); subres = CreateNewResult("html!<hr style=\"width: 100%; height: 1px;\">", languagesPair, subject); result.Childs.Add(subres); } else { string line = StringParser.Parse("<td colspan=\"2\">", "</td>", blocks[i]); subres = CreateNewResult("", languagesPair, subject); result.Childs.Add(subres); subres.Translations.Add(line); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://rosukrdic.iatp.org.ua/search.php?fullname=%E0%E2%EE%F1%FC WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.rosukrdic.ho.ua/search.php"), networkSetting, WebRequestContentType.UrlEncoded); helper.Encoding = Encoding.GetEncoding(1251); //koi8-u string query = "fullname={0}"; query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase.ToLowerInvariant(), helper.Encoding)); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("</b>відсутнє в словнику.") >= 0 || responseFromServer.IndexOf("</b> відсутнє в словнику.") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("<body>", "</body>", responseFromServer); translation = translation.Replace("</u>", ""); translation = translation.Replace("</span>", ""); translation = translation.Replace("<span class=\"examples_class\">", ""); translation = translation.Replace("<em>", ""); translation = translation.Replace("</em>", ""); translation = translation.Replace("<p>\n", "<p>"); translation = translation.Replace("<p>\r\n", "<p>"); translation = translation.Replace("<h2>", "\n<h2>"); translation = translation.Replace("</p>", "\n</p>"); translation = translation.Replace("<span class='examples_class'>", ""); StringParser phrasesParser = new StringParser(translation); string[] phrases = phrasesParser.ReadItemsList("<h2>", "</h2>", "787654323"); StringParser translationsParser = new StringParser(translation); string[] translations = translationsParser.ReadItemsList("<p", "\n", "787654323"); string subphrase; string subtranslation; Result subres = null; for (int i = 0; i < phrases.Length; i++) { subphrase = phrases[i].Trim(); if (subphrase.EndsWith(".")) { subphrase = subphrase.Substring(0, subphrase.Length - 1); } subtranslation = translations[i].Substring(1).Trim(); subtranslation = subtranslation.Replace("<span class=\"style1\">", ""); subtranslation = subtranslation.Replace("lass=\"style1\">", ""); subtranslation = subtranslation.Replace("</p>", ""); subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subtranslation); result.Childs.Add(subres); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://dict.linux.org.ua/dict/db/table_adv.php?word_str=help&expr=any&A=on&P=on&O=on WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://dict.linux.org.ua/db/table_adv.php"), networkSetting, WebRequestContentType.UrlEncoded); //helper.Encoding = Encoding.GetEncoding(21866); //koi8-u string query = "word={0}&expr=any&A=on&P=on&O=on"; query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase, helper.Encoding)); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("не знайдено<br>") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.EndsWith("Рядок пошуку містить недозволені символи.")) { result.ResultNotFound = true; throw new TranslationException("Query contains extraneous symbols"); } else if (!responseFromServer.Contains("</html>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("<table BORDER WIDTH=", "</table>", responseFromServer); translation = translation.Replace("<B>", ""); translation = translation.Replace("</B>", ""); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</td></tr>", "787654323"); string subpart; string subphrase; string subtranslation; Result subres = null; foreach (string part in translations) { subpart = part; subpart = StringParser.RemoveAll("<td width=\"2%\">", "</td><td width=\"40%\">", subpart); subpart = subpart.Replace("<td></td><td>", ""); if (subpart.StartsWith("<A HREF")) { subphrase = StringParser.Parse("\">", "</A>", subpart); subtranslation = StringParser.Parse("\"40%\">", "</td>", subpart); if (translations.Length == 1 && string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0) { result.Translations.Add(subtranslation); return; } subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subtranslation); result.Childs.Add(subres); } else if (!subpart.StartsWith(" ")) { int idx = subpart.IndexOf("</td>"); if (idx < 0) { subphrase = "Parse Error"; subtranslation = "Parse Error"; } else { subphrase = subpart.Substring(0, idx); subpart = subpart.Substring(idx + 5); subpart = subpart.Replace("<td width=\"40%\">", ""); subtranslation = StringParser.Parse("\">", "</A>", subpart); } if (translations.Length == 1 && string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0) { result.Translations.Add(subtranslation); return; } subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subtranslation); result.Childs.Add(subres); } else { subtranslation = StringParser.Parse("\"40%\">", "</td>", subpart); if (subres != null) { subres.Translations.Add(subtranslation); } } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://www.urduenglishdictionary.org/English-To-Urdu-Translation/test/Page-1.htm string query = "http://www.urduenglishdictionary.org/English-To-Urdu-Translation/{0}/Page-1.htm"; if (languagesPair.From == Language.Urdu) { query = "http://www.urduenglishdictionary.org/Urdu-To-English-Translation/{0}/Page-1.htm"; } query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("</B> could not be found!</h2>") && responseFromServer.Contains("<U>Suggestions:</U><BR><BR><BR><BR><BR><BR></div>") ) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.Contains("</B> could not be found!</h2>") && responseFromServer.Contains("<U>Suggestions:</U><BR><BR><a") ) { //suggestions exists string suggestions = StringParser.Parse("<U>Suggestions:</U><BR><BR>", "</div>", responseFromServer); StringParser parser = new StringParser(suggestions); string[] suggestions_list = parser.ReadItemsList("<a href='", "</a>"); foreach (string str in suggestions_list) { result.Translations.Add("html!<p><a href='http://www.urduenglishdictionary.org" + str + "</a></p>"); } } else { if (responseFromServer.Contains("<tr class='head-row'>")) { result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string translation = StringParser.Parse("<tr class='head-row'>", "</table>", responseFromServer); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr class='data-row'>", "</tr>"); Result subres = null; foreach (string str in translations) { string word = ""; if (str.Contains("align=left valign=top nowrap>")) { word = StringParser.Parse("align=left valign=top nowrap>", "<sup>", str).Trim(); } else { word = StringParser.Parse("<td class='data-cell' align=left valign=top>", "<", StringParser.Parse("<td class='data-cell' align=left valign=top>", "sup>", str)).Trim(); } string abbr = StringParser.Parse("<span class='feature'>", "</span>", str).Trim(); translation = StringParser.Parse("<td class='urdu-cell' align=right valign=top>", "<", str).Trim(); if (translations.Length == 1) { subres = result; } else if (languagesPair.From == Language.Urdu) { subres = CreateNewResult(translation, languagesPair, subject); result.Childs.Add(subres); } else { subres = CreateNewResult(word, languagesPair, subject); result.Childs.Add(subres); } subres.Abbreviation = abbr; if (languagesPair.From == Language.Urdu) { subres.Translations.Add(word); } else { subres.Translations.Add(translation); } } } //more if (responseFromServer.Contains("Page-2.htm")) { query = "http://www.urduenglishdictionary.org/English-To-Urdu-Translation/{0}/Page-2.htm"; if (languagesPair.From == Language.Urdu) { query = "http://www.urduenglishdictionary.org/Urdu-To-English-Translation/{0}/Page-2.htm"; } query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase)); string link = "html!<p><a href=\"{0}\" title=\"{0}\">{1}</a></p>"; link = string.Format(link, query, "More ..."); Result subres = CreateNewResult(link, languagesPair, subject); result.Childs.Add(subres); } if (result.Childs.Count == 0 && result.Translations.Count == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.google.com/dictionary?aq=f&langpair={1}&q={0}&hl=en"; query = string.Format(query, HttpUtility.UrlEncode(phrase, System.Text.Encoding.UTF8), GoogleUtils.ConvertLanguagesPair(languagesPair)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("No dictionary translations were found for: <strong>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } if (responseFromServer.Contains("No dictionary definitions were found for: <strong>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } result.HasAudio = responseFromServer.Contains("<object data=\"/dictionary/flash"); responseFromServer = StringParser.Parse("<div class=\"dct-srch-otr\">", "<div class=\"dct-rt-sct\">", responseFromServer); //pronuncation if (responseFromServer.Contains("<span class=\"dct-tp\">/")) { string pronuncation = StringParser.Parse("<span class=\"dct-tp\">/", "/</span>", responseFromServer); pronuncation = pronuncation.Trim(); result.Abbreviation = pronuncation; } //translations //string translations = StringParser.Parse("<div class=\"dct-srch-rslt\">", "</div>", responseFromServer); string translations = ""; //TODO: additional sences like in "water" - "water down" not supported if (responseFromServer.Contains("<div class=\"sen\">")) { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>\n<div class=\"sen\">", responseFromServer); } else if (responseFromServer.Contains("<h3>Related phrases</h3>")) { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>\n<h3>Related phrases</h3>", responseFromServer); } else if (responseFromServer.Contains("<h3>Web definitions</h3>")) { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>\n<h3>Web definitions</h3>", responseFromServer); } else { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>", responseFromServer); } StringParser parser = null; List <string> subtranslations = new List <string>(); if (translations.Contains("<li class=\"dct-ec\"")) { //"</li>\n</ul>\n</li>" parser = new StringParser(translations); string[] subtranslation_list = parser.ReadItemsList("<li class=\"dct-ec\"", "</li>\n</ul>\n</li>", "3485730457203"); subtranslations.AddRange(subtranslation_list); } else if (translations.Contains("<div style=\"font-weight:bold\">Synonyms:</div>")) { Result synonyms_tr = CreateNewResult("Synonyms", languagesPair, subject); result.Childs.Add(synonyms_tr); string synonyms = StringParser.Parse("<div style=\"font-weight:bold\">Synonyms:</div>", "</div>", translations); parser = new StringParser(synonyms); string[] syn_group_list = parser.ReadItemsList("<li>", "</li>", "3485730457203"); foreach (string syngroup in syn_group_list) { string syn_group_name = StringParser.Parse("title=\"Part-of-speech\">", "</span>", syngroup); Result syn_tr = CreateNewResult(syn_group_name, languagesPair, subject); synonyms_tr.Childs.Add(syn_tr); parser = new StringParser(syngroup); string[] syn_list = parser.ReadItemsList("<a", "</a>", "3485730457203"); foreach (string syn in syn_list) { string synonym = StringParser.ExtractRight(">", syn); syn_tr.Translations.Add(synonym); } } subtranslations.Add(translations); } else { subtranslations.Add(translations); } Result subres_tr = result; Result sub2res_tr = null; Result sub3res_tr = null; string abbr_str; foreach (string subtranslation in subtranslations) { if (subtranslation.Contains("<div class=\"dct-ec\">")) { abbr_str = StringParser.Parse("title=\"Part-of-speech\">", "</span>", subtranslation); subres_tr = CreateNewResult(abbr_str, languagesPair, subject); result.Childs.Add(subres_tr); } parser = new StringParser(subtranslation.Replace("<li class=\"dct-em\"", "<end><begin>") + "<end>"); string[] subsubtranslation_list = parser.ReadItemsList("<begin>", "<end>", "3485730457203"); foreach (string subsubtanslation in subsubtranslation_list) { sub2res_tr = CreateNewResult("", languagesPair, subject); subres_tr.Childs.Add(sub2res_tr); if (subsubtanslation.Contains(">See also</span>")) { sub2res_tr.Translations.Add("See also"); } StringParser parser2 = new StringParser(subsubtanslation.Replace("<span class=\"dct-tt\">", "<end><begin>") + "<end>"); string[] sub3translation_list = parser2.ReadItemsList("<begin>", "<end>", "3485730457203"); foreach (string sub3tanslation in sub3translation_list) { string text_translation = ""; string text_abbr = ""; if (sub3tanslation.Contains("<span")) { text_translation = StringParser.ExtractLeft("<span", sub3tanslation); if (text_translation.Contains("</span")) { text_translation = StringParser.ExtractLeft("</span", text_translation); } text_abbr = StringParser.Parse("<span", "</span", sub3tanslation); text_abbr = StringParser.ExtractRight(">", text_abbr); } else { text_translation = StringParser.ExtractLeft("</span>", sub3tanslation); } text_translation = StringParser.RemoveAll("<", ">", text_translation); if (sub2res_tr.Translations.Count == 0) { sub2res_tr.Translations.Add(text_translation); sub2res_tr.Abbreviation = text_abbr; } else { sub3res_tr = CreateNewResult("", languagesPair, subject); sub3res_tr.Translations.Add(text_translation); //sub3res_tr.Phrase = text_abbr; sub2res_tr.Childs.Add(sub3res_tr); } } } } //related words if (responseFromServer.Contains("<h3>Related phrases</h3>")) { string related = StringParser.Parse("<ul class=\"rlt-snt\">", "</ul>", responseFromServer); if (!string.IsNullOrEmpty(related)) { parser = new StringParser(related); string[] related_list = parser.ReadItemsList("<li>", "</li>"); foreach (string related_s in related_list) { string related_str = related_s.Replace("\n", "").Trim(); string subphrase = StringParser.Parse("<div>", "</div>", related_str); subphrase = StringParser.RemoveAll("<", ">", subphrase); subphrase = subphrase.Replace(" ", " ").Replace("\n", "").Trim(); string subphrasetrans = StringParser.ExtractRight("</div>", related_str); subphrasetrans = StringParser.RemoveAll("<", ">", subphrasetrans); subphrasetrans = subphrasetrans.Replace(" ", " ").Replace("\n", "").Trim(); Result subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subphrasetrans); result.Childs.Add(subres); } } } //Web definitions if (responseFromServer.Contains("<h3>Web definitions</h3>")) { string related = StringParser.ExtractRight("<ul class=\"gls\">", responseFromServer); if (!string.IsNullOrEmpty(related)) { { Result subres_wd = CreateNewResult(phrase, languagesPair, subject); result.Childs.Add(subres_wd); parser = new StringParser(related); string[] related_list = parser.ReadItemsList("<li>", "</li>"); foreach (string related_s in related_list) { string related_str = related_s; related_str = related_str.Replace("<br/>", "").Trim(); related_str = StringParser.RemoveAll("<", ">", related_str); related_str = related_str.Replace(" ", " ").Replace("\n", "").Trim(); subres_wd.Translations.Add(related_str); } } } } }
public static void DoTranslatePhrases(ServiceItem serviceItem, string url, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = string.Format(url, EncodePhrase(phrase, languagesPair)); query += ConvertLanguagesPair(languagesPair); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, GetEncoding(languagesPair)); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; if (languagesPair.From == Language.Japanese || languagesPair.To == Language.Japanese) { helper.StreamConvertor = new EucJPStreamFixer(); } string responseFromServer = helper.GetResponse(); if ((responseFromServer.IndexOf("ask in forum</a>") >= 0 && responseFromServer.IndexOf(" single words found") < 0) || (responseFromServer.IndexOf("спросить в форуме</a>") >= 0 && responseFromServer.IndexOf(" найдены отдельные слова") < 0) || responseFromServer.IndexOf("<table cellspacing=\"0\" border=\"0\" width=\"100%\">") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { string translation = StringParser.Parse("createAutoComplete();", "<script><!--", responseFromServer); translation = translation.Replace("</TD>", "</td>"); translation = translation.Replace("<TD width", "<td width"); translation = translation.Replace("</td><tr>", "</td></tr><tr>"); translation = translation.Replace("</a><tr>", "</a></td></tr><tr>"); translation = translation.Replace("\"><tr>", "\"></td></tr><tr>"); translation = translation.Replace("</tr></td>", "</td></tr>"); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</td></tr>"); string subpart; string subphrase = ""; string subtranslation; string abbreviation; Result subsubres = null; string subres_url; foreach (string part in translations) { if (!part.Contains("<td width=\"5%\">")) { continue; } subpart = part; subphrase = StringParser.Parse("<td width=\"5%\">", "</td>", subpart); subres_url = StringParser.Parse("href=\"", "\"", subphrase); subphrase = StringParser.RemoveAll("<span", ">", subphrase); subphrase = StringParser.RemoveAll("<a", ">", subphrase); subphrase = subphrase.Replace("</a>", ""); subphrase = subphrase.Replace("<i>", ""); subphrase = subphrase.Replace("</i>", ""); subphrase = subphrase.Replace("</span>", ""); subphrase = subphrase.Replace("<sub>", ""); subphrase = subphrase.Replace("</sub>", ""); subphrase = subphrase.Replace("<b>", ""); subphrase = subphrase.Replace("</b>", ""); abbreviation = StringParser.Parse("<i>", "</i>", subpart); subsubres = serviceItem.CreateNewResult(subphrase, languagesPair, subject); subsubres.Abbreviation = abbreviation; subsubres.ArticleUrl = "http://www.multitran.ru/c/" + subres_url; result.Childs.Add(subsubres); subtranslation = subpart + "<end>"; subtranslation = StringParser.Parse("<td width=\"20%\">", "</td>", subtranslation); subtranslation = StringParser.RemoveAll("<span", ">", subtranslation); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = StringParser.RemoveAll("<td", ">", subtranslation); subtranslation = subtranslation.Replace("</td>", " "); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subsubres.Translations.Add(subtranslation); subtranslation = subpart + "<end>"; subtranslation = StringParser.Parse("<td width=\"75%\">", "<end>", subtranslation); subtranslation = StringParser.RemoveAll("<span", ">", subtranslation); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = StringParser.RemoveAll("<td", ">", subtranslation); subtranslation = subtranslation.Replace("</td>", " "); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subsubres.Translations.Add(subtranslation); } } }
public static string[] ParseItemsList(string startTag, string endTag, string data) { StringParser parser = new StringParser(data); return(parser.ReadItemsList(startTag, endTag)); }
public static void DoTranslateSentences(ServiceItem serviceItem, string url, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = string.Format(url, HttpUtility.UrlEncode(phrase, Encoding.GetEncoding(1251))); query += ConvertLanguagesPair(languagesPair); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, Encoding.GetEncoding(1251)); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("</form>") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { result.EditArticleUrl = query; string translation = StringParser.Parse("</form>", "<table", responseFromServer); translation = translation.Replace("<p>", "<end><begin>"); translation += "<end>"; StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<begin>", "<end>"); string subpart; string subphrase = ""; string subtranslation; Result subsubres = null; foreach (string part in translations) { subpart = part; if (subpart.Contains("title=\"")) { subphrase = StringParser.Parse("title=\"", "\"", subpart); } else { subphrase = phrase; } subtranslation = StringParser.RemoveAll("<span", ">", subpart); subtranslation = StringParser.RemoveAll("<a", ">", subtranslation); subtranslation = subtranslation.Replace("</a>", ""); subtranslation = subtranslation.Replace("<i>", ""); subtranslation = subtranslation.Replace("</i>", ""); subtranslation = subtranslation.Replace("</span>", ""); subtranslation = subtranslation.Replace("<sub>", ""); subtranslation = subtranslation.Replace("</sub>", ""); subtranslation = subtranslation.Replace("<b>", ""); subtranslation = subtranslation.Replace("</b>", ""); subtranslation = subtranslation.Replace(">>", ""); subsubres = serviceItem.CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(subsubres); int idx = subtranslation.IndexOf("\n"); if (idx < 0) { subsubres.Translations.Add("Parse error. Can't found '\\n' in " + subtranslation); } else { subsubres.Translations.Add(subtranslation.Substring(0, idx)); subsubres.Translations.Add(subtranslation.Substring(idx + 1).Trim()); } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.pcdigest.net/cgi-bin/u/book/sis.pl?Qry={0}&found=10&action=search"; query = string.Format(query, HttpUtility.UrlEncode(phrase, Encoding.GetEncoding(1251))); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, Encoding.GetEncoding(1251)); string responseFromServer = helper.GetResponse(); responseFromServer = StringParser.Parse("<!-- START CONTENT -->", "<!-- RIGHT SHORT TABLE -->", responseFromServer); responseFromServer = StringParser.Parse("<P align=justify>", "</table>", responseFromServer); responseFromServer = responseFromServer.Replace("<font color=darkgreen>", ""); responseFromServer = responseFromServer.Replace("<font color=red>", ""); responseFromServer = responseFromServer.Replace("</font>", ""); responseFromServer = responseFromServer.Replace("<B>", ""); responseFromServer = responseFromServer.Replace("</B>", ""); responseFromServer = responseFromServer.Replace("<I>", ""); responseFromServer = responseFromServer.Replace("</I>", ""); responseFromServer = responseFromServer.Replace("<i>", ""); responseFromServer = responseFromServer.Replace("</i>", ""); responseFromServer = responseFromServer.Replace("<u>", ""); responseFromServer = responseFromServer.Replace("</u>", ""); StringParser parser = new StringParser(responseFromServer); string[] translations = parser.ReadItemsList("<P align=justify>", "</P>", "3495783-4572385"); if (translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string translation, abrr, data; int idx; foreach (string subtranslation in translations) { idx = subtranslation.IndexOf("("); if (idx < 0) { idx = subtranslation.IndexOf("-"); } translation = subtranslation.Substring(0, idx); if (subtranslation.IndexOf("(") >= 0) { abrr = StringParser.Parse("(", ")", subtranslation); } else { abrr = ""; } idx = subtranslation.IndexOf("-"); if (idx >= 0) { data = subtranslation.Substring(idx + 1); } else { data = ""; } Result subres; if (translations.Length > 1) { subres = CreateNewResult(translation, languagesPair, subject); result.Childs.Add(subres); } else { subres = result; } if (!string.IsNullOrEmpty(abrr)) { subres.Abbreviation = abrr; } if (!string.IsNullOrEmpty(data)) { subres.Translations.Add(data); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://www.urduword.com/search.php?English=test string query = "http://www.urduword.com/search.php?English={0}"; if (languagesPair.From == Language.Urdu) { query = "http://www.urduword.com/search.php?Roman={0}"; } query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("<p>Could not find translation for <b>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { if (responseFromServer.Contains("<table border=\"0\" width=\"100%\" align=\"center\" cellpadding=\"3\" cellspacing=\"0\" >")) { result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string translation = StringParser.Parse("<table border=\"0\" width=\"100%\" align=\"center\" cellpadding=\"3\" cellspacing=\"0\" >", "</table>", responseFromServer); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr>", "</tr>"); Result subres = null; foreach (string str in translations) { if (str.Contains("class=\"tablehead\"")) { continue; } string word = StringParser.Parse(">", "<", StringParser.Parse("<a", "/a>", str)); translation = StringParser.Parse("align=\"center\">", "<", str); if (languagesPair.From == Language.Urdu) { if (subres == null || subres.Phrase != translation) { subres = CreateNewResult(translation, languagesPair, subject); result.Childs.Add(subres); } } else { if (subres == null || subres.Phrase != word) { subres = CreateNewResult(word, languagesPair, subject); result.Childs.Add(subres); } } if (languagesPair.From == Language.Urdu) { subres.Translations.Add(word); } else { subres.Translations.Add(translation); } } } //more if (responseFromServer.Contains("page=2\">Next")) { query = "http://www.urduword.com/search.php?English={0}&page=2"; if (languagesPair.From == Language.Urdu) { query = "http://www.urduword.com/search.php?Roman={0}&page=2"; } query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase)); string link = "html!<p><a href=\"{0}\" title=\"{0}\">{1}</a></p>"; link = string.Format(link, query, "More ..."); Result subres = CreateNewResult(link, languagesPair, subject); result.Childs.Add(subres); } if (result.Childs.Count == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } }
static void SetResult(Result result, string data) { string firstInfo = ""; string cat = "<font class=\"categoria\">"; string translation; int idx = data.IndexOf(cat); if (idx >= 0) { firstInfo = data.Substring(0, idx); firstInfo = StringParser.RemoveAll("<", ">", firstInfo); firstInfo = firstInfo.Replace("\r\n", ""); firstInfo = firstInfo.Replace("\n", ""); firstInfo = firstInfo.Replace("<", "<"); result.Translations.Add(firstInfo); translation = data.Substring(idx + cat.Length); } else { cat = "<div style=\"padding-left:20px; line-height:16px;\">"; idx = data.IndexOf(cat); if (idx < 0) { throw new TranslationException("Can't found start tag : " + cat + " in string : " + data); } firstInfo = data.Substring(0, idx); firstInfo = StringParser.RemoveAll("<", ">", firstInfo); firstInfo = firstInfo.Replace("\r\n", ""); firstInfo = firstInfo.Replace("\n", ""); firstInfo = firstInfo.Replace("<", "<"); result.Translations.Add(firstInfo); translation = data.Substring(idx); cat = "<font class=\"categoria\">"; } translation = translation.Replace("<font class=\"propriedade\">", cat); translation = "<begin>" + translation.Replace(cat, "<end><begin>") + "<end>"; StringParser parser = new StringParser(translation); string[] blocks = parser.ReadItemsList("<begin>", "<end>"); cat = "<div style=\"padding-left:20px; line-height:16px;\">"; foreach (string block in blocks) { Result child = new Result(result.ServiceItem, "", result.LanguagePair, result.Subject); result.Childs.Add(child); idx = block.IndexOf(cat); if (idx >= 0) { firstInfo = block.Substring(0, idx); firstInfo = StringParser.RemoveAll("<", ">", firstInfo); firstInfo = firstInfo.Replace("\r\n", ""); firstInfo = firstInfo.Replace("\n", ""); firstInfo = firstInfo.Replace("<", "<"); child.Abbreviation = firstInfo; parser = new StringParser(block); string[] translations = parser.ReadItemsList(cat, "</div>"); foreach (string subtrans in translations) { child.Translations.Add(StringParser.RemoveAll("<", ">", subtrans)); } } } }
void InternalDoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting, string post_data) { WebRequestHelper helper = null; if (string.IsNullOrEmpty(post_data)) { string query = "http://www.merriam-webster.com/dictionary/{0}"; query = string.Format(query, HttpUtility.UrlEncode(phrase)); result.ArticleUrl = query; helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); //helper.UseGoogleCache = true; } else { helper = new WebRequestHelper(result, new Uri("http://www.merriam-webster.com/dictionary"), networkSetting, WebRequestContentType.UrlEncoded); helper.AddPostData(post_data); } string responseFromServer = helper.GetResponse(); helper = null; if (responseFromServer.IndexOf("The word you've entered isn't in the dictionary.") >= 0) { if (responseFromServer.IndexOf("<PRE>") < 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { //get suggestions StringParser parser = new StringParser("<PRE>", "</PRE>", responseFromServer); string[] items = parser.ReadItemsList("\">", "<", "345873409587"); foreach (string item in items) { string part = item; string link = "html!<p><a href=\"http://www.merriam-webster.com/dictionary/{0}\" title=\"http://www.merriam-webster.com/dictionary/{0}\">{0}</a></p>"; link = string.Format(link, part); result.Translations.Add(link); } return; } } if (!(responseFromServer.Contains("One entry found.\n<br/>") || responseFromServer.Contains("One entry found.\n<br />"))) { if (string.IsNullOrEmpty(post_data) && responseFromServer.Contains("'list' value=\"va:")) { string count_str = StringParser.Parse("'list' value=\"va:", ",", responseFromServer); int count; if (int.TryParse(count_str, out count)) { result.MoreEntriesCount = count; } } StringParser parser = new StringParser("<ol class=\"results\"", "</ol>", responseFromServer); string[] items = parser.ReadItemsList("href=\"/dictionary/", "</a>"); foreach (string item in items) { string part = StringParser.ExtractLeft("\">", item); string name = StringParser.ExtractRight("\">", item); name = StringParser.RemoveAll("<sup>", "</sup>", name); string link = "html!<p><a href=\"http://www.merriam-webster.com/dictionary/{0}\" title=\"http://www.merriam-webster.com/dictionary/{0}\">{1}</a></p>"; link = string.Format(link, part, name); result.Translations.Add(link); } if (result.Translations.Count < 50 && responseFromServer.IndexOf("name='incr'") > 0) { //we has more items //incr=Next+5&jump=dragon%27s+blood&book=Dictionary&quer=blood&list=45%2C31%2C3602592%2C0%3Bdragon%27s+blood%3D2000318535%3Bflesh+and+blood%3D2000400359%3Bfull-blood%5B1%2Cadjective%5D%3D2000425490%3Bfull-blood%5B2%2Cnoun%5D%3D2000425517%3Bhalf-blood%3D2000475964%3Bhalf+blood%3D2000475978%3Bhigh+blood+pressure%3D2000498596%3Blow+blood+pressure%3D2000629024%3Bnew+blood%3D2000712110%3Bpure-blooded%3D2000860991 string incr_value = StringParser.Parse("<input type='submit' value='", "'", responseFromServer); string quer_value = StringParser.Parse("<input type='hidden' name='quer' value=\"", "\"", responseFromServer); string list_value = StringParser.Parse("<input type='hidden' name='list' value=\"", "\"", responseFromServer); string post_data_value = "incr={0}&jump={1}&book=Dictionary&quer={2}&list={3}"; post_data_value = string.Format(post_data_value, incr_value, HttpUtility.UrlEncode(items[0]), HttpUtility.UrlEncode(quer_value), HttpUtility.UrlEncode(list_value) ); //some cleaning responseFromServer = null; InternalDoTranslate(phrase, languagesPair, subject, result, networkSetting, post_data_value); } if (result.MoreEntriesCount != 0 && string.IsNullOrEmpty(post_data)) { result.MoreEntriesCount -= result.Translations.Count; } } else if (responseFromServer.Contains("<span class=\"variant\">")) { string part = StringParser.Parse("<span class=\"variant\">", "</span>", responseFromServer); string link = "html!<p><a href=\"http://www.merriam-webster.com/dictionary/{0}\" title=\"http://www.merriam-webster.com/dictionary/{0}\">{0}</a></p>"; link = string.Format(link, part); result.Translations.Add(link); } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.slovnenya.com/dictionary/{0}"; query = string.Format(query, HttpUtility.UrlEncode(phrase).Replace("+", "%20")); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); helper.AcceptLanguage = "en-us,en"; string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("did not return any results</div>") || responseFromServer.Contains("</span>` did not return any results")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.IndexOf("Query contains extraneous symbol(s)<") >= 0) { throw new TranslationException("Query contains extraneous symbols"); } else { result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string translation = StringParser.Parse("<hr style=\"border:0;background-color:grey;height:1px;width:92%;text-align:center\" />", "<hr style=\"border:0;background-color:grey;height:1px;width:92%;text-align:center\" />", responseFromServer); StringsTree tree = StringParser.ParseTreeStructure("<table", "</table>", translation); if (tree.Childs.Count != 1) { throw new TranslationException("Wrong data structure"); } tree = tree.Childs[0]; if (tree.Childs.Count != 1) { throw new TranslationException("Wrong data structure"); } tree = tree.Childs[0]; Result wordres = result; if (tree.Childs.Count == 0) { throw new TranslationException("Wrong data structure"); } //get word if (tree.Childs[0].Childs.Count != 1) { throw new TranslationException("Wrong data structure"); } string word = StringParser.Parse("font-size:14pt\">", "<", tree.Childs[0].Childs[0].Data); for (int i = 1; i < tree.Childs.Count; i++) { StringsTree abbr_tree = tree.Childs[i]; Result abbrres = null; string abbr = StringParser.Parse("font-size:12pt\">", "<", abbr_tree.Data); Result tmpRes = CreateNewResult(abbr, languagesPair, subject); wordres.Childs.Add(tmpRes); abbrres = tmpRes; StringParser parser = new StringParser(abbr_tree.Childs[0].Data); string[] translations = parser.ReadItemsList("font-size:12pt\">", "<"); foreach (string trans in translations) { abbrres.Translations.Add(trans); } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://intertran.tranexp.com/Translate/result.shtml"), networkSetting, WebRequestContentType.UrlEncoded); helper.Encoding = GetEncoding(languagesPair.From, languagesPair.To); //Encoding.GetEncoding(GetEncoding(languagesPair.To)); string query = "Submit.x=56&Submit.y=10&from={0}&keyb=non&text={1}&to={2}&translation="; query = string.Format(CultureInfo.InvariantCulture, query, ConvertLanguage(languagesPair.From), HttpUtility.UrlEncode(phrase, Encoding.GetEncoding(GetEncoding(languagesPair.From))), ConvertLanguage(languagesPair.To) ); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); if (string.IsNullOrEmpty(responseFromServer)) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.Contains("there was no translation for your original query.</center>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.Contains("name=\"translation\">An error occurred during translation. Please try again later.</textarea>")) { //result.ResultNotFound = true; throw new TranslationException("An error occurred during translation. Please try again later."); } else if (responseFromServer.Contains("<center>Warning:<br> Could not open")) { //result.ResultNotFound = true; throw new TranslationException("An error occurred during translation. Please try again later."); } else if (responseFromServer.Contains("<center>Warning:</strong><br> Could not open")) { //result.ResultNotFound = true; throw new TranslationException("An error occurred during translation. Please try again later."); } else { string translation = StringParser.Parse("<INPUT TYPE=\"hidden\" NAME=\"alltrans\" VALUE=\"", "\">", responseFromServer).Trim(); if (string.IsNullOrEmpty(translation)) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string subphrase; bool firstRun = true; Result subres = result; StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("{{", "}}"); foreach (string subtranslation in translations) { string subtrans = "|" + subtranslation + "|"; parser = new StringParser(subtrans); string[] subtranslations = parser.ReadItemsList("|", "|"); if (subtranslations.Length > 1) { subphrase = subtranslations[0]; if (firstRun && translation.Length == 1 && string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0) { for (int i = 1; i < subtranslations.Length; i++) { result.Translations.Add(subtranslations[i]); } return; } firstRun = false; subres = CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(subres); for (int i = 1; i < subtranslations.Length; i++) { subres.Translations.Add(subtranslations[i]); } } } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //http://slovnik.tiscali.cz/index.php?od=0&slovnik=dict_ac&dotaz=test string query = "http://slovnik.tiscali.cz/index.php?od=0&slovnik={0}&dotaz={1}"; query = string.Format(CultureInfo.InvariantCulture, query, ConvertLanguagesPair(languagesPair), HttpUtility.UrlEncode(phrase)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("<strong>Zadané slovo nebylo nalezeno !!!</strong>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { if (responseFromServer.Contains("<div class=\"vysledek\">")) { result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string translation = StringParser.Parse("<div class=\"vysledek\">", "</div>", responseFromServer); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<a", "<br />"); Result subres = null; foreach (string str in translations) { string word = StringParser.Parse("<strong>", "</strong>", str); string subtranslation = StringParser.Parse(">", "<", StringParser.Parse("<a", "/a>", str)); if (subres == null || subres.Phrase != word) { subres = CreateNewResult(word, languagesPair, subject); result.Childs.Add(subres); } subres.Translations.Add(subtranslation); } } //more if (responseFromServer.Contains("<strong>Další >></strong>")) { query = "http://slovnik.tiscali.cz/index.php?od=24&slovnik={0}&dotaz={1}"; query = string.Format(CultureInfo.InvariantCulture, query, ConvertLanguagesPair(languagesPair), HttpUtility.UrlEncode(phrase)); string link = "html!<p><a href=\"{0}\" title=\"{0}\">{1}</a></p>"; link = string.Format(link, query, "More phrases ..."); Result subres = CreateNewResult(link, languagesPair, subject); result.Childs.Add(subres); } if (result.Childs.Count == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { //query = string.Format(query, HttpUtility.UrlEncode(phrase, Encoding.GetEncoding(1251))); WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://r2u.org.ua/krym/krym_search.php"), networkSetting, WebRequestContentType.UrlEncoded); string query = "word_str={0}&type={1}"; //types //"all" - all words //"rusb" - general rus words //"rus" - all rus words //"ukr" - ukr words without quotations //"ukrq" - all ukr words if (languagesPair.From == Language.Russian) { query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase), "rus"); } else { query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase), "ukrq"); } helper.AddPostData(query); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("нічого не знайдено!</h3>") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else if (responseFromServer.IndexOf("Запит сприймає лише кирилицю") >= 0 || responseFromServer.Contains("<br>Помилка: неправильні символи в запиті")) { result.ResultNotFound = true; throw new TranslationException("Only cyrillic characters supported"); } else if (responseFromServer.IndexOf("українські літери в запиті по російських позиціях") >= 0) { result.ResultNotFound = true; throw new TranslationException("Ukrainian characters in russian query"); } else if (responseFromServer.IndexOf("нічого не знайдено!</h4>") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { result.ArticleUrl = "http://r2u.org.ua/krym/krym_search.php?" + query; result.ArticleUrlCaption = phrase; string translation = StringParser.Parse("<table class=\"main_tbl\">", "</table>", responseFromServer); translation = translation.Replace("</span>", ""); translation = translation.Replace("<span class=\"KrymUkr\">", ""); translation = translation.Replace("<span class=\"KrymRusBold\">", ""); translation = translation.Replace("<span class=\"KrymRusItalic\">", ""); translation = translation.Replace("<span class=\"KrymRusItalic\">", ""); translation = translation.Replace("<span class=\"KrymUkAux\">", ""); translation = translation.Replace("<span class=\"KrymLat\">", ""); translation = StringParser.RemoveAll("<a href=\"?word_str=", "\">", translation); translation = StringParser.RemoveAll("<b title=\"", "</a></b>", translation); translation = translation.Replace("</a>", ""); translation = translation.Replace("<u class=\"quote\">", ""); translation = translation.Replace("</u>", ""); translation = translation.Replace("<span class=\"num\">", ""); StringParser parser = new StringParser(translation); string[] translations = parser.ReadItemsList("<tr><td class=\"result_row", "</td></tr>", "787654323"); int idx = 0; string subpart; string subphrase; foreach (string part in translations) { subpart = part; if (subpart.StartsWith("\">")) { subpart = subpart.Substring(2); } else { subpart = subpart.Substring(8); } int idxOfMinus = subpart.IndexOf("–"); if (idxOfMinus > 0) { subphrase = subpart.Substring(0, idxOfMinus).Trim(); subpart = subpart.Substring(idxOfMinus + 1).Trim(); } else { subphrase = subpart; subpart = ""; } if (idx == 0 && string.Compare(subphrase, phrase, true, CultureInfo.InvariantCulture) == 0 && translations.Length == 1) { //single answer result.Translations.Add(subpart); return; } Result subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subpart); result.Childs.Add(subres); idx++; } } }
void TranslateWord(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { lock (sederetCode) { if (string.IsNullOrEmpty(sederetCode) || coockieTime < DateTime.Now.AddHours(-1)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.sederet.com/translate.php"), networkSetting, WebRequestContentType.UrlEncodedGet, encoding); helpertop.CookieContainer = cookieContainer; coockieTime = DateTime.Now; string responseFromServertop = helpertop.GetResponse(); sederetCode = StringParser.Parse("<input type=\"hidden\" name=\"var\" value=\"", "\"", responseFromServertop); } } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.sederet.com/translate.php"), networkSetting, WebRequestContentType.UrlEncoded, encoding); helper.CookieContainer = cookieContainer; //eng2indo, indo2eng string query = "from_to={0}&kata={1}&var={2}"; if (languagesPair.From == Language.Indonesian) { query = string.Format(CultureInfo.InvariantCulture, query, "indo2eng", HttpUtility.UrlEncode(phrase), sederetCode); } else { query = string.Format(CultureInfo.InvariantCulture, query, "eng2indo", HttpUtility.UrlEncode(phrase), sederetCode); } helper.AddPostData(query); string responseFromServer = helper.GetResponse(); lock (sederetCode) { sederetCode = StringParser.Parse("<input type=\"hidden\" name=\"var\" value=\"", "\"", responseFromServer); } string translation = StringParser.Parse("<span id=\"result_title\"", "id=\"part_right\">", responseFromServer); Result child; StringParser subparser; if (translation.Contains("<b id=\"match_title\">Exact Match:</b>")) { child = CreateNewResult(phrase, languagesPair, subject); result.Childs.Add(child); string subblock = StringParser.Parse("<b id=\"match_title\">Exact Match:</b>", "</table>", translation); subparser = new StringParser(subblock); string[] subtranslation_list = subparser.ReadItemsList("<td id='result_td'>", "</td>"); for (int i = 0; i < subtranslation_list.Length; i += 2) { string subtranslation = subtranslation_list[i + 1]; subtranslation = StringParser.RemoveAll("<", ">", subtranslation); child.Translations.Add(HttpUtility.HtmlDecode(subtranslation)); } } if (translation.Contains("<b id=\"match_title\">Other Match(es):</b>")) { string subblock = StringParser.Parse("<b id=\"match_title\">Other Match(es):</b>", "</table>", translation); subparser = new StringParser(subblock); string[] subtranslation_list = subparser.ReadItemsList("<td id='result_td'>", "</td>"); for (int i = 0; i < subtranslation_list.Length; i += 2) { string subphrase = subtranslation_list[i]; subphrase = StringParser.RemoveAll("<", ">", subphrase); child = CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(child); string subtranslation = subtranslation_list[i + 1]; subtranslation = StringParser.RemoveAll("<", ">", subtranslation); child.Translations.Add(HttpUtility.HtmlDecode(subtranslation)); } } result.ResultNotFound = result.Childs.Count == 0; }
public static void DoTranslate(ServiceItem serviceItem, string host, string bookName, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = host + "/{0}"; //ISO-8859-1 query = string.Format(query, HttpUtility.UrlEncode(phrase, System.Text.Encoding.UTF8)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); //helper.UseGoogleCache = true; string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("The word you've entered isn't in the dictionary.") >= 0 || responseFromServer.IndexOf("No entries found.\n<br/>") >= 0 || responseFromServer.IndexOf("The word you've entered isn't in the thesaurus.") >= 0 ) { if (responseFromServer.IndexOf("<PRE>") >= 0) { //suggestions StringParser suggestions_parser = new StringParser("<PRE>", "</PRE>", responseFromServer); string[] suggestions = suggestions_parser.ReadItemsList(">", "</a>"); foreach (string item in suggestions) { string part = item; string link = "html!<p><a href=\"" + host + "/{0}\" title=\"" + host + "/{0}\">{0}</a></p>"; link = string.Format(link, part); result.Translations.Add(link); } return; } else { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } result.ArticleUrl = host + "/" + phrase; if (responseFromServer.Contains("One entry found.\n<br/>") || responseFromServer.Contains("One entry found.\n<br />")) { SetResult(result, responseFromServer, host + "/"); } else { if (responseFromServer.Contains("'list' value=\"va:")) { string count_str = StringParser.Parse("'list' value=\"va:", ",", responseFromServer); int count; if (int.TryParse(count_str, out count)) { result.MoreEntriesCount = count; } } StringParser parser = new StringParser("<ol class=\"results\"", "</ol>", responseFromServer); string[] items = parser.ReadItemsList("href=\"/" + bookName.ToLower() + "/", "\""); bool first = true; foreach (string item in items) { string part = item; string part_name = StringParser.RemoveAll("[", "]", part); if (string.Compare(part_name, phrase, true) == 0) { Result subres = serviceItem.CreateNewResult(part_name, languagesPair, subject); result.Childs.Add(subres); subres.ArticleUrl = host + "/" + part; if (first) { SetResult(subres, responseFromServer, host + "/"); first = false; } else { //get translation //jump=blood%5B1%2Cnoun%5D&book=Dictionary&quer=blood&list=45%2C1%2C3602592%2C0%3Bblood%5B1%2Cnoun%5D%3D113554%3Bblood%5B2%2Ctransitive+verb%5D%3D113572%3BABO+blood+group%3D2000002431%3Bbad+blood%3D2000074812%3Bblood-and-guts%3D2000113598%3Bblood-brain+barrier%3D2000113627%3Bblood+brother%3D2000113664%3Bblood+cell%3D2000113685%3Bblood+count%3D2000113697%3Bblood+doping%3D2000113725 /*string quer_value = StringParser.Parse("<input type='hidden' name='quer' value=\"", "\"", responseFromServer); * string list_value = StringParser.Parse("<input type='hidden' name='list' value=\"", "\"", responseFromServer); * string post_data_value = "jump={0}&book=" + bookName + "&quer={1}&list={2}"; * post_data_value = string.Format(post_data_value , * HttpUtility.UrlEncode(part), * HttpUtility.UrlEncode(quer_value), * HttpUtility.UrlEncode(list_value) * ); */ helper = new WebRequestHelper(result, new Uri(subres.ArticleUrl), networkSetting, WebRequestContentType.UrlEncodedGet); //helper.AddPostData(post_data_value); //helper.UseGoogleCache = true; responseFromServer = helper.GetResponse(); SetResult(subres, responseFromServer, host + "/"); } } } if (result.MoreEntriesCount != 0) { result.MoreEntriesCount -= result.Childs.Count; } } }