API инструментария переводчика Google - google-api-java-client Вход для клиентов 403 Запрещено - PullRequest
0 голосов
/ 23 января 2011

Я только что реализовал API инструментария переводчика Google, используя библиотеку google-api-java-client. Проблема в том, что я могу аутентифицироваться с помощью clientLogin со старой клиентской библиотекой "gdata", но мне не удается сделать это с помощью google-api-java-client.

Это довольно просто, но я все еще получаю 403 запрещенных ответа. Запросы (старые / новые) практически одинаковы, но отличаются только токены авторизации. Google просто отправляет мне токен, с которым я не могу аутентифицироваться ...

Пожалуйста, помогите, я провел час со всей реализацией модели, а затем 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;
 }
}

1 Ответ

2 голосов
/ 23 января 2011

Итак, я реализовал api toolkit api через час, а затем застрял на 4 часа при авторизации clientLogin ....

правильная настройка запроса:

gdataVersion = "1.0"; 
and GET request 

К сожалению, во время попытки у меня было либо

1.0 and POST 

, либо

2.0 and GET 

. Это означает, что gdataVersion = "2"; работает только для API, для которых уже реализован «новый» клиент...afaik

...