Сбой доступа к API книг через AppEngine с кодом ошибки 400

#java #json #google-app-engine #google-books

# #java #json #google-app-engine #google-книги

Вопрос:

Я получаю следующую ошибку при доступе к API-интерфейсам Google Books из приложения Google AppEngine.

Используется ключ API для серверного приложения.

Но если вы запускаете приложение локально в eclipse, проблем нет.

{
"code": 403,
"errors": [ {
"domain": "global",
"message": "Не удается определить местоположение пользователя для географически ограниченной операции.",
"причина": "Неизвестное местоположение"
 } ],
"сообщение": "Не удается определить местоположение пользователя для географически ограниченной операции".
}

Недостаточно информации об этом сценарии ошибки. Любая помощь приветствуется. Спасибо.

Ответ №1:

Ну, это может быть связано с тем, что IP-адрес не может быть использован для определения местоположения пользователя. Имеет смысл посмотреть на сообщение об ошибке и немного погуглить здесь:

https://productforums.google.com/forum /#!тема/книги-api/88Ml3YIpvLw

Попробуйте добавить amp;country=GB в конец запроса или любую другую букву 2, представляющую страну, из которой вы хотите выполнить поиск. (Подробнее здесь: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 )

Этот ответ в основном взят из ответа по данной ссылке, однако, похоже, он работает и требует некоторого поиска. Надеюсь, это поможет.

Ответ №2:

Этот следующий код решил мою проблему, используя сам API Google Books.

 ///////////////////////////////////////////////////

UrlFetchTransport url = new UrlFetchTransport();

final Books books = new Books.Builder(
    url, jsonFactory, null)
    .setApplicationName(APPLICATION_NAME)
    .setGoogleClientRequestInitializer(
    new GBookRequest()).build();

List volumesList = books.volumes().list("isbn:9780199562855");      

// Execute the query.
Volumes volumes = volumesList.execute();
    if (volumes.getTotalItems() == 0 || volumes.getItems() == null) {
    log.info("No matches found in GBooks.");
    return null;
}

///////////////////////////////////////////////////

public class GBookRequest extends BooksRequestInitializer {

    private static String apiKey = "xxxxxx";

    public GBookRequest() {
    super(apiKey);
    }

    @Override
    public void initializeBooksRequest(BooksRequest  request)
    throws IOException {

    request.set("country", "US");
    }
}

///////////////////////////////////////////////////