我正在尝试使用谷歌翻译的api获得转换后的文本。
public JsonResult getCultureMeaning(string word, string langcode)
{
string url = String.Format("https://translate.google.com/#en/" + langcode+ "/" + word + "");
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
string m = "";
foreach (HtmlNode node in doc.DocumentNode.SelectSingleNode("//span[@id='result_box']").ChildNodes)
{
m += node.InnerHtml;
}
return Json(m, JsonRequestBehavior.AllowGet);
}
在上面这个方法中,我传递参数,比如word
是Welcome
而langcode
是hi
。
所以我会有网址https://translate.google.com/#en/hi/welcome,结果是आपका स्वागत है
但是当我选择带有子节点as- doc.DocumentNode.SelectSingleNode("//span[@id='result_box']").ChildNodes)
的结果容器时,它在结果中找不到这个结果容器。因此,在我的案例中,我没有得到这个api工作。
修改 - 来自网址的结果容器 -
<span id="result_box" class="short_text" lang="hi"><span class="hps">आपका स्वागत है</span></span>
我应该如何处理它以使其正常工作。作为参考,我使用的是HtmlAgilityPack
。
答案 0 :(得分:1)
如果您检查页面请求,您可能会注意到,通过AJAX完成的实际翻译请求,您的翻译的示例查询是:https://translate.google.com/translate_a/single?client=t&sl=en&tl=hi&hl=en&dt=bd&dt=ex&dt=ld&dt=md&dt=qc&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&ssel=0&tsel=0&q=welcome
它返回JSON,你可以检查它并得到你想要的东西(数据非常大,所以我不会在这里发布)
答案 1 :(得分:0)
Agility pack仅请求返回文档元素,在ajax请求完成后无法请求内容。感谢@Uriil指出了这个问题。
但是,我可以使用WebClient
这是我做的 -
public JsonResult getCultureMeaning(string word, string languagePair)
{
string languagePair = "en|" + langua + "";
string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", word, languagePair);
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.Encoding.UTF8;
string result = webClient.DownloadString(url);
result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
result = result.Substring(result.IndexOf(">") + 1);
result = result.Substring(0, result.IndexOf("</span>"));
result = HttpUtility.HtmlDecode(result.Trim());
return Json(result, JsonRequestBehavior.AllowGet);
}
适用于所有文化对。转换en|en
除外,在这种情况下,它会请求带有结果的整个HTML
文档。