2010-03-16 14 views
2

Ok, je veux une base de données d'une petite bibliothèque.ISBN -> bookdata Recherche pour remplir une base de données

J'ai seulement eu une expérience limitée avec des bases de données, et aucun avec l'interrogation à partir d'un serveur Web.

Je vais vouloir récupérer des informations comme le titre, l'éditeur, peut-être l'auteur, la description la façon la plus simple que je peux penser à faire cela est de les rechercher via l'ISBN.

J'ai déjà rencontré isbndb.com, mais l'API pour y accéder semble plutôt complexe.

Je me demande comment je devrais faire cela.

+0

Je serais inquiet de recevoir toutes les données saisies! –

+0

Je souhaite l'automatiser, donc tout ce que je dois faire est de taper (ou scanner si je peux emprunter un scanner de codes à barres) et mon programme fait le reste. en levant les yeux d'une forme de base de données en ligne de livres (par exemple isbndb.com) –

+0

Si votre application est juste interroger l'API ISBNDB, où la base de données entrent-elles dans l'image? –

Répondre

1

J'ai récemment dû faire exactement cela en indexant notre bibliothèque à des fins d'assurance. Voici le code de la classe vba je piraté ensemble:

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 

obtenir une clé API, collez le code ci-dessus (avec votre clé) dans un nouveau module de classe dans l'éditeur VBA (Insérer-> Module de classe) et nommez le module "isbn".Vous devez également ajouter une référence à « Microsoft XML » dans l'éditeur VBA (Outils-> Références)

Vous pouvez tester cela fonctionne avec l'extrait de code ci-dessous dans un module vba normal:

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

Ensuite, tapez simplement "testlookup" dans la fenêtre immédiate (View-> Immediate Window). Vous devriez voir une réponse:

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

isbnDB peut revenir plus les données que je collectionne dans la classe ci-dessus, lisez la référence API ici: http://isbndb.com/docs/api/ et d'adapter la classe à vos besoins.

J'ai trouvé cet article très utile pour expliquer comment utiliser XMLHTTP à partir de l'accès: http://www.15seconds.com/issue/991125.htm

Les pages msdn sur les méthodes XML DOM et XMLHttpRequest Object sont également utiles (parce que je suis un nouvel utilisateur Je ne peux poster deux liens actifs, vous devrez remplacer les points dans les urls ci-dessous):

msdn microsoft com/fr-fr/bibliothèque/ms757828 (v = VS.85) .aspx

msdn microsoft com /en-us/library/ms535874(v=vs.85).aspx

+0

Tout d'abord, merci à Jules d'avoir montré comment se connecter à ISBNDB et récupérer des données. Une correction cependant - https ne fonctionne pas - J'ai accès refusé. Je l'ai changé en http et cela a bien fonctionné. Peut-être que le site a changé depuis l'affichage original. –

0

Quelle langue utilisez-vous? Vous avez besoin d'un programme/script pour présenter un formulaire dans lequel vous pouvez entrer l'ISBN, qui obtiendrait alors les données de isbndb.com et peuplerait la base de données. J'ai un peu utilisé l'API, mais pas pendant un certain temps, et c'est assez simple.

+0

Je vais bien avec beaucoup de langages modernes (bien que je pense que ms-access ne supporte pas [m] l'un d'entre eux), C, C++, paskall (tremblement), java, python, asm, VB6, deux dailects BASIC. Donc la langue n'a pas d'importance pour moi, je préfère utiliser python pour faciliter l'analyse, mais je pense que je dois utiliser VBA (avec lequel je ne suis pas si familier) –

+0

Si vous connaissez VB6, alors VBA shouldn Ne sois pas très extensible. La grande courbe d'apprentissage sera que VBA fournit beaucoup plus de fonctionnalités liées à la base de données que VB6, et qu'Access a son propre modèle d'objet riche que vous devez comprendre pour en tirer le maximum. –

2

L'API ISBNdb.com semble simple. La requête suivante devrait récupérer l'information que vous voulez ... il suffit de substituer votre clé d'accès pour "YourKey" et l'ISBN pour "YourISBN".

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

La réponse est XML qui contient des informations sur le livre unique dont vous avez soumis l'ISBN.

+0

Oui mais qu'est-ce que cela renvoie? Un site Web que je dois analyser? –

2

Ceci est une réponse incomplète, mais il devrait vous aider à démarrer (je n'ai pas travaillé avec des données XML comme retour).

Ce code a les bases:

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 

La réponse de la page Web est la propriété .responseText de l'objet XMLHTTP. Comment vous traitez cela est au-delà de moi. Je sais que l'un des gourous du groupe de discussion Access a publié un didacticiel sur la consommation de services Web à partir d'Access, mais je ne le trouve pas. Cet article pourrait avoir quelque chose à voir avec la question:

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

1

Vous pouvez utiliser le XML MARC21 de la Bibliothèque du Congrès.

J'ai fait la même chose que vous, en créant une base de données pour héberger ma bibliothèque. La numérisation dans l'ISBN collecte les données à partir de cette URL http://z3950.loc.gov:7090/voyager?version=1.1&operation=searchRetrieve&query=YOUR_ISBN&maximumRecords=1

Les données de réponse remplissent alors un formulaire avec toutes les données. Vous n'avez pas besoin d'un compte, juste cette URL.

La réponse vient en XML (comme mentionné), et vous pouvez analyser à partir de là en utilisant la langue que vous voulez (mon choix se trouve être PHP).