如何使用谷歌翻译API翻译单词?

时间:2014-08-19 07:04:50

标签: c#

我正在尝试使用谷歌翻译的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);
}

在上面这个方法中,我传递参数,比如wordWelcomelangcodehi

所以我会有网址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

2 个答案:

答案 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文档。