iosios7google-translatensurlerrordomain

Google Translate API on iPhone


I am writing a simple code, in which I am using Google API for translation services, but I am getting the following error:

Connection failed: Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x176c80a0 {NSUnderlyingError=0x175c8d00 "bad URL", NSLocalizedDescription=bad URL}

This is the code I have written:

  #import "ViewController.h"
  #import"SBJson.h"

  @interface ViewController ()
  @property (strong, nonatomic) IBOutlet UITextField *textfield;
  @property (strong, nonatomic) IBOutlet UIButton *go;
  @property (strong, nonatomic) IBOutlet UITextView *textview;
- (IBAction)translate:(id)sender;

  @property (strong, nonatomic) NSMutableArray *translations;
  @property (strong, nonatomic)NSString *_lastText;
  @property (nonatomic, copy) NSString * lastText;
  @end

 @implementation ViewController
 @synthesize lastText = _lastText;

- (void)viewDidLoad
 {
 [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//Initializing the translation array
 _translations = [[NSMutableArray alloc] init];
 }

 - (void)didReceiveMemoryWarning
 {
  [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
 }

- (void)performTranslation {

responseData = [[NSMutableData data] init ];

NSString *langString = @"en|ja";
NSString *textEscaped = [_lastText 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    

NSString *langStringEscaped = [langString    
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

//My_Key=Google generated key
NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/language/translate/v2?
key={My_key}&source=en&target=de&q=%@",textEscaped];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

}
- (IBAction)translate:(id)sender {
[_translations removeAllObjects];
[_textfield resignFirstResponder];
_go.enabled=NO;
self.lastText = _textfield.text;
[_translations addObject:_lastText];
_textview.text = _lastText;

[self performTranslation];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
_textview.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]];
_go.enabled = YES;
 NSLog([NSString stringWithFormat:@"Connection failed: %@", [error description]]);
 }

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

NSString *responseString = [[NSString alloc] initWithData:responseData   
encoding:NSUTF8StringEncoding];

NSMutableDictionary *luckyNumbers = [responseString JSONValue];
if (luckyNumbers != nil) {

    NSDecimalNumber * responseStatus = [luckyNumbers objectForKey:@"responseStatus"];
    if ([responseStatus intValue] != 200) {
        _go.enabled = YES;
        return;
    }

    NSMutableDictionary *responseDataDict = [luckyNumbers objectForKey:@"responseData"];
    if (responseDataDict != nil) {
        NSString *translatedText = [responseDataDict objectForKey:@"translatedText"];
        [_translations addObject:translatedText];
        self.lastText = translatedText;
        _textview.text = [_textview.text stringByAppendingFormat:@"\n%@", translatedText];
        _go.enabled = YES;
    }
}

}
@end

Solution

  • The problem is like it says. The URL has been generated incorrectly. Try:

    NSString * source = @"en";
    NSString * target = @"ja";
    NSString * key = @"YOUR-KEY";
    
    NSString * url = [NSString stringWithFormat:@"https://www.googleapis.com/language/translate/v2?key=%@&source=%@&target=%@",key,source,target];
    

    and see what response you get.