Найдите одну (1) книгу с API Google Книг для .Net

Я пытался в течение нескольких часов, но я не могу заставить его работать. Я использую следующий код (VB)

Private Async Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim credential As UserCredential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(New ClientSecrets With {.ClientId = "my key", .ClientSecret = "my secret"}, New String() {BooksService.Scope.Books}, "user", CancellationToken.None, New FileDataStore("Books.ListMyLibrary"))
        Dim service As New BooksService(New BaseClientService.Initializer With {.HttpClientInitializer = credential, .ApplicationName = "LibraryX"})

        'Dim bookselve As Bookshelves = Await service.Mylibrary.Bookshelves.List.ExecuteAsync
        Dim mm = service.Volumes.Get("9780330441230")

    End Sub

Это не дает мне информацию о книге (Верблюжий клуб, Дэвид Балдаччи)

Кто-нибудь может мне помочь?

Привет, Стивен

20131106

Я внес некоторые изменения:

Private Async Sub Form1_Load (отправитель как объект, e как EventArgs) обрабатывает MyBase.Load

    Dim credential As UserCredential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(New ClientSecrets With {.ClientId = "my key", .ClientSecret = "my secret"},
                                                                                         New String() {BooksService.Scope.Books}, "user", CancellationToken.None, New FileDataStore("Books.ListMyLibrary"))
    Dim service As New BooksService(New BaseClientService.Initializer With {.HttpClientInitializer = credential, .ApplicationName = "LibraryX"})

    'Dim bookselve As Bookshelves = Await service.Mylibrary.Bookshelves.List.ExecuteAsync
    Try
        rslt = Await service.Volumes.Get("9780330441230").ExecuteAsync
        Dim y As Integer = 0
    Catch gaex As Google.GoogleApiException
        ErrorMessageTextBox.Text = gaex.Message
    Catch ex As AggregateException
        ErrorMessageTextBox.Text = ex.Message
    End Try


End Sub

Но результат запроса:

enter code hereGoogle.Apis.Requests.RequestError Не удалось найти идентификатор тома. [404] Ошибки [ Сообщение [Идентификатор тома не найден.] Местоположение [ - ] Причина [notFound] Домен [глобальный] ]

Любая идея, каким должен быть VolumeId, чтобы получить информацию о книге от Google??


person user2953048    schedule 04.11.2013    source источник
comment
API ищет секрет и ключ клиента. Вы удалили их из своего примера выше или не включили их, когда пробуете код?   -  person Dave Swersky    schedule 04.11.2013
comment
Вы получаете исключение? Каково содержание мм?   -  person peleyal    schedule 04.11.2013
comment
Да, я намеренно оставил ключ en de secret msg из этого поста.   -  person user2953048    schedule 05.11.2013
comment
?mm {Google.Apis.Books.v1.VolumesResource.GetRequest} Alt: Ничего Страна: Ничего ETagAction: По умолчанию {0} Поля: Ничего HttpMethod: GET Ключ: Ничего Регистратор: {Google.Apis.Logging.NullLogger} Имя метода: get OauthToken: Ничего Партнер: Ничего PrettyPrint: Ничего Проекция: Ничего QuotaUser: Ничего RequestParameters: Count = 12 RestPath: volumes/{volumeId} Служба: {Google.Apis.Books.v1.BooksService} Служба: {Google.Apis.Books.v1 .BooksService} Источник: Nothing UserIp: Nothing VolumeId: 9780330441230   -  person user2953048    schedule 05.11.2013


Ответы (2)


Понятно! Вы должны использовать методы Execute или ExecuteAsync для объекта GetRequest. Итак, ваша последняя строка кода должна выглядеть так:

Dim mm = Await service.Volumes.Get("9780330441230").ExecuteAsync()

person peleyal    schedule 05.11.2013
comment
peleyal, большое спасибо, но я все еще не могу получить информацию о книге, см. мой исходный вопрос - person user2953048; 06.11.2013
comment
Вы уверены, что это правильный объем? Вы получаете 404, что означает, что этот том не существует. Попробуйте сначала получить его с помощью нашего Google API Explorer (разработчики .google.com/apis-explorer/#p/books/v1/), и после того, как вы увидите, что там все работает, вы должны попробовать тот же идентификатор с вашим кодом. ПОЖАЛУЙСТА, УДАЛИТЕ СВОИ КЛИЕНТСКИЕ СЕКРЕТЫ ИЗ ПРЕДОСТАВЛЕННОГО ПРИМЕРА КОДА И УДАЛИТЕ ЭТОТ КЛИЕНТ, ЗАТЕМ СОЗДАЙТЕ НОВЫЙ. ВЫ НЕ ДОЛЖНЫ ПРЕДОСТАВЛЯТЬ ЭТУ ИНФОРМАЦИЮ ОНЛАЙН! - person peleyal; 06.11.2013
comment
Привет, пелеял, ты прав, я изменил свой секретный ключ и программу, чтобы они больше не отображались. Я проверил ваш URL как минимум с 15 номерами ISBN, и все они ничего не дали. Я тестировал с английскими и голландскими книгами. Нет результатов! - person user2953048; 07.11.2013

Я использовал Google API Explorer и выполнил следующий запрос в методе books.volumes.list: q=intitle:"The Camel Club";inauthoer:David Baldacci

Вы можете найти его по следующей ссылке: https://developers.google.com/apis-explorer/#p/books/v1/books.volumes.list?q=intitle%253A%2522The+Camel+Club%2522%253Binauthor%253A+David+Baldacci&_h=13&.

Я не эксперт по этому API, но всю необходимую информацию я нашел в https://developers.google.com/books/docs/v1/using#PerformingSearch. Я почти уверен, что вы можете оптимизировать запрос, но это хорошее место для начала.

ОБНОВЛЕНИЕ (добавление кода .NET):
Каждое действие, доступное с помощью Google API Explorer, также доступно с использованием клиентской библиотеки .NET, как показано ниже:

var service = new BooksService(new BaseClientService.Initializer()
    {
        // HttpClientInitializer = credential,
        ApplicationName = "Books API Sample",
    });
var volumes = await service.Volumes.List(
      "intitle:\"The Camel Club\";inauthor: David Baldacci").ExecuteAsync();
foreach (var item in volumes.Items)
{
    Console.WriteLine(item.VolumeInfo.Title);
}

Обратите внимание, что в этом случае нам не нужен UserCredential, потому что мы не запрашиваем конкретные данные пользователя. Если вы хотите запросить Mylibrary, вы должны использовать UserCredential и аутентифицированный запрос.

person peleyal    schedule 07.11.2013
comment
Эй, пелеял, я думаю, мы говорим на разных языках. Вы говорите об общении через REST, например, с URL-адресом. Я говорю о поиске книг через клиентскую библиотеку DOTNET. Это большая разница. - person user2953048; 07.11.2013
comment
Это идет в правильном направлении, спасибо peleyal. Еще один вопрос: Dim rslt = Await service.Volumes.List(isbn: 9789022992364).ExecuteAsync Dim rslt = Await service.Volumes.Get(q=isbn: 9789022992364).ExecuteAsync Первый запрос дает результат 3 книг, из которых первый запрошен, второй запрос по-прежнему выдает 404 Not Found. Знаете ли вы, какой должна быть строка запроса для запроса Volumes.Get, чтобы получить хороший результат? - person user2953048; 07.11.2013