2011-01-23 7 views
0

방금 ​​google-api-java-client 라이브러리를 사용하여 Google 번역사 도구 함 API를 구현했습니다. 문제는 이전 "gdata"클라이언트 라이브러리로 clientLogin을 사용하여 인증 할 수 있지만 google-api-java-client로 관리 할 수 ​​없다는 것입니다.Google 번역사 도구 함 API - google-api-java-client 클라이언트 로그인 403 금지됨

매우 간단하지만 403 금지 된 응답을 받고 있습니다. 요청 (이전/신규)은 거의 동일하지만 인증 토큰 만 다릅니다. 구글은 내가 인증 할 수없는 토큰을 보냈다.

아무도 도와 주길 바란다. 나는 전체 모델 구현과 1 시간을 보낸 다음이 지옥에서 3 시간을 보냈다.

public class GttClient { 
public static void main(String[] args) { 

    Debug.enableLogging(); 
    HttpTransport transport = setUpTransport(); 

    try { 
    authenticateWithClientLogin(transport); 
    printResults(executeGet(transport, GttUrl.forDocuments())); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 

private static HttpTransport setUpTransport() { 
    HttpTransport transport = GoogleTransport.create(); 
    GoogleHeaders headers = (GoogleHeaders) transport.defaultHeaders; 
    headers.setApplicationName("Google-PredictionSample/1.0"); 
    headers.gdataVersion = "2.0"; 
    AtomParser parser = new AtomParser(); 
    parser.namespaceDictionary = Namespace.DICTIONARY; 
    transport.addParser(parser); 
    return transport; 
} 

private static void authenticateWithClientLogin(HttpTransport transport) 
    throws IOException { 
    ClientLogin clientLogin = new ClientLogin(); 
    clientLogin.authTokenType = "gtrans"; 
    clientLogin.accountType = "HOSTED_OR_GOOGLE"; 
    clientLogin.username = "[email protected]"; 
    clientLogin.password = "password"; 
    clientLogin.authenticate().setAuthorizationHeader(transport); 
} 

public static Feed executeGet(HttpTransport transport, GttUrl url) 
    throws IOException { 

    HttpRequest request = transport.buildGetRequest(); 
// url.fields = GData.getFieldsFor(Feed.class); 
    request.url = url; 

    return request.execute().parseAs(Feed.class); 
} 

}

public class GttUrl extends GoogleUrl { 

static final String ROOT_URL = "https://translate.google.com/toolkit/feeds"; 

@Key("sharedwith") 
public String sharedwith; 

@Key("onlydeleted") 
public String onlydeleted; 

@Key("scope") 
public String scope; 

public GttUrl(String url) { 
    super(url); 
    if (Debug.ENABLED) { 
    this.prettyprint = true; 
    } 
} 

public static GttUrl forRoot() { 
    return new GttUrl(ROOT_URL); 
} 

public static GttUrl forDocuments() { 
    GttUrl result = forRoot(); 
    result.pathParts.add("documents"); 
    return result; 
} 

public static GttUrl forTranslMemories() { 
    GttUrl result = forRoot(); 
    result.pathParts.add("tm"); 
    return result; 
} 

public static GttUrl forGlossaries() { 
    GttUrl result = forRoot(); 
    result.pathParts.add("glossary"); 
    return result; 
} 
} 

답변

2

그래서 나는 한 시간 번역기 툴킷 API를 구현하고 나는 ClientLogin에 인증에 4 시간 동안 갇혀 ....

의 적절한 설정을 가지고 요청은

gdataVersion = "1.0"; 
and GET request 

중 하나입니다. 시도 중에 불행히도

1.0 and POST 

또는

2.0 and GET 

그것은 gdataVersion = "2";는 "새로운"클라이언트가 이미 구현되어있는 API를 만 작동하고 있음을 의미합니다 ... AFAIK

관련 문제