3

我正在尝试使用谷歌翻译进行翻译,但它给出了错误服务器不可用。我的猜测是,当我尝试在地址栏中输入相同的内容时,我们会收到一个验证码来填写。如果我们通过验证码,它只会下载一个 txt 文件。我认为这可能是验证码页面的问题,而不是服务器不可用的问题。

调用函数。

string result = TranslateGoogle("Life is great and one is spoiled when it goes on and on and on", "en", "hi");
Console.WriteLine(result);

翻译谷歌功能

public string TranslateGoogle(string text, string fromCulture, string toCulture)
{
    fromCulture = fromCulture.ToLower();
    toCulture = toCulture.ToLower();
    string[] tokens = fromCulture.Split('-');
    if(tokens.Length > 1)
        fromCulture = tokens[0];

    tokens = toCulture.Split('-');
    if(tokens.Length > 1)
        toCulture = tokens[0];

    string url = string.Format(@"http://translate.google.com/translate_a/t?client=j&text={0}&hl=en&sl={1}&tl={2}", System.Uri.EscapeDataString(text), fromCulture, toCulture);

    string html = null;
    try
    {
        WebClient web = new WebClient();

        web.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0");
        web.Headers.Add(HttpRequestHeader.AcceptCharset, "UTF-8");

        web.Encoding = Encoding.UTF8;
        html = web.DownloadString(url);
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
        return null;
    }

    string result = Regex.Match(html, "trans\":(\".*?\"),\"", RegexOptions.IgnoreCase).Groups[1].Value;
    return result;
}

预期产出

{
    "sentences":
    [
        {
            "trans":"जीवन महान है और इस पर और पर और पर चला जाता है जब एक खराब है",
            "orig":"Life is great and one is spoiled when it goes on and on and on",
            "translit":"Jīvana mahāna hai aura isa para aura para aura para calā jātā hai jaba ēka kharāba hai",
            "src_translit":"",
            "backend":0
        }
    ],
    "src":"en",
    "server_time":85
}

这就是我得到的。

“远程服务器返回错误:(503) 服务器不可用。”

我应该怎么做才能获得程序的预期输出。

4

2 回答 2

1

我也一直在尝试使用 Google TTS,但它不再起作用了。Google Translate v2 不再支持 TTS (请参见此处)

由于您使用的是 C#,因此您可以更好地将语音合成与 System.Speech.Synthesis 一起使用

 public static void TextToSpeech (string utterance)
    {
        SpeechSynthesizer speaker = new SpeechSynthesizer();
        speaker.Speak(utterance);
        return;
    }

希望这能回答你的一些问题。目前还没有验证码的解决方法。

于 2015-10-09T09:18:31.960 回答
1

抱歉,这不是一个答案(但也许社区可以提供帮助,让它成为一个真正的答案),但我需要在这里发帖,因为在评论中我不能很好地格式化。

我尝试了您的示例,似乎 google 认为您正在尝试滥用他们的服务,这是客户端发送的内容:

GET http://translate.google.com/translate_a/t?client=j&text=Life%20is%20great%20and%20one%20is%20spoiled%20when%20it%20goes%20on%20and%20on%20and%20on&hl=en&sl=en&tl=hi HTTP/1.1
Accept-Charset: UTF-8
User-Agent: Mozilla/5.0
Host: translate.google.com
Proxy-Connection: Keep-Alive

Google 将此请求发送到http://ipv4.google.com/sorry/IndexRedirect ?continue= http://translate.google.com/translate_a/t%3Fclient%3Dj%26text%3DLife%2520is%2520great%2520and%2520one %2520is%2520spoiled%2520when%2520it%2520goes%2520on%2520and%2520on%2520and%2520on%26hl%3Den%26sl%3Den%26tl%3Dhi&q=CGMSBFgz6X4YkI3frwUiGQDxp4NLo-25RV2Fk8i7Uz

在这里,如果从浏览器导航它会显示验证码,所以我尝试使用 Web 浏览器 (Firefox) 导航程序生成的 url。这就是它所显示的: 谷歌验证码

对不起意大利人,它说来自 PC 的流量异常。一旦您正确提示验证码,您的浏览器就会为下一个请求保存一个 cookie(这样您就不会再次获得验证码),并且您将被重定向到翻译后的句子。

以下是下一次导航时浏览器请求的示例:

