#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");
}
}
///////////////////////////////////////////////////