多语言的Google翻译API返回(503)服务器不可用。

3

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

调用函数。

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

翻译 Google 函数

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)服务器不可用。"

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

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;
    }

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


1
抱歉,这不是一个答案(但也许社区可以帮助并让这成为真正的答案),但我需要在这里发布,因为在评论中我无法很好地格式化。
我尝试了您的示例,似乎谷歌认为您正在试图滥用他们的服务,这是客户端发送的内容:
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

谷歌向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-2RV2k8i7UPzIRYKSuT5usFkUU

如果从浏览器导航到此处,会显示验证码,因此我尝试使用Web浏览器(Firefox)导航程序生成的URL。

它显示如下:

Google Captcha

很抱歉,这里是意大利语,意思是说有异常流量来自计算机。一旦您正确输入验证码,浏览器将为下次请求保存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通过直接调用谷歌的翻译API来工作,该API由其在线翻译表单调用并解析结果。


似乎我的问题应该是如何跳过验证码?太棒了,让我看看我们能做什么。 - Mohit S
@MohitShrivastava 我编辑了答案,并附上了一个调用Google翻译API的链接。 - Matteo Umili
让我看一下。如果它有效,我会将其标记为答案。 - Mohit S
这并不像预期的那样工作。但我真的很感激你的帮助。 - Mohit S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接