0

google-api-java-clientライブラリを使用してGoogleトランスレータツールキットAPIを実装しました。問題は、古い「gdata」クライアントライブラリでclientLoginを使用して認証できることですが、google-api-java-clientでは認証できません。

非常に簡単ですが、まだ403の禁止された応答を受け取っています。リクエスト(古い/新しい)はほとんど同じですが、認証トークンのみが異なります。Googleから、認証できないトークンが送られてきました...

誰か助けてください、私はモデルの実装全体に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 = "user@gmail.com";
  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;
 }
}
4

1 に答える 1

2

そのため、トランスレータツールキットAPIを1時間で実装した後、clientLogin認証で4時間スタックしました。

リクエストの適切な設定は

gdataVersion = "1.0"; 
and GET request 

残念ながら、試してみる過程で私はどちらかを持っていました

1.0 and POST 

また

2.0 and GET 

これはgdataVersion = "2";、「新しい」クライアントがすでに実装されているAPIでのみ機能していることを意味します... afaik

于 2011-01-23T13:48:07.557 に答える