protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.systranet.com/tt?gui=www.systran.co.uk;/snetcom/text/ts&lp={0}&MAX_TRANSLATED_WORDS=500&service=translate"; query = string.Format(query, ConvertLanguagesPair(languagesPair)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncoded); helper.AddPostData(phrase); string responseFromServer = helper.GetResponse(); string status = responseFromServer.Substring(6); result.Translations.Add(status); /* * if(status != "2") * { * throw new TranslationException(responseFromServer.Substring(10)); * } * else * { if(responseFromServer.Substring(17) == "Translation direction is not correct") * throw new TranslationException("Translation direction is not correct"); * result.Translations.Add(responseFromServer.Substring(17)); * } */ }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://babelfish.yahoo.com/translate_txt"), networkSetting, WebRequestContentType.UrlEncoded); helper.AcceptCharset = "utf-8"; //query //ei=UTF-8&doit=done&fr=bf-res&intl=1&tt=urltext&trtext=test+it&lp=en_ru&btnTrTxt=Translate string langpair = ConvertTranslatorLanguagesPair(languagesPair); string query = "ei=UTF-8&doit=done&fr=bf-res&intl=1&tt=urltext&trtext=" + HttpUtility.UrlEncode(phrase, System.Text.Encoding.UTF8) + "&lp=" + langpair + "&btnTrTxt=Translate"; helper.AddPostData(query); string responseFromServer = helper.GetResponse(); result.Translations.Add(StringParser.Parse("<div style=\"padding:0.6em;\">", "</div>", responseFromServer)); }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { lock (viewState) { if (string.IsNullOrEmpty(viewState) || coockieTime < DateTime.Now.AddMinutes(-30)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.microsofttranslator.com/Default.aspx"), networkSetting, WebRequestContentType.UrlEncodedGet); helpertop.CookieContainer = cookieContainer; string responseFromServertop = helpertop.GetResponse(); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServertop); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServertop); coockieTime = DateTime.Now; } } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.microsofttranslator.com/Default.aspx"), networkSetting, WebRequestContentType.UrlEncoded); //query lock (viewState) { string query = "__VIEWSTATE={0}&__EVENTVALIDATION={1}&InputTextVal={2}&InputTextInit=&BrowserLanguagePreference=ru&MaxInputChars=15000&LangPair_FromDDL_svid={3}&LangPair_FromDDL_textid=&LangPair_ToDDL_svid={4}&LangPair_ToDDL_textid=&LangPair%24FromLangLAD=&BtnTransText=%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%B5%D1%81%D1%82%D0%B8&LiveTranslationPostURL=http%3A%2F%2Flivetranslation.com%2Faff%2Fpartner.aspx&LiveTranslationPartnerID=500&LiveTranslationLanguagePairs="; query = string.Format(query, HttpUtility.UrlEncode(viewState), HttpUtility.UrlEncode(eventValidation), HttpUtility.UrlEncode(phrase), ConvertLanguage(languagesPair.From), ConvertLanguage(languagesPair.To) ); helper.AddPostData(query); cookieContainer.Add(new Uri("http://www.microsofttranslator.com"), new Cookie("from", ConvertLanguage(languagesPair.From))); cookieContainer.Add(new Uri("http://www.microsofttranslator.com"), new Cookie("to", ConvertLanguage(languagesPair.To))); helper.CookieContainer = cookieContainer; } string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("<textarea name=\"OutputText\"", "</textarea>", responseFromServer); translation = StringParser.ExtractRight(">", translation); result.Translations.Add(translation); lock (viewState) { viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServer); } }
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=28"), 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=28"), networkSetting, WebRequestContentType.UrlEncoded, Encoding.GetEncoding(1251)); //query string langDirection = "RU"; if (languagesPair.From == Language.Ukrainian) { langDirection = "UR"; } //templ=%CD%E5%F2+%EF%E5%F0%E5%E2%EE%E4%E0& //__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&_ctl1%3Asource={1} //&_ctl1%3Alng={2}&_ctl1%3AButton1=%CF%E5%F0%E5%E2%E5%F1%F2%E8& //_ctl1%3Aathbox=&_ctl1%3Amailbox=&_ctl1%3Aerr_f=&_ctl1%3Aadd_txt=& //_ctl1%3Acb_forum=on&LanguageH=RUS&__EVENTVALIDATION={3} string query = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&_ctl1%3Asource={1}&_ctl1%3Alng={2}&_ctl1%3AButton1=%CF%E5%F0%E5%E2%E5%F1%F2%E8&_ctl1%3Aathbox=&_ctl1%3Amailbox=&_ctl1%3Aerr_f=&_ctl1%3Aadd_txt=&_ctl1%3Acb_forum=on&LanguageH=RUS&__EVENTVALIDATION={3}"; query = string.Format(query, HttpUtility.UrlEncode(viewState, helper.Encoding), HttpUtility.UrlEncode(phrase, helper.Encoding), langDirection, HttpUtility.UrlEncode(eventValidation, helper.Encoding)); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("onclickk=\"shword();\">", "</DIV>", responseFromServer); translation = translation.Replace("<font color=red>", ""); translation = translation.Replace("</font>", ""); result.Translations.Add(translation); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServer); }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { lock (viewState) { if (string.IsNullOrEmpty(viewState)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.online-translator.com/Default.aspx/Text"), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServertop = helpertop.GetResponse(); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServertop); prevPage = StringParser.Parse("id=\"__PREVIOUSPAGE\" value=\"", "\"", responseFromServertop); } } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.online-translator.com/Default.aspx/Text"), networkSetting, WebRequestContentType.UrlEncoded); //query lock (viewState) { //string query = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&ctl00%24SiteContent%24ucTextTranslator%24tbFromAddr=&ctl00%24SiteContent%24ucTextTranslator%24tbToAddr=&ctl00%24SiteContent%24ucTextTranslator%24tbCCAddr=&ctl00%24SiteContent%24ucTextTranslator%24tbSubject=&ctl00%24SiteContent%24ucTextTranslator%24tbBody=&ctl00%24SiteContent%24ucTextTranslator%24templates={1}&ctl00%24SiteContent%24ucTextTranslator%24checkShowVariants=on&ctl00%24SiteContent%24ucTextTranslator%24dlTemplates=General&ctl00%24SiteContent%24ucTextTranslator%24sourceText={2}&resultText=&ctl00%24SiteContent%24ucTextTranslator%24dlDirections={3}&ctl00%24SiteContent%24ucTextTranslator%24bTranslate=Translate&ctl00%24tbEmail=&ctl00%24tbName=&ctl00%24tbComment=&ctl00%24pollDiv%24tbSiteLang=en"; string query = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&ctl00%24SiteContent%24MA_trasnlform%24selected_tab=text&chLangs=true&ctl00%24SiteContent%24MA_trasnlform%24rblTemplates=General&ctl00%24SiteContent%24MA_trasnlform%24otherTemplatesInput={1}&ctl00%24SiteContent%24MA_trasnlform%24sourceText={2}&ctl00%24SiteContent%24MA_trasnlform%24sLang={3}&ctl00%24SiteContent%24MA_trasnlform%24rLang={4}&ctl00%24SiteContent%24MA_trasnlform%24bTranslate=Translate&ctl00%24SiteContent%24MA_trasnlform%24changedFieldToAddr=&ctl00%24SiteContent%24MA_trasnlform%24hiddenDir=&ctl00%24SiteContent%24MA_trasnlform%24hiddenTranid=&ctl00%24changedField=&__PREVIOUSPAGE={5}"; query = string.Format(query, HttpUtility.UrlEncode(viewState), PromtUtils.GetSubject(subject), HttpUtility.UrlEncode(phrase), PromtUtils.ConvertLanguage(languagesPair.From), PromtUtils.ConvertLanguage(languagesPair.To), prevPage); helper.AddPostData(query); } string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("class=\"send_win\">", "</textarea>", responseFromServer); result.Translations.Add(translation); lock (viewState) { viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); prevPage = StringParser.Parse("id=\"__PREVIOUSPAGE\" value=\"", "\"", responseFromServer); } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.trident.com.ua/translation_online/"), networkSetting, WebRequestContentType.UrlEncoded); //query //?SrcTxt=test&Subject=**&LangFrom=Detect&LangTo=Rus&Translate=++Translate+++&DstTxt=&DlgLang=english string lang_to = ConvertLanguage(languagesPair.To); string lang_from = ConvertLanguage(languagesPair.From); string query = "SrcTxt={2}&Subject={1}&LangFrom={3}&LangTo={0}&Translate=++Translate+++&DstTxt=&DlgLang=english"; query = string.Format(CultureInfo.InvariantCulture, query, lang_to, GetSubject(subject), HttpUtility.UrlEncode(phrase, helper.Encoding), lang_from); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("<textarea rows=\"7\" cols=\"50\" name=\"DstTxt\"", "</textarea>", responseFromServer); translation = StringParser.ExtractRight(">", translation).Trim(); if (!String.IsNullOrEmpty(translation)) { result.Translations.Add(translation); } else { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } }
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) { lock(cookieContainer) { if(coockieTime < DateTime.Now.AddHours(-1)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://translate.meta.ua/"), networkSetting, WebRequestContentType.UrlEncodedGet); helpertop.CookieContainer = cookieContainer; string responseFromServertop = helpertop.GetResponse(); coockieTime = DateTime.Now; } } string lang_from = ConvertLanguage(languagesPair.From); string lang_to = ConvertLanguage(languagesPair.To); string responseFromServer = null; lock(cookieContainer) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://translate.meta.ua/ajax/?sn=save_source"), networkSetting, WebRequestContentType.UrlEncoded); helper.CookieContainer = cookieContainer; //query //text_source=проверка&lang_to=ua&lang_from=ru&dict=** StringBuilder queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("text_source={0}&", phrase); queryBuilder.AppendFormat("lang_to={0}&lang_from={1}&", lang_to, lang_from); queryBuilder.AppendFormat("dict=", GetSubject(subject)); string query = queryBuilder.ToString(); helper.AddPostData(query); responseFromServer = helper.GetResponse(); coockieTime = DateTime.Now; } if(!String.IsNullOrEmpty(responseFromServer)) { //{"r":true,"pc":1,"ui":"4c1ea0e46198f"} string code = StringParser.Parse("ui\":\"", "\"}", responseFromServer); //http://translate.meta.ua/ajax/?sn=get_translate&translate_uniqid=4c1ea0e46198f&lang_to=ua&lang_from=ru&translate_part=0 string query = "http://translate.meta.ua/ajax/?sn=get_translate&translate_uniqid={0}&lang_to={1}&lang_from={2}&translate_part=0"; string url = String.Format(query,code, lang_to, lang_from); lock(cookieContainer) { WebRequestHelper helper = new WebRequestHelper(result, new Uri(url), networkSetting, WebRequestContentType.UrlEncodedGet); helper.CookieContainer = cookieContainer; responseFromServer = helper.GetResponse(); coockieTime = DateTime.Now; } if(!String.IsNullOrEmpty(responseFromServer)) { //{"source":"\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430","translate":" \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430","translate_part":"0","type":"p","index":0,"r":true} string translation = StringParser.Parse("translate\":\"", "\"", responseFromServer); result.Translations.Add(HttpUtilityEx.HtmlDecode(translation)); } else throw new TranslationException("Nothing returned from call to " + url); } else throw new TranslationException("Nothing returned from call to http://translate.meta.ua/ajax/?sn=save_source"); }
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) { lock (cookieContainer) { if (coockieTime < DateTime.Now.AddHours(-1)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://translate.meta.ua/"), networkSetting, WebRequestContentType.UrlEncodedGet); helpertop.CookieContainer = cookieContainer; string responseFromServertop = helpertop.GetResponse(); coockieTime = DateTime.Now; } } string lang_from = ConvertLanguage(languagesPair.From); string lang_to = ConvertLanguage(languagesPair.To); string responseFromServer = null; lock (cookieContainer) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://translate.meta.ua/ajax/?sn=save_source"), networkSetting, WebRequestContentType.UrlEncoded); helper.CookieContainer = cookieContainer; //query //text_source=проверка&lang_to=ua&lang_from=ru&dict=** StringBuilder queryBuilder = new StringBuilder(); queryBuilder.AppendFormat("text_source={0}&", phrase); queryBuilder.AppendFormat("lang_to={0}&lang_from={1}&", lang_to, lang_from); queryBuilder.AppendFormat("dict=", GetSubject(subject)); string query = queryBuilder.ToString(); helper.AddPostData(query); responseFromServer = helper.GetResponse(); coockieTime = DateTime.Now; } if (!String.IsNullOrEmpty(responseFromServer)) { //{"r":true,"pc":1,"ui":"4c1ea0e46198f"} string code = StringParser.Parse("ui\":\"", "\"}", responseFromServer); //http://translate.meta.ua/ajax/?sn=get_translate&translate_uniqid=4c1ea0e46198f&lang_to=ua&lang_from=ru&translate_part=0 string query = "http://translate.meta.ua/ajax/?sn=get_translate&translate_uniqid={0}&lang_to={1}&lang_from={2}&translate_part=0"; string url = String.Format(query, code, lang_to, lang_from); lock (cookieContainer) { WebRequestHelper helper = new WebRequestHelper(result, new Uri(url), networkSetting, WebRequestContentType.UrlEncodedGet); helper.CookieContainer = cookieContainer; responseFromServer = helper.GetResponse(); coockieTime = DateTime.Now; } if (!String.IsNullOrEmpty(responseFromServer)) { //{"source":"\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430","translate":" \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430","translate_part":"0","type":"p","index":0,"r":true} string translation = StringParser.Parse("translate\":\"", "\"", responseFromServer); result.Translations.Add(HttpUtilityEx.HtmlDecode(translation)); } else { throw new TranslationException("Nothing returned from call to " + url); } } else { throw new TranslationException("Nothing returned from call to http://translate.meta.ua/ajax/?sn=save_source"); } }
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) { 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) { 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"); } }
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; }
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) { if(string.IsNullOrEmpty(viewState)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.prolingoffice.com/page.aspx?l1=28"), 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=28"), networkSetting, WebRequestContentType.UrlEncoded, Encoding.GetEncoding(1251)); //query string langDirection = "RU"; if(languagesPair.From == Language.Ukrainian) langDirection = "UR"; //templ=%CD%E5%F2+%EF%E5%F0%E5%E2%EE%E4%E0& //__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&_ctl1%3Asource={1} //&_ctl1%3Alng={2}&_ctl1%3AButton1=%CF%E5%F0%E5%E2%E5%F1%F2%E8& //_ctl1%3Aathbox=&_ctl1%3Amailbox=&_ctl1%3Aerr_f=&_ctl1%3Aadd_txt=& //_ctl1%3Acb_forum=on&LanguageH=RUS&__EVENTVALIDATION={3} string query = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&_ctl1%3Asource={1}&_ctl1%3Alng={2}&_ctl1%3AButton1=%CF%E5%F0%E5%E2%E5%F1%F2%E8&_ctl1%3Aathbox=&_ctl1%3Amailbox=&_ctl1%3Aerr_f=&_ctl1%3Aadd_txt=&_ctl1%3Acb_forum=on&LanguageH=RUS&__EVENTVALIDATION={3}"; query = string.Format(query, HttpUtility.UrlEncode(viewState, helper.Encoding), HttpUtility.UrlEncode(phrase, helper.Encoding), langDirection, HttpUtility.UrlEncode(eventValidation, helper.Encoding)); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("onclickk=\"shword();\">", "</DIV>", responseFromServer); translation = translation.Replace("<font color=red>", ""); translation = translation.Replace("</font>", ""); result.Translations.Add(translation); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServer); }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.dicts.info/ud.php"), networkSetting, WebRequestContentType.UrlEncoded); string fromLanguage = ConvertLanguage(languagesPair.From); string toLanguage = ConvertLanguage(languagesPair.To); int fromLangColumn, toLangColumn; string lang_query = "lan1={0}&lan2={1}"; if(string.IsNullOrEmpty(fromLanguage)) { fromLangColumn = 0; toLangColumn = 1; lang_query = string.Format(lang_query, toLanguage, ""); } else if(string.IsNullOrEmpty(toLanguage)) { fromLangColumn = 1; toLangColumn = 0; lang_query = string.Format(lang_query, fromLanguage, ""); } else { fromLangColumn = 1; toLangColumn = 2; lang_query = string.Format(lang_query, fromLanguage, toLanguage); } string query = "{0}&word={1}&rad=ftsearch&go=Search"; query = string.Format(CultureInfo.InvariantCulture, query, lang_query, HttpUtility.UrlEncode(phrase) ); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); if(!responseFromServer.Contains("<table class=\"t1\"")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } //offcet fromLangColumn += 2; toLangColumn += 2; string translation = StringParser.Parse("<table class=\"t1\"", "</table>", responseFromServer); string[] translations = StringParser.ParseItemsList("<tr bgcolor=\"", "</tr>", translation); if(translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string sub_phrase, sub_translation; Result subres = null; foreach(string subtranslation in translations) { string[] columns = StringParser.ParseItemsList("<td", "</td>", subtranslation); sub_phrase = StringParser.ExtractRight(">", columns[fromLangColumn]).Trim(); sub_phrase = StringParser.RemoveAll("<", ">", sub_phrase); sub_translation = StringParser.ExtractRight(">", columns[toLangColumn]).Trim(); sub_translation = StringParser.RemoveAll("<", ">", sub_translation); if(!string.IsNullOrEmpty(sub_phrase) && !string.IsNullOrEmpty(sub_translation)) { if(subres == null || subres.Phrase != sub_phrase) { subres = CreateNewResult(sub_phrase, languagesPair, subject); result.Childs.Add(subres); } if(!subres.Translations.Contains(sub_translation)) subres.Translations.Add(sub_translation); } } 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) { lock(viewState) { if(string.IsNullOrEmpty(viewState) || coockieTime < DateTime.Now.AddMinutes(-30)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.microsofttranslator.com/Default.aspx"), networkSetting, WebRequestContentType.UrlEncodedGet); helpertop.CookieContainer = cookieContainer; string responseFromServertop = helpertop.GetResponse(); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServertop); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServertop); coockieTime = DateTime.Now; } } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.microsofttranslator.com/Default.aspx"), networkSetting, WebRequestContentType.UrlEncoded); //query lock(viewState) { string query = "__VIEWSTATE={0}&__EVENTVALIDATION={1}&InputTextVal={2}&InputTextInit=&BrowserLanguagePreference=ru&MaxInputChars=15000&LangPair_FromDDL_svid={3}&LangPair_FromDDL_textid=&LangPair_ToDDL_svid={4}&LangPair_ToDDL_textid=&LangPair%24FromLangLAD=&BtnTransText=%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%B5%D1%81%D1%82%D0%B8&LiveTranslationPostURL=http%3A%2F%2Flivetranslation.com%2Faff%2Fpartner.aspx&LiveTranslationPartnerID=500&LiveTranslationLanguagePairs="; query = string.Format(query, HttpUtility.UrlEncode(viewState), HttpUtility.UrlEncode(eventValidation), HttpUtility.UrlEncode(phrase), ConvertLanguage(languagesPair.From), ConvertLanguage(languagesPair.To) ); helper.AddPostData(query); cookieContainer.Add(new Uri("http://www.microsofttranslator.com"), new Cookie("from", ConvertLanguage(languagesPair.From))); cookieContainer.Add(new Uri("http://www.microsofttranslator.com"), new Cookie("to", ConvertLanguage(languagesPair.To))); helper.CookieContainer = cookieContainer; } string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("<textarea name=\"OutputText\"", "</textarea>", responseFromServer); translation = StringParser.ExtractRight(">", translation); result.Translations.Add(translation); lock(viewState) { viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); eventValidation = StringParser.Parse("id=\"__EVENTVALIDATION\" value=\"", "\"", responseFromServer); } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.trident.com.ua/translation_online/"), networkSetting, WebRequestContentType.UrlEncoded); //query //?SrcTxt=test&Subject=**&LangFrom=Detect&LangTo=Rus&Translate=++Translate+++&DstTxt=&DlgLang=english string lang_to = ConvertLanguage(languagesPair.To); string lang_from = ConvertLanguage(languagesPair.From); string query = "SrcTxt={2}&Subject={1}&LangFrom={3}&LangTo={0}&Translate=++Translate+++&DstTxt=&DlgLang=english"; query = string.Format(CultureInfo.InvariantCulture, query, lang_to, GetSubject(subject), HttpUtility.UrlEncode(phrase, helper.Encoding), lang_from); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("<textarea rows=\"7\" cols=\"50\" name=\"DstTxt\"", "</textarea>", responseFromServer); translation = StringParser.ExtractRight(">",translation).Trim(); if(!String.IsNullOrEmpty(translation)) result.Translations.Add(translation); else { 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++; } } }
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)); } } }
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) { 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) { //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) { string query = "http://www.systranet.com/tt?gui=www.systran.co.uk;/snetcom/text/ts&lp={0}&MAX_TRANSLATED_WORDS=500&service=translate"; query = string.Format(query, ConvertLanguagesPair(languagesPair)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncoded); helper.AddPostData(phrase); string responseFromServer = helper.GetResponse(); string status = responseFromServer.Substring(6); result.Translations.Add(status); /* if(status != "2") { throw new TranslationException(responseFromServer.Substring(10)); } else { if(responseFromServer.Substring(17) == "Translation direction is not correct") throw new TranslationException("Translation direction is not correct"); result.Translations.Add(responseFromServer.Substring(17)); } */ }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.dicts.info/ud.php"), networkSetting, WebRequestContentType.UrlEncoded); string fromLanguage = ConvertLanguage(languagesPair.From); string toLanguage = ConvertLanguage(languagesPair.To); int fromLangColumn, toLangColumn; string lang_query = "lan1={0}&lan2={1}"; if (string.IsNullOrEmpty(fromLanguage)) { fromLangColumn = 0; toLangColumn = 1; lang_query = string.Format(lang_query, toLanguage, ""); } else if (string.IsNullOrEmpty(toLanguage)) { fromLangColumn = 1; toLangColumn = 0; lang_query = string.Format(lang_query, fromLanguage, ""); } else { fromLangColumn = 1; toLangColumn = 2; lang_query = string.Format(lang_query, fromLanguage, toLanguage); } string query = "{0}&word={1}&rad=ftsearch&go=Search"; query = string.Format(CultureInfo.InvariantCulture, query, lang_query, HttpUtility.UrlEncode(phrase) ); helper.AddPostData(query); string responseFromServer = helper.GetResponse(); if (!responseFromServer.Contains("<table class=\"t1\"")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } //offcet fromLangColumn += 2; toLangColumn += 2; string translation = StringParser.Parse("<table class=\"t1\"", "</table>", responseFromServer); string[] translations = StringParser.ParseItemsList("<tr bgcolor=\"", "</tr>", translation); if (translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string sub_phrase, sub_translation; Result subres = null; foreach (string subtranslation in translations) { string[] columns = StringParser.ParseItemsList("<td", "</td>", subtranslation); sub_phrase = StringParser.ExtractRight(">", columns[fromLangColumn]).Trim(); sub_phrase = StringParser.RemoveAll("<", ">", sub_phrase); sub_translation = StringParser.ExtractRight(">", columns[toLangColumn]).Trim(); sub_translation = StringParser.RemoveAll("<", ">", sub_translation); if (!string.IsNullOrEmpty(sub_phrase) && !string.IsNullOrEmpty(sub_translation)) { if (subres == null || subres.Phrase != sub_phrase) { subres = CreateNewResult(sub_phrase, languagesPair, subject); result.Childs.Add(subres); } if (!subres.Translations.Contains(sub_translation)) { subres.Translations.Add(sub_translation); } } } if (result.Childs.Count == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } }
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; }
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) { lock(viewState) { if(string.IsNullOrEmpty(viewState)) { //emulate first access to site WebRequestHelper helpertop = new WebRequestHelper(result, new Uri("http://www.online-translator.com/Default.aspx/Text"), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServertop = helpertop.GetResponse(); viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServertop); prevPage = StringParser.Parse("id=\"__PREVIOUSPAGE\" value=\"", "\"", responseFromServertop); } } WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://www.online-translator.com/Default.aspx/Text"), networkSetting, WebRequestContentType.UrlEncoded); //query lock(viewState) { //string query = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&ctl00%24SiteContent%24ucTextTranslator%24tbFromAddr=&ctl00%24SiteContent%24ucTextTranslator%24tbToAddr=&ctl00%24SiteContent%24ucTextTranslator%24tbCCAddr=&ctl00%24SiteContent%24ucTextTranslator%24tbSubject=&ctl00%24SiteContent%24ucTextTranslator%24tbBody=&ctl00%24SiteContent%24ucTextTranslator%24templates={1}&ctl00%24SiteContent%24ucTextTranslator%24checkShowVariants=on&ctl00%24SiteContent%24ucTextTranslator%24dlTemplates=General&ctl00%24SiteContent%24ucTextTranslator%24sourceText={2}&resultText=&ctl00%24SiteContent%24ucTextTranslator%24dlDirections={3}&ctl00%24SiteContent%24ucTextTranslator%24bTranslate=Translate&ctl00%24tbEmail=&ctl00%24tbName=&ctl00%24tbComment=&ctl00%24pollDiv%24tbSiteLang=en"; string query = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&ctl00%24SiteContent%24MA_trasnlform%24selected_tab=text&chLangs=true&ctl00%24SiteContent%24MA_trasnlform%24rblTemplates=General&ctl00%24SiteContent%24MA_trasnlform%24otherTemplatesInput={1}&ctl00%24SiteContent%24MA_trasnlform%24sourceText={2}&ctl00%24SiteContent%24MA_trasnlform%24sLang={3}&ctl00%24SiteContent%24MA_trasnlform%24rLang={4}&ctl00%24SiteContent%24MA_trasnlform%24bTranslate=Translate&ctl00%24SiteContent%24MA_trasnlform%24changedFieldToAddr=&ctl00%24SiteContent%24MA_trasnlform%24hiddenDir=&ctl00%24SiteContent%24MA_trasnlform%24hiddenTranid=&ctl00%24changedField=&__PREVIOUSPAGE={5}"; query = string.Format(query, HttpUtility.UrlEncode(viewState), PromtUtils.GetSubject(subject), HttpUtility.UrlEncode(phrase), PromtUtils.ConvertLanguage(languagesPair.From), PromtUtils.ConvertLanguage(languagesPair.To), prevPage); helper.AddPostData(query); } string responseFromServer = helper.GetResponse(); string translation = StringParser.Parse("class=\"send_win\">", "</textarea>", responseFromServer); result.Translations.Add(translation); lock(viewState) { viewState = StringParser.Parse("id=\"__VIEWSTATE\" value=\"", "\"", responseFromServer); prevPage = StringParser.Parse("id=\"__PREVIOUSPAGE\" value=\"", "\"", responseFromServer); } }
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++; } } }
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.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)); } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { WebRequestHelper helper = new WebRequestHelper(result, new Uri("http://babelfish.yahoo.com/translate_txt"), networkSetting, WebRequestContentType.UrlEncoded); helper.AcceptCharset = "utf-8"; //query //ei=UTF-8&doit=done&fr=bf-res&intl=1&tt=urltext&trtext=test+it&lp=en_ru&btnTrTxt=Translate string langpair= ConvertTranslatorLanguagesPair(languagesPair); string query = "ei=UTF-8&doit=done&fr=bf-res&intl=1&tt=urltext&trtext=" + HttpUtility.UrlEncode(phrase, System.Text.Encoding.UTF8 ) + "&lp=" + langpair + "&btnTrTxt=Translate"; helper.AddPostData(query); string responseFromServer = helper.GetResponse(); result.Translations.Add(StringParser.Parse("<div style=\"padding:0.6em;\">", "</div>", responseFromServer)); }
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) { 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"); } }