首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode:切换到google api v1 to api v2 (google翻译)

Xcode:切换到google api v1 to api v2 (google翻译)
EN

Stack Overflow用户
提问于 2011-11-11 02:15:36
回答 1查看 712关注 0票数 0

这是谷歌翻译的解析器。我从v1接口切换到v2 (付费)接口,但我有一个问题。转换是在日志中完成的,但是responseStatus是0而不是200。您可以查看日志,翻译已完成。在Google的页面上,json说应该也会出现在顶部的"200 OK",但并没有出现。想法?

代码语言:javascript
复制
-(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];

    }
}


}

日志

代码语言:javascript
复制
 res {
 "data": {
 "translations": [
 {
 "translatedText": "text to be translated"
 }
 ]
 }
 }
js{
data =     {
    translations =         (
                    {
            translatedText = "text to be translated";
        }
    );
};
}
EN

回答 1

Stack Overflow用户

发布于 2011-12-30 01:10:37

HTTP状态代码似乎不是google translate API v2结果的一部分。

(换句话说,您在上面的代码中得到了一个0,因为键@"responseStatus“没有出现在JSON有效负载中。)

解决方案(适用于我):您应该从请求的响应中检索状态代码,该响应在connection:didReceiveResponse: delegate中返回,或者在为同步请求调用sendSynchronousRequest:returningResponse:error:之后立即返回:

NSInteger responseStatus = (NSHTTPURLResponse*)response statusCode;

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8084286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档