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));
             * }
             */
        }
Example #2
0
        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));
        }
Example #3
0
        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");
        }
Example #9
0
        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(&quot"))
            {
                StringParser parser   = new StringParser(responseFromServer);
                string[]     sublinks = parser.ReadItemsList("javascript:SeleccionaEntrada(&quot;", "&quot;)\"");
                if (sublinks.Length <= 1)
                {
                    result.ResultNotFound = true;
                    throw new TranslationException("Nothing found");
                }

                string key = "&quot;,&quot;";
                foreach (string sublink in sublinks)
                {
                    int idx = sublink.IndexOf(key);
                    if (idx < 0)
                    {
                        throw new TranslationException("Can't found start tag : \"&quot;,&quot;\" 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");
            }
        }
Example #18
0
        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++;
                }

            }
        }
Example #21
0
        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));
                }
            }
        }
Example #22
0
        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]);
                        }
                    }
                }
            }
        }
Example #30
0
        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);
            }
        }
Example #31
0
        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));
            }
        }
Example #34
0
        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(&quot"))
            {
                StringParser parser = new StringParser(responseFromServer);
                string[] sublinks = parser.ReadItemsList("javascript:SeleccionaEntrada(&quot;", "&quot;)\"");
                if(sublinks.Length <= 1)
                {
                    result.ResultNotFound = true;
                    throw new TranslationException("Nothing found");
                }

                string key = "&quot;,&quot;";
                foreach(string sublink in sublinks)
                {
                    int idx = sublink.IndexOf(key);
                    if(idx < 0)
                        throw new TranslationException("Can't found start tag : \"&quot;,&quot;\" 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");
            }
        }