2011-11-10 4 views
0

이것은 Google 번역을위한 파서입니다. api v1에서 api v2 (유료)로 전환했지만 문제가 있습니다. 번역은 로그에서 수행되지만 responseStatus는 200이 아니라 0입니다. 로그를 볼 수 있으므로 변환이 완료됩니다. Google의 페이지에서 json에서 말한 내용은 "200 OK"상단에도 표시되어야하지만 표시되지 않습니다. 아이디어?Xcode : google api v1 to api v2 (google translate)

-(void)getText:(NSString *)text lan1:(NSString *)lan1 lan2:(NSString *)lan2 { 
translate = [[NSString stringWithString:text] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
lanTranslate = [[NSString stringWithString:lan1] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
lanTranslated = [[NSString stringWithString:lan2] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
[self performTranslation]; 
} 
-(void)performTranslation { 

responseData = [NSMutableData data]; 

NSString *_translation = [NSString stringWithFormat:@"%@&target=%@", lanTranslate,lanTranslated]; 
NSString *translation = [_translation stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/language/translate/v2?key=MYKEY&source=%@&q=%@",translation, translate]; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; 

NSURLConnection *go = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
[go start]; 


} 

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

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

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

NSLog(@"res %@ js%@",responseString, JSONDictionary); 


if (JSONDictionary != nil) 
{ 
    NSDecimalNumber * responseStatus = [JSONDictionary objectForKey:@"responseStatus"]; 
    if ([responseStatus intValue] != 200) { 

     **NSLog(@"responseStatus %i",(int)responseStatus);** 

     return; 
    } 

    NSMutableDictionary *responseDataDict = [JSONDictionary objectForKey:@"responseData"]; 
    if (responseDataDict != nil) { 
     NSString *translatedText = [responseDataDict objectForKey:@"translatedText"]; 
     translated = [NSString stringWithString:translatedText];  
     [viewSuperiore translate:translated]; 

    } 
} 


} 

로그

res { 
"data": { 
"translations": [ 
{ 
"translatedText": "text to be translated" 
} 
] 
} 
} 
js{ 
data =  { 
    translations =   (
        { 
      translatedText = "text to be translated"; 
     } 
    ); 
}; 
} 

답변

0

HTTP 상태 코드는 구글 번역 API v2의 결과의 일부가 될 것 같지 않습니다.

(. "responseStatus"@ 키가 JSON 페이로드에 존재하지 않기 때문에 즉, 위의 코드에서 0을 얻을)

솔루션 (나를 위해 작동) : 당신은 상태를 검색한다 요청의 응답에서 반환 코드 중 어느 하나에 연결 : didReceiveResponse : 발신 한 후 대리인 또는 오른쪽 sendSynchronousRequest : returningResponse 오류 : 동기 요청 :

NSInteger responseStatus = [(NSHTTPURLResponse *) 응답에 statusCode];

희망이 도움이됩니다.