Pergunta

Ok, eu querendo banco de dados uma pequena biblioteca.

Eu só tive experiência limitada com bancos de dados e nenhum com consultas de um servidor da web.

Vou querer recuperar informações como o título, o editor, talvez o autor, descrição da maneira mais simples que consigo pensar em fazer isso.

Eu já me deparei com o ISBNDB.com antes, mas a API para acessar isso parece bastante complexa.

Estou me perguntando como deveria fazer isso.

Foi útil?

Solução

Recentemente, tive que fazer exatamente isso enquanto indexamos nossa biblioteca para fins de seguro. Abaixo está o código da classe VBA que hackeei:

Option Compare Database
    dim BookTitle As String
    dim BookTitleLong As String
    dim BookAuthorsText As String
    dim BookPublisherText As String
    dim BookSummary As String
    dim BookNotes As String
    dim accessKey As String

Private Sub Class_Initialize()
    'Your isbnDB access key'
    accessKey = "PUT ACCESSKEY HERE"
End Sub    
Property Get Title() As String
    Title = BookTitle
End Property    
Property Get TitleLong() As String
    TitleLong = BookTitleLong
End Property    
Property Get AuthorsText() As String
    AuthorsText = BookAuthorsText
End Property
Property Get PublisherText() As String
    PublisherText = BookPublisherText
End Property
Property Get Summary() As String
    Summary = BookSummary
End Property
Property Get Notes() As String
    Notes = BookNotes
End Property

Public Function Lookup(isbn As String) As Boolean
    Lookup = False
    Dim xmlhttp
    Set xmlhttp = CreateObject("MSXML2.xmlhttp")
    xmlhttp.Open "GET", "https://isbndb.com/api/books.xml?access_key=" & accessKey & "&results=texts&index1=isbn&value1=" & isbn, False
    xmlhttp.send
    'Debug.Print "Response: " & xmlhttp.responseXML.XML'
    Dim xmldoc
    Set xmldoc = CreateObject("Microsoft.XMLDOM")
    xmldoc.async = False
    'Note: the ResponseXml property parses the server's response, responsetext doesn't
    xmldoc.loadXML (xmlhttp.responseXML.XML)
    If (xmldoc.selectSingleNode("//BookList").getAttribute("total_results") = 0) Then
        MsgBox "Invalid ISBN or not in database"
        Exit Function
    End If
    If (xmldoc.selectSingleNode("//BookList").getAttribute("total_results") > 1) Then
        MsgBox "Caution, got more than one result!"
        Exit Function
    End If
    BookTitle = xmldoc.selectSingleNode("//BookData/Title").Text
    BookTitleLong = xmldoc.selectSingleNode("//BookData/TitleLong").Text
    BookAuthorsText = xmldoc.selectSingleNode("//BookData/AuthorsText").Text
    BookPublisherText = xmldoc.selectSingleNode("//BookData/PublisherText").Text
    BookNotes = xmldoc.selectSingleNode("//BookData/Notes").Text
    BookSummary = xmldoc.selectSingleNode("//BookData/Summary").Text
    Lookup = True
End Function

Obtenha uma chave da API, cole o código acima (com sua chave) em um novo módulo de classe no editor VBA (módulo de classe de inserção) e nomeie o módulo "ISBN". Você também precisa adicionar uma referência ao "Microsoft XML" no editor VBA (Ferramentas-> Referências)

Você pode testar que funciona com o trecho de código abaixo em um módulo VBA normal:

Public Function testlookup()
    Dim book
    Set book = New isbn
    book.Lookup ("0007102968")
    Debug.Print book.Title
    Debug.Print book.PublisherText
End Function

Em seguida, basta digitar "TestLookup" na janela imediata (View-> Janela imediata). Você deve ver uma resposta de:

The Times book of quotations
[Glasgow] : Times Books : 2000.

O ISBNDB pode retornar mais do que os dados que coleciono na classe acima, leia a referência da API aqui: http://isbndb.com/docs/api/ e adapte a aula às suas necessidades.

Achei este artigo muito útil para explicar como usar o XMLHTTP do INFER ACCESS:http://www.15seconds.com/issue/991125.htm

As páginas do MSDN nos métodos XML DOM e o objeto xmlHttPrequest também foram úteis (porque sou um novo usuário, só posso postar dois links ativos, você precisará substituir os pontos nos URLs abaixo):

msdn Microsoft com/en-us/biblioteca/ms757828 (v = vs.85) .aspx

msdn Microsoft com/en-us/biblioteca/ms535874 (v = vs.85) .aspx

Outras dicas

Esta é uma resposta incompleta, mas deve começar (não trabalhei com dados XML como retorno).

Este código tem o básico:

  Dim oHttp As Object

  Set oHttp = CreateObject("Microsoft.XMLHTTP")
  oHttp.Open "GET", "https://isbndb.com/api/books.xml?access_key=YourKey&results=texts&index1=isbn&value1=YourISBN", False
  oHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  oHttp.Send vbNullString
  Debug.Print oHttp.responseText

A resposta da página da web está na propriedade .ResponseText do objeto XMLHTTP. Como você processa isso está além de mim. Sei que um dos gurus do grupo de notícias Access publicou um tutorial sobre consumo de serviços da Web do Access, mas não consigo localizá -lo. Este artigo pode ter algo a ver com o problema:

http://support.microsoft.com/kb/285329/en-us

A API do ISBNDB.com parece simples. A solicitação a seguir deve recuperar as informações que você deseja ... basta substituir sua chave de acesso por "YourKey" e o ISBN para "yourisbn".

https://isbndb.com/api/books.xml?access_key=YourKey&results=texts&index1=isbn&value1=YourISBN 

A resposta é XML, que contém informações sobre o livro único cujo ISBN você enviou.

Você pode usar o Marc21 XML da Biblioteca do Congresso.

Fiz a mesma coisa que você, construindo um banco de dados para abrigar minha biblioteca. A digitalização no ISBN coleta os dados deste URLhttp://z3950.loc.gov:7090/voyager?version=1.1&operation=searchretrieve&query=your_isbn&maximumrecords=1

Os dados de resposta preenchem um formulário com todos os dados. Você não precisa de uma conta, apenas esse URL.

A resposta vem no XML (como mencionado) e você pode analisar a partir daí usando qualquer idioma que desejar (minha escolha é PHP).

Que linguagem você está usando? Você precisa de um programa/script para apresentar um formulário em que você possa inserir o ISBN, que obteria os dados do iSBNDB.com e preencher o banco de dados. Eu usei a API um pouco, mas não há algum tempo, e é bem direta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top