GET http://translate.google.com/translate_a/t?client=j&text=Life%20is%20great%20and%20one%20is%20spoiled%20when%20it%20goes%20on%20and%20on%20and%20on&hl=en&sl=en&tl=hi HTTP/1.1
Host: translate.google.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: NID=71=a__xJqNU4C1oQTkLrMCSL4CLdR_nelc5kbjcUwgvJUBILn2SOHrfUeIg-9vWfy6tRHVh9Z4yXT1dpwnnHIXf5i2NLlCuDn-joB1tpYo_9JM4_zQnaaYO7UCsFoFILogS8G4XTt1M8esMgUnG_JzoMWSG81Q-JfGk1_IQsb5gIHyHcKroJeNEUp4bnMkiOvZgj1Sk; SID=DQAAAP8AAADnhNjYLtZUYSPbm-V_62WNnlSj8pUKPRnUfLR-Fp18gYeyWsC93YgLn5yoy0L3FLPb2_yNM7ysBQPCnqJGCy6Or6i2WLHicMaVFr0_0LT4xM2KECq3F6Nczc6V7RO8G5VYnHNLXjZ4ZqVMRTfG3E-Ljrgq_0zg_bhi1DT2CeWoBgBFSVTh_cyMjjYdCRiPpyEFRAtUp_48EKmd62YzJHyPeD-JfXTvVlyacDavPzl4L5yf1KmJ37c-j_Px8dYVKHn5tE_jAKHcFjJ717mY85bjyyUasTKoPc_w9AhnVQXE-v-jBsT4rvbJ3khIqiddjagnQ6LpVCMrRwZ9OwU2uubG; HSID=AX4zDBkEvzB-ZdrnV; APISID=ZMLtLIl8PnW6C6X2/A20GPxC9NiRmY3t1T; _ga=GA1.3.1956353841.1435321193; PREF=ID=1111111111111111:FF=0:LD=it:TM=1436338644:LM=1437143045:V=1:S=me455Y_9_LyG2PFU; GOOGLE_ABUSE_EXEMPTION=ID=52cecb7a44e552cc:TM=1442301156:C=c:IP=88.51.233.126-:S=APGng0tXDRxFvrRNJHu-uk3IRqKVpJAIIQ
Connection: keep-alive

如果我将此行添加到 C# 代码中作为证明:

web.Headers.Add(HttpRequestHeader.Cookie, "NID=71=a__xJqNU4C1oQTkLrMCSL4CLdR_nelc5kbjcUwgvJUBILn2SOHrfUeIg-9vWfy6tRHVh9Z4yXT1dpwnnHIXf5i2NLlCuDn-joB1tpYo_9JM4_zQnaaYO7UCsFoFILogS8G4XTt1M8esMgUnG_JzoMWSG81Q-JfGk1_IQsb5gIHyHcKroJeNEUp4bnMkiOvZgj1Sk; SID=DQAAAP8AAADnhNjYLtZUYSPbm-V_62WNnlSj8pUKPRnUfLR-Fp18gYeyWsC93YgLn5yoy0L3FLPb2_yNM7ysBQPCnqJGCy6Or6i2WLHicMaVFr0_0LT4xM2KECq3F6Nczc6V7RO8G5VYnHNLXjZ4ZqVMRTfG3E-Ljrgq_0zg_bhi1DT2CeWoBgBFSVTh_cyMjjYdCRiPpyEFRAtUp_48EKmd62YzJHyPeD-JfXTvVlyacDavPzl4L5yf1KmJ37c-j_Px8dYVKHn5tE_jAKHcFjJ717mY85bjyyUasTKoPc_w9AhnVQXE-v-jBsT4rvbJ3khIqiddjagnQ6LpVCMrRwZ9OwU2uubG; HSID=AX4zDBkEvzB-ZdrnV; APISID=ZMLtLIl8PnW6C6X2/A20GPxC9NiRmY3t1T; _ga=GA1.3.1956353841.1435321193; PREF=ID=1111111111111111:FF=0:LD=it:TM=1436338644:LM=1437143045:V=1:S=me455Y_9_LyG2PFU; GOOGLE_ABUSE_EXEMPTION=ID=52cecb7a44e552cc:TM=1442301156:C=c:IP=88.51.233.126-:S=APGng0tXDRxFvrRNJHu-uk3IRqKVpJAIIQ"); //This is the cookie of the request of Firefox

谷歌发送翻译后的句子"जीवन महान है और इस पर और पर और पर चला जाता है जब एक खराब है"

是一个似乎可以工作的项目,它基本上在url中添加了不同的参数。

GoogleTranslator 通过直接调用 Google 的在线翻译表单调用的翻译 API 并解析结果来工作。

于 2015-09-15T07:26:57.307 回答