iPhone SDK - Google TTS и кодирование

Я разрабатываю приложение для iphone для преобразования текста в речь, которое поддерживает несколько языков.

Вот мой URL-адрес запроса

requestUrlStr = @"http://www.translate.google.com/translate_tts?tl=en&q=hello";

для английского у вышеуказанного URL нет проблем

но для китайцев

requestUrlStr = @"http://www.translate.google.com/translate_tts?tl=zh-TW&q=你好";

Я знаю, что приведенный выше URL-адрес даст "недопустимый URL-адрес", поэтому я использовал метод follow для кодирования строки в UTF-8

requestUrlStr = [requestUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Это станет

http://www.translate.google.com/translate_tts?tl=zh-CN&q=%E4%BD%A0%E5%A5%BD

Тогда Google TTS не сможет распознать этот китайский текст.


person a380    schedule 07.05.2011    source источник
comment
кажется, есть некоторые ограничения для реферера ... может быть, проблема в этом ... а не в URL: jalam1001.posterous.com/   -  person govi    schedule 08.05.2011


Ответы (1)


Вы должны притвориться User-Agent, отличным от значения по умолчанию (appName и т. Д.) В вашем NSURLRequest. Попробуйте это (я использую греческий язык) ...

NSString* userAgent = @"Mozilla/5.0";

NSURL *url = [NSURL URLWithString:[@"http://www.translate.google.com/translate_tts?tl=el&q=Καλημέρα" 
                                   stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];


NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];

[request setValue:userAgent forHTTPHeaderField:@"User-Agent"];


NSURLResponse* response = nil;
NSError* error = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request
                                     returningResponse:&response
                                                 error:&error];



[data writeToFile:@"/var/tmp/tts.mp3" atomically:YES];

ОБНОВЛЕНИЕ 2017 г.

Поскольку нашим любимым компаниям нравится обновлять и осуждать вещи, вот приведенный выше пример, каким он должен быть сейчас ...

NSString* text = @"καλημέρα";
NSString* lang = @"el";

NSString* sUrl = [NSString stringWithFormat:@"https://translate.google.com/translate_tts?q=%@&tl=%@&client=tw-ob", text, lang];
sUrl = [sUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
NSURL* url = [NSURL URLWithString:sUrl];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Mozilla/5.0" forHTTPHeaderField:@"User-Agent"];

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                                                      delegate:nil
                                                 delegateQueue:[NSOperationQueue mainQueue]];

[[session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                [data writeToFile:@"/var/tmp/tts.mp3" atomically:YES];
            }
  ] resume];

Символ ...delegate:nil delegateQueue:[NSOperationQueue mainQueue] можно не указывать.

person Vassilis    schedule 16.05.2011
comment
Работает отлично. Я не знаю, сколько раз мне нужно сказать тебе спасибо. Вы действительно очень помогли моей проблеме. Ты рок !! - person a380; 17.05.2011
comment
У меня аналогичная проблема на android, и я не получил ответов. что именно ты здесь делаешь? - person Amanni; 20.04.2012
comment
Вы пробовали сделать запрос через браузер? Гугл вернул мп3? - person Vassilis; 21.04.2012