protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { Encoding encoding = Encoding.GetEncoding("iso-8859-1"); string query = "http://wordnetweb.princeton.edu/perl/webwn?s=" + HttpUtility.UrlEncode(phrase, encoding); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, encoding); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("<h3>Your search did not return any results.</h3>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } if (responseFromServer.Contains("<h3>Sorry(?) your search can only contain letters(?)")) { throw new TranslationException("Query contains extraneous symbols"); } result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string[] nodes = StringParser.ParseItemsList("<h3>", "</ul>", responseFromServer); bool first = true; string nodename; Result child = result; string[] subnodes; string translation; foreach (string node in nodes) { nodename = StringParser.ExtractLeft("</h3>", node); if (first && nodes.Length == 1) { child.Abbreviation = nodename; } else { child = new Result(result.ServiceItem, nodename, result.LanguagePair, result.Subject); result.Childs.Add(child); } first = false; subnodes = StringParser.ParseItemsList("<li>", "</li>", node); foreach (string subnode in subnodes) { translation = StringParser.RemoveAll("<", ">", subnode); translation = StringParser.ExtractRight(")", translation); child.Translations.Add(translation); } } }
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); } }
public static void SetAdditionalLinks(Result result, string data, string host) { string[] urls = StringParser.ParseItemsList("<a href=\"", "</a>", data); string link; string text; List <string> texts = new List <string>(); foreach (string url in urls) { link = StringParser.ExtractLeft("\"", url); link = link.Replace(" ", "+"); if (link.StartsWith("/")) { link = "http://" + (new Uri(host)).Host + link; } else { link = host + link; } text = StringParser.ExtractRight(">", url); if (text.EndsWith(" 1")) { text = StringParser.ExtractLeft(" 1", text); } else if (text.EndsWith(" 2")) { text = StringParser.ExtractLeft(" 2", text); } if (!texts.Contains(text)) { result.RelatedLinks.Add(text, new Uri(link)); texts.Add(text); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://synonimy.ux.pl/multimatch.php?word={0}&search=1"; query = string.Format(CultureInfo.InvariantCulture, query, HttpUtility.UrlEncode(phrase, encoding) ); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet, encoding); string responseFromServer = helper.GetResponse(); string[] translations = StringParser.ParseItemsList("<li><a accesskey=", "</li>", responseFromServer); if (translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string subtranslation; foreach (string translation in translations) { subtranslation = StringParser.ExtractRight(">", translation); subtranslation = StringParser.RemoveAll("<", ">", subtranslation); result.Translations.Add(subtranslation); } }
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; }
public static void DoTranslate(ServiceItem searchEngine, string searchHost, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string link_f = "http://{0}.{1}/wiki/{2}"; string lang = WikiUtils.ConvertLanguage(languagesPair.To); string link = string.Format(link_f, lang, searchHost, phrase); result.EditArticleUrl = link; Result searchResult = searchEngine.Translate(phrase, languagesPair, subject, networkSetting); if (!searchResult.IsHasData() || searchResult.Translations.Count < 1) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string url = StringParser.Parse("<a href=\"", "\">", searchResult.Translations[0]); string searched_name = url.Substring(url.LastIndexOf("/") + 1); if (string.Compare(phrase, searched_name, true) != 0) { //check second line if (searchResult.Translations.Count < 2) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } else { url = StringParser.Parse("<a href=\"", "\">", searchResult.Translations[1]); searched_name = url.Substring(url.LastIndexOf("/") + 1); if (string.Compare(phrase, searched_name, true) != 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } } } link = string.Format(link_f, lang, searchHost, searched_name, searched_name); result.EditArticleUrl = link; //http://en.wikipedia.org/w/api.php?action=parse&prop=text&format=xml&page=Ukraine string query = "http://{0}.{1}/w/api.php?action=parse&prop=text|revid&format=xml&page={2}"; query = string.Format(query, lang, searchHost, HttpUtility.UrlEncode(searched_name)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.IndexOf("<parse revid=\"0\">") >= 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string res = StringParser.Parse("<text", "</text>", responseFromServer); res = StringParser.ExtractRight(">", res); res = res.Replace("width: 100%", "width: 95%"); res = res.Replace("float:right;", "float: right;margin-right: 0.5em;"); res = "html!<div style='width:{allowed_width}px;overflow:scroll;overflow-y:hidden;overflow-x:auto;'>" + HttpUtility.HtmlDecode(res) + " </div>"; res = res.Replace("<h1>", ""); res = res.Replace("</h1>", ""); res = res.Replace("<h2>", ""); res = res.Replace("</h2>", ""); res = res.Replace("<h3>", ""); res = res.Replace("</h3>", ""); res = res.Replace("<h4>", ""); res = res.Replace("</h4>", ""); res = StringParser.RemoveAll("<span class=\"editsection\">[<a", "</a>]", res); res = StringParser.RemoveAll("href=\"#", "\"", res); res = StringParser.RemoveAll("<script type=", "</script>", res); res = StringParser.RemoveAll("<button onclick=", "</button>", res); url = string.Format("a href=\"http://{0}.{1}/", lang, searchHost); res = res.Replace("a href=\"/", url); url = string.Format("img src=\"http://{0}.{1}/", lang, searchHost); res = res.Replace("img src=\"/", url); result.Translations.Add(res); }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://dict.tu-chemnitz.de/dings.cgi?lang=en&service={0}&opterrors=0&optpro=0&query={1}&iservice=&dlink=self&comment="; query = string.Format(CultureInfo.InvariantCulture, query, ConvertLanguagesPair(languagesPair), HttpUtility.UrlEncode(phrase, encoding) ); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); helper.Encoding = encoding; string responseFromServer = helper.GetResponse(); if(responseFromServer.Contains(">0 <span class=\"h\">similar</span> results for ")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string[] translations = StringParser.ParseItemsList("<td align=\"right\"><br", "</tr>", responseFromServer); if(translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } if(responseFromServer.Contains("<td class=\"tip b \" width=\"45%\" align=\"left\" valign=\"top\">")) { string full_count = StringParser.Parse("<td class=\"tip b \" width=\"45%\" align=\"left\" valign=\"top\">", " ", responseFromServer); if(!string.IsNullOrEmpty(full_count)) { int count; if(int.TryParse(full_count, out count)) result.MoreEntriesCount = count - translations.Length; } } string en_string, ge_string, en_url, ge_url; bool en_audio, ge_audio; Result child = result; string subphrase = ""; foreach(string translation in translations) { string[] subtranslations = StringParser.ParseItemsList("<td class=\"", "</td>", translation); if(subtranslations.Length != 2) throw new TranslationException("Can't found translations in string : " + translation); en_string = StringParser.ExtractRight(">", subtranslations[1]); if(en_string.Contains("<a href=\"")) en_url = StringParser.Parse("<a href=\"", "\"", en_string); else en_url = ""; en_audio = en_string.Contains("href=\"/dings.cgi?speak="); en_string = StringParser.RemoveAll("<", ">", en_string); ge_string = StringParser.ExtractRight(">", subtranslations[0]); if(ge_string.Contains("<a href=\"")) ge_url = StringParser.Parse("<a href=\"", "\"", ge_string); else ge_url = ""; ge_audio = ge_string.Contains("href=\"/dings.cgi?speak="); ge_string = StringParser.RemoveAll("<", ">", ge_string); if(languagesPair.From == Language.German) { if(subphrase != ge_string) { child = new Result(result.ServiceItem, ge_string, result.LanguagePair, result.Subject); subphrase = ge_string; if(!string.IsNullOrEmpty(ge_url)) child.ArticleUrl = "http://dict.tu-chemnitz.de" + ge_url; child.HasAudio = ge_audio; result.Childs.Add(child); } child.Translations.Add(en_string); } else { if(subphrase != en_string) { child = new Result(result.ServiceItem, en_string, result.LanguagePair, result.Subject); subphrase = en_string; if(!string.IsNullOrEmpty(en_url)) child.ArticleUrl = "http://dict.tu-chemnitz.de" + en_url; child.HasAudio = en_audio; result.Childs.Add(child); } child.Translations.Add(ge_string); } } }
protected override void DoTranslate(string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { string query = "http://www.google.com/dictionary?aq=f&langpair={1}&q={0}&hl=en"; query = string.Format(query, HttpUtility.UrlEncode(phrase, System.Text.Encoding.UTF8), GoogleUtils.ConvertLanguagesPair(languagesPair)); WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("No dictionary translations were found for: <strong>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } if (responseFromServer.Contains("No dictionary definitions were found for: <strong>")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } result.HasAudio = responseFromServer.Contains("<object data=\"/dictionary/flash"); responseFromServer = StringParser.Parse("<div class=\"dct-srch-otr\">", "<div class=\"dct-rt-sct\">", responseFromServer); //pronuncation if (responseFromServer.Contains("<span class=\"dct-tp\">/")) { string pronuncation = StringParser.Parse("<span class=\"dct-tp\">/", "/</span>", responseFromServer); pronuncation = pronuncation.Trim(); result.Abbreviation = pronuncation; } //translations //string translations = StringParser.Parse("<div class=\"dct-srch-rslt\">", "</div>", responseFromServer); string translations = ""; //TODO: additional sences like in "water" - "water down" not supported if (responseFromServer.Contains("<div class=\"sen\">")) { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>\n<div class=\"sen\">", responseFromServer); } else if (responseFromServer.Contains("<h3>Related phrases</h3>")) { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>\n<h3>Related phrases</h3>", responseFromServer); } else if (responseFromServer.Contains("<h3>Web definitions</h3>")) { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>\n<h3>Web definitions</h3>", responseFromServer); } else { translations = StringParser.Parse("<ul class=\"dct-e2\" id=\"pr-root\" >", "</ul>", responseFromServer); } StringParser parser = null; List <string> subtranslations = new List <string>(); if (translations.Contains("<li class=\"dct-ec\"")) { //"</li>\n</ul>\n</li>" parser = new StringParser(translations); string[] subtranslation_list = parser.ReadItemsList("<li class=\"dct-ec\"", "</li>\n</ul>\n</li>", "3485730457203"); subtranslations.AddRange(subtranslation_list); } else if (translations.Contains("<div style=\"font-weight:bold\">Synonyms:</div>")) { Result synonyms_tr = CreateNewResult("Synonyms", languagesPair, subject); result.Childs.Add(synonyms_tr); string synonyms = StringParser.Parse("<div style=\"font-weight:bold\">Synonyms:</div>", "</div>", translations); parser = new StringParser(synonyms); string[] syn_group_list = parser.ReadItemsList("<li>", "</li>", "3485730457203"); foreach (string syngroup in syn_group_list) { string syn_group_name = StringParser.Parse("title=\"Part-of-speech\">", "</span>", syngroup); Result syn_tr = CreateNewResult(syn_group_name, languagesPair, subject); synonyms_tr.Childs.Add(syn_tr); parser = new StringParser(syngroup); string[] syn_list = parser.ReadItemsList("<a", "</a>", "3485730457203"); foreach (string syn in syn_list) { string synonym = StringParser.ExtractRight(">", syn); syn_tr.Translations.Add(synonym); } } subtranslations.Add(translations); } else { subtranslations.Add(translations); } Result subres_tr = result; Result sub2res_tr = null; Result sub3res_tr = null; string abbr_str; foreach (string subtranslation in subtranslations) { if (subtranslation.Contains("<div class=\"dct-ec\">")) { abbr_str = StringParser.Parse("title=\"Part-of-speech\">", "</span>", subtranslation); subres_tr = CreateNewResult(abbr_str, languagesPair, subject); result.Childs.Add(subres_tr); } parser = new StringParser(subtranslation.Replace("<li class=\"dct-em\"", "<end><begin>") + "<end>"); string[] subsubtranslation_list = parser.ReadItemsList("<begin>", "<end>", "3485730457203"); foreach (string subsubtanslation in subsubtranslation_list) { sub2res_tr = CreateNewResult("", languagesPair, subject); subres_tr.Childs.Add(sub2res_tr); if (subsubtanslation.Contains(">See also</span>")) { sub2res_tr.Translations.Add("See also"); } StringParser parser2 = new StringParser(subsubtanslation.Replace("<span class=\"dct-tt\">", "<end><begin>") + "<end>"); string[] sub3translation_list = parser2.ReadItemsList("<begin>", "<end>", "3485730457203"); foreach (string sub3tanslation in sub3translation_list) { string text_translation = ""; string text_abbr = ""; if (sub3tanslation.Contains("<span")) { text_translation = StringParser.ExtractLeft("<span", sub3tanslation); if (text_translation.Contains("</span")) { text_translation = StringParser.ExtractLeft("</span", text_translation); } text_abbr = StringParser.Parse("<span", "</span", sub3tanslation); text_abbr = StringParser.ExtractRight(">", text_abbr); } else { text_translation = StringParser.ExtractLeft("</span>", sub3tanslation); } text_translation = StringParser.RemoveAll("<", ">", text_translation); if (sub2res_tr.Translations.Count == 0) { sub2res_tr.Translations.Add(text_translation); sub2res_tr.Abbreviation = text_abbr; } else { sub3res_tr = CreateNewResult("", languagesPair, subject); sub3res_tr.Translations.Add(text_translation); //sub3res_tr.Phrase = text_abbr; sub2res_tr.Childs.Add(sub3res_tr); } } } } //related words if (responseFromServer.Contains("<h3>Related phrases</h3>")) { string related = StringParser.Parse("<ul class=\"rlt-snt\">", "</ul>", responseFromServer); if (!string.IsNullOrEmpty(related)) { parser = new StringParser(related); string[] related_list = parser.ReadItemsList("<li>", "</li>"); foreach (string related_s in related_list) { string related_str = related_s.Replace("\n", "").Trim(); string subphrase = StringParser.Parse("<div>", "</div>", related_str); subphrase = StringParser.RemoveAll("<", ">", subphrase); subphrase = subphrase.Replace(" ", " ").Replace("\n", "").Trim(); string subphrasetrans = StringParser.ExtractRight("</div>", related_str); subphrasetrans = StringParser.RemoveAll("<", ">", subphrasetrans); subphrasetrans = subphrasetrans.Replace(" ", " ").Replace("\n", "").Trim(); Result subres = CreateNewResult(subphrase, languagesPair, subject); subres.Translations.Add(subphrasetrans); result.Childs.Add(subres); } } } //Web definitions if (responseFromServer.Contains("<h3>Web definitions</h3>")) { string related = StringParser.ExtractRight("<ul class=\"gls\">", responseFromServer); if (!string.IsNullOrEmpty(related)) { { Result subres_wd = CreateNewResult(phrase, languagesPair, subject); result.Childs.Add(subres_wd); parser = new StringParser(related); string[] related_list = parser.ReadItemsList("<li>", "</li>"); foreach (string related_s in related_list) { string related_str = related_s; related_str = related_str.Replace("<br/>", "").Trim(); related_str = StringParser.RemoveAll("<", ">", related_str); related_str = related_str.Replace(" ", " ").Replace("\n", "").Trim(); subres_wd.Translations.Add(related_str); } } } } }
public static void DoTranslate(ServiceItem serviceItem, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting) { bool synonimsDictionary = languagesPair.From == Language.Polish && languagesPair.To == Language.Polish; string query = "http://megaslownik.pl/slownik/{0}/,{1}"; query = string.Format(query, MegaslownikTools.ConvertLanguagePair(languagesPair), HttpUtility.UrlEncode(phrase)); result.ArticleUrl = query; result.ArticleUrlCaption = phrase; WebRequestHelper helper = new WebRequestHelper(result, new Uri(query), networkSetting, WebRequestContentType.UrlEncodedGet); string responseFromServer = helper.GetResponse(); if (responseFromServer.Contains("<div class=\"slowo\">\r\n Szukanego słowa nie ma w MEGAsłowniku.\r\n")) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } result.HasAudio = responseFromServer.Contains("class=\"ikona_sluchaj2\">"); string[] translations = StringParser.ParseItemsList("<div class=\"definicja\">", "</div>", responseFromServer); if (translations.Length == 0) { result.ResultNotFound = true; throw new TranslationException("Nothing found"); } string subsubtranslation; string[] subtranslations; foreach (string translation in translations) { subtranslations = StringParser.ParseItemsList("<a href=\"/slownik", "</a>", translation); foreach (string subtranslation in subtranslations) { subsubtranslation = StringParser.ExtractRight(">", subtranslation); subsubtranslation = StringParser.RemoveAll("<", ">", subsubtranslation); result.Translations.Add(subsubtranslation); } } //synonims translations = StringParser.ParseItemsList("<div class=\"synonim\">synonimy:", "</div>", responseFromServer); foreach (string translation in translations) { subtranslations = StringParser.ParseItemsList("<a href=\"/slownik", "</a>", translation); foreach (string subtranslation in subtranslations) { subsubtranslation = StringParser.ExtractRight(">", subtranslation); subsubtranslation = StringParser.RemoveAll("<", ">", subsubtranslation); if (!result.Translations.Contains(subsubtranslation)) { result.Translations.Add(subsubtranslation); } } } //additional links if (!synonimsDictionary) { string[] links = StringParser.ParseItemsList("<li ><a href=\"/slownik/", "</li>", responseFromServer); string linkUrl, linkText, subphrase, subtrans; Result child; foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains("»") && linkText.Contains(phrase)) { subphrase = StringParser.ExtractLeft("»", linkText); subtrans = StringParser.ExtractRight("»", linkText); child = serviceItem.CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(child); child.Translations.Add(subtrans); child.ArticleUrl = linkUrl; child.ArticleUrlCaption = subphrase; } } links = StringParser.ParseItemsList("<li><a href=\"/slownik/", "</li>", responseFromServer); foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains("»") && linkText.Contains(phrase)) { subphrase = StringParser.ExtractLeft("»", linkText); subtrans = StringParser.ExtractRight("»", linkText); child = serviceItem.CreateNewResult(subphrase, languagesPair, subject); result.Childs.Add(child); child.Translations.Add(subtrans); child.ArticleUrl = linkUrl; child.ArticleUrlCaption = subphrase; } //result.RelatedLinks.Add(linkText, linkUrl); } } else { //synonyms string[] links = StringParser.ParseItemsList("<li ><a href=\"/slownik/", "</li>", responseFromServer); string linkUrl, linkText; foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains(phrase)) { result.RelatedLinks.Add(linkText, linkUrl); } } links = StringParser.ParseItemsList("<li><a href=\"/slownik/", "</li>", responseFromServer); foreach (string link in links) { linkUrl = "http://megaslownik.pl/slownik/" + StringParser.ExtractLeft("\"", link); linkText = StringParser.ExtractRight(">", link); linkText = StringParser.RemoveAll("<", ">", linkText); if (linkText.Contains(phrase)) { result.RelatedLinks.Add(linkText, linkUrl); } } } }
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) { 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"); } }
public static void SetResult(Result result, string data, string host) { if (data.IndexOf("</strong> can be found at Merriam-WebsterUnabridged.com.") > 0) { result.Translations.Add(result.Phrase); return; } if (data.Contains("No entries found that match ")) { result.Translations.Add(result.Phrase); return; } result.HasAudio = data.Contains("title=\"Listen to the pronunciation of"); if (data.IndexOf("<div>Function: ") > 0) { string abbr = StringParser.Parse("<div>Function: ", "</div>", data); abbr = abbr.Replace("<em>", ""); abbr = abbr.Replace("</em>", ""); abbr = abbr.Replace("<span class=\"fl\">", ""); abbr = abbr.Replace("</span>", ""); result.Abbreviation = abbr; } if (data.IndexOf("<div>Pronunciation: ") > 0) { string abbr = StringParser.Parse("<div>Pronunciation: ", "</div>", data); abbr = StringParser.RemoveAll("<span", ">", abbr); abbr = abbr.Replace("</span>", ""); abbr = abbr.Replace("<em>", ""); abbr = abbr.Replace("</em>", ""); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += abbr; } if (data.IndexOf("<dd class=\"use\">") > 0) { string abbr = StringParser.Parse("<dd class=\"use\">", "</dd>", data); abbr = abbr.Replace("<em>", ""); abbr = abbr.Replace("</em>", ""); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += "Usage: " + abbr; } if (data.IndexOf("<div>Etymology: ") > 0) { string abbr = StringParser.Parse("<div>Etymology: ", "</div>", data); abbr = abbr.Replace("<em>", "("); abbr = abbr.Replace("</em>", ")"); abbr = StringParser.RemoveAll("<a href", ">", abbr); abbr = abbr.Replace("</a>", ""); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += "Etymology: " + abbr; } if (data.IndexOf("<div>Date: ") > 0) { string abbr = StringParser.Parse("<div>Date: ", "</div>", data); abbr = abbr.Replace("<em>", "("); abbr = abbr.Replace("</em>", ")"); if (!string.IsNullOrEmpty(result.Abbreviation)) { result.Abbreviation += ", "; } result.Abbreviation += "Date: " + abbr; } if (!data.Contains("class=\"d\">") && data.Contains("<span class=\"variant\">")) { //variant, like a blew - past of blow string variant = StringParser.Parse("<span class=\"variant\">", "</div>", data); SetAdditionalLinks(result, variant, host); variant = StringParser.RemoveAll("<span", ">", variant); variant = StringParser.RemoveAll("<a href", ">", variant); variant = variant.Replace("</a>", ""); variant = variant.Replace("</span>", ""); variant = variant.Replace("<em>", ""); variant = variant.Replace("</em>", ""); variant = variant.Replace("</dd>", " "); variant = variant.Replace("</dl>", ""); result.Translations.Add(variant.Trim()); return; } string defs = StringParser.Parse("class=\"d\">", "<script", data); defs = defs.Replace(" a</span>", " a "); defs = defs.Replace("</span>", ""); defs = defs.Replace("<em>", ""); defs = defs.Replace("</em>", ""); defs = defs.Replace("<strong>Synonyms</strong>", "Synonyms: "); defs = defs.Replace("<strong>Related Words</strong>", "Related Words: "); defs = defs.Replace("<strong>Antonyms</strong>", "Antonyms: "); //defs = defs.Replace("<strong>", ""); //defs = defs.Replace("</strong>", ""); defs = defs.Replace(":�<a", "- <a"); defs = defs.Replace("<span class=\"dxn\">", ""); SetAdditionalLinks(result, defs, host); defs = StringParser.RemoveAll("<a href", ">", defs); defs = defs.Replace("</a>", ""); defs = defs.Replace("<span class=\"sense_content\">", ""); //defs = StringParser.RemoveAll("<span class=\"sense_label\">", ">", defs); defs = defs.Replace("<span>", ""); defs = defs.Replace("�", ""); defs = defs.Replace("<span class=\"vi\">", ""); defs = defs.Replace("<span class=\"text\">", ""); defs = defs.Replace("<span class=\"\n sense_label", "<span class=\"sense_label"); defs = defs.Replace("<span class=\"unicode\">", ""); defs = defs.Replace("ʼ", "'"); if (defs.IndexOf("<br/>") < 0) { //single def if (defs.IndexOf("<span class=\"syn\">") < 0 && defs.IndexOf("<span class=\"rel\">") < 0 && defs.IndexOf("<span class=\"ant\">") < 0 ) { defs = StringParser.RemoveAll("<", ">", defs); result.Translations.Add(defs.Trim()); return; } } defs = "<start>" + defs; { defs = defs.Replace("<span class=\"verb_class\">", "<end><start>"); defs = defs.Replace("<div class=\"synonym\">", "<end><start>"); defs = defs.Replace("<span class=\"syn\">", "<end><start>"); defs = defs.Replace("<span class=\"rel\">", "<end><start>"); defs = defs.Replace("<span class=\"ant\">", "<end><start>"); defs = defs.Replace("<br/>", "<end><start>"); defs += "<end>"; //ending mark StringParser parser = new StringParser(defs); string[] defs_items = parser.ReadItemsList("<start>", "<end>"); string translation; foreach (string item in defs_items) { translation = item.Trim(); /*if(translation[0] <= '9' && translation[0] >= '0') * translation = item.Substring(1).Trim(); //skip idx * * if(translation[0] <= '9' && translation[0] >= '0') * translation = translation.Substring(1).Trim(); //skip idx * * if(translation.StartsWith(":")) * translation = translation.Substring(1); */ if (translation.StartsWith("<strong>")) { translation = StringParser.ExtractRight("</strong>", translation); } string subsense_tag = "<em class=\"su\">"; if (false && translation.IndexOf(subsense_tag) > 0) { //extract senses string toptranslaton = translation.Substring(0, translation.IndexOf(subsense_tag)); toptranslaton = StringParser.RemoveAll("<", ">", toptranslaton); if (toptranslaton.StartsWith("a :")) { toptranslaton = toptranslaton.Substring(3); } result.Translations.Add(toptranslaton.Trim()); translation = translation.Substring(translation.IndexOf(subsense_tag)); translation = translation.Replace(subsense_tag, "<end>" + subsense_tag); translation += "<end>"; StringParser subparser = new StringParser(translation); string[] sub_defs_items = subparser.ReadItemsList(subsense_tag, "<end>"); foreach (string subtranslation in sub_defs_items) { translation = subtranslation.Substring(1).Trim(); //skip idx if (translation.StartsWith(":")) { translation = translation.Substring(1); //skip idx } translation = StringParser.RemoveAll("<", ">", translation); result.Translations.Add(translation.Trim()); } } else { translation = StringParser.RemoveAll("<", ">", translation); result.Translations.Add(translation.Trim()); } } } }