O título deste post poderia ser 'Getting data about a book using the ISBN number', mas achei melhor o título somente em português:
Google Books API - Como obter dados de uma lista de livros com ISBN no Excel
Acho que exprimirá melhor a intenção do conteúdo abaixo. Desenvolvi este conteúdo, não tanto pela utilidade prática em si, a qual não é totalmente inútil, uma vez que podemos consultar uma ampla lista de títulos de livros de uma planilha Excel, por exemplo, num dos maiores repositórios de dados sobre livros no mundo.
Minha verdadeira intenção é a de estimular a constante interação com dados oriundos da Web, neste caso a interação com a excelente API do Google Books.
É desnecessário dizer que esse código poderia ser implementado em qualquer produto da suíte MS Office, ou fora dela, que processe um código VBA.
Google Book API
Olharemos para a forma como a API do Google Books responde a um pedido detalhado a partir do respectivo número ISBN de um livro. Usando esses dados, completaremos as colunas da nossa planilha.
O Google oferece uma API rica e subutilizada. Neste exemplo vamos usar uma pequena parte dela para resolver um problema específico que os bibliotecários muitas vezes têm:
Como obter dados de uma lista de livros com ISBN no Excel?
Implementando o código no Excel
Digamos que precisemos completar uma tabela de números de ISBN, preenchendo várias outras colunas com atributos a partir deste número.
A tabela completa será similar a esta:
O nosso código buscará uma coluna com o título ISBN que será usado como o pedido de livros à biblioteca do Google. Quaisquer outras colunas que correspondam aos nomes de campos retornados pelo Google serão preenchidas. Nos casos em que existam potencialmente vários valores (por exemplo, autores), serão separados por vírgulas. Todas as colunas cujas as posições não correspondam aos campos retornados pelo Google Books serão ignorados e o seu conteúdo ficará intacto.
Onde obter o código
Criaremos um módulo chamado 'isbnExample' na planilha.
Resumo dos dados
O primeiro passo é fazer com que a tabela de entrada / saída seja abstraída da sua posição física usando classes de manipulação de dados. Em seguida, verificamos se há a coluna ISBN, processamos a tabela contra a API do Google Books, e, finalmente, atualizamos a planilha.
Public Sub isbnExample()Dim dSet As cDataSetSet dSet = New cDataSetWith dSet' criar um conjunto de dados (recordset) na planilha ISBN.populateData wholeSheet("isbn"), , "isbn", , , , TrueIf .where Is Nothing ThenMsgBox ("Nenhuma informação para processar...")Else'verifique temos a coluna ISBN presenteIf .headingRow.validate(True, cISBNColumnHeading) Then' se não houvesse nenhuma atualização então executa o commitIf processISBN(dSet) > 0 Then.bigCommitEnd IfEnd IfEnd IfEnd WithSet dSet = NothingEnd Sub
Obtendo respostas da API do Google Books
Cada linha da planilhas será passada para a API com uma consulta ao número ISBN, e retornará uma string de tudo o que o Google encontrar sobre o livro.
Private Function processISBN(ds As cDataSet) As LongDim dSet As cDataSet, cb As cBrowser, dr As cDataRowDim jo As cJobject, job As cJobject, n As LongDim sWire As String' Recebe detalhes dum livro pelo número de ISBN.Set cb = New cBrowserSet jo = New cJobjectLet n = 0For Each dr In ds.rowsWith dr.cell(cISBNColumnHeading)Let sWire = cb.httpGET(cISBNGoogleBooks & .toString)Set job = jo.deSerialize(sWire)If Not job.isValid ThenMsgBox ("Código ISBN incorreto! " & .toString & "-" _& sWire)ElseIf Not job.childExists("error") Is Nothing ThenMsgBox ("O Google Books recusa-se operar com este ISBN " _& .toString _& "-" & job.child("error").serialize)ElseIf job.childExists("Items") Is Nothing _Or job.childExists("totalItems") Is Nothing ThenMsgBox ("Não foi encontrado nenhuma informação para este ISBN " _& .toString _& "-" & job.serialize)ElseIf job.child("totalItems").value <> 1 ThenMsgBox ("Múltiplas entradas para " _& .toString _& "-" & job.child("totalItems").serialize)Else' Preenche a linha.Let n = n + rowProcess(dr, job.child("Items"))End IfEnd WithNext drLet processISBN = nEnd Function
Preenchendo as colunas com os dados retornados
Para cada linha que havíamos executado uma consulta, verificaremos se há qualquer nome de coluna correspondente aos nomes dos campos de resposta da consulta, e os preencheremos, então lidaremos com as várias colunas, separando-as nos vários valores por vírgulas.
Private Function rowProcess(dr As cDataRow, job As cJobject) As LongDim hc As cCell, n As Long, jo As cJobject, jom As cJobjectLet n = 0For Each hc In dr.parent.headings' Quaisquer títulos que estiverem presentes no conjunto de dados retornados' no json serão preenchidos.With hcIf .toString <> cISBNColumnHeading ThenSet jo = job.find(.toString)If Not jo Is Nothing ThenWith dr.cell(.column)' Se forem múltiplas, inclue na matriz (array) separados por vírgulasIf jo.isArrayRoot ThenLet .value = vbNullStringIf jo.hasChildren ThenFor Each jom In jo.childrenIf .toString <> vbNullString ThenLet .value = .value & ","End IfLet .value = .value & jom.toStringNext jomEnd IfElseLet .value = jo.valueEnd IfEnd WithLet n = n + 1End IfEnd IfEnd WithNext hcLet rowProcess = nEnd Function
Lembre-se que estamos apenas arranhando a superfície desta excelente API. Você poderia facilmente usar outros recursos para criar todos os tipos de consultas sofisticadas a partir do ISBN.
Como sempre estou ansioso para o seu feedback, comentários e perguntas.
O que é ISBN?
International Standard Book Number, mais conhecido pela sua sigla ISBN, é o Número Padrão Internacional de Livro: um sistema identificador único para livros e publicações não periódicas. Foi criado no Reino Unido, em 1967, pela livraria W H Smith, sendo chamado inicialmente de "Standard Book Numbering" (SBN). Desde então, passou a ser amplamente empregado tanto pelos comerciantes de livros quanto pelas bibliotecas, até que, em 1972, a International Organization for Standardization transformou-o em uma norma padrão internacional: a ISO 2108.
Emissão de ISBN
A emissão dos números ISBN é específico de cada país e é adaptado aos objetivos nacionais de cada um. No Canadá, a emissão de ISBN é efetuada sem custos, tendo como objetivo estimular a cultura. No Reino Unido e Estados Unidos, a emissão do ISBN tornou-se um centro de lucro para as empresas responsáveis. Editores e autores devem portanto obter os números ISBN da agência nacional de cada pais. Uma lista de agências ISBN está disponível no site da International ISBN Agency.
Outros acrônimos conhecidos:
ASIN (Amazon Standard Identification Number)CODEN (Publicações periódicas; substituído pelo ISSN para publicações actuais)DOI (Digital Object Identifier)ESTC (English Short Title Catalogue)ETTN (Electronic Textbook Track Number)ISAN (International Standard Audiovisual Number)ISMN (International Standard Music Number)ISWC (International Standard Musical Work Code)ISRC (International Standard Recording Code)ISSN (International Standard Serial Number)ISWN (International Standard Wine Number)LCCN (Library of Congress Control Number)OCLC (Online Computer Library Center number)SICI (Serial Item and Contribution Identifier)
Tags: W H Smith, Tips, Google, API, Excel, VBA, Google Books, ISBN,
Esse script não funciona. Precisa de funções como cDataSet que não estão aqui. Além de outras. Onde conseguir tudo necessário para rodar o script?
ResponderExcluir