ISBN -> Recherche bookdata pour remplir une base de données
-
20-09-2019 - |
Question
Ok, je vouloir base de données d'une petite bibliothèque.
Je n'ai eu une expérience limitée avec des bases de données, et aucune avec l'interrogation d'un serveur Web.
Je vais vouloir récupérer des informations comme le titre, éditeur, peut-être l'auteur, la description la façon la plus simple que je peux penser à dooing cela leur recherche via l'ISBN.
Je suis tombé sur isbndb.com avant, mais l'API pour accéder il semble assez complexe.
Je me demande comment je devrais aller sur le faire.
La solution
J'ai eu récemment de faire exactement ce que nous avons indexé notre bibliothèque à des fins d'assurance. Voici le code de la classe I vba 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 de vba normal:
Public Function testlookup()
Dim book
Set book = New isbn
book.Lookup ("0007102968")
Debug.Print book.Title
Debug.Print book.PublisherText
End Function
Alors il suffit de taper « testlookup » dans la fenêtre immédiate (Affichage-> Fenêtre immédiate). 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 DOM XML et Object XMLHttpRequest ont également été utiles (parce que je suis un nouvel utilisateur, je ne peux pas 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 / fr-fr / bibliothèque / ms535874 (v = vs.85) .aspx
Autres conseils
Ceci est une réponse incomplète, mais il devrait vous aider à démarrer (je ne l'ai pas travaillé avec des données XML en 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 processus qui est au-delà de moi. Je sais que l'un des gourous de newsgroup Access a publié un tutoriel sur l'utilisation de services Web à partir d'Access, mais je ne peux pas le localiser. Cet article pourrait avoir quelque chose à voir avec la question:
L'API ISBNdb.com semble simple. La requête suivante devrait récupérer les informations que vous voulez ... Il suffit de remplacer 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 seul livre dont ISBN que vous avez soumis.
Vous pouvez utiliser le XML MARC21 de la Bibliothèque du Congrès.
Je l'ai fait la même chose que vous, la construction d'une base de données à la maison ma bibliothèque. Numérisation dans l'ISBN recueille les données de cette URL http://z3950.loc.gov:7090/voyager? version = 1.1 & fonctionnement = searchRetrieve & query = YOUR_ISBN & MaximumRecords = 1
Les données de réponse remplit alors un formulaire avec toutes les données. Vous n'avez pas besoin un compte, cette URL.
La réponse est en XML (comme mentionné), et vous pouvez analyser à partir de là en utilisant la langue que vous voulez (mon choix se trouve être PHP).
Quelle langue utilisez-vous? Vous avez besoin d'un programme / script pour présenter un formulaire où vous pouvez entrer le numéro ISBN, qui serait alors obtenir les données de isbndb.com et alimenter la base de données. Je l'ai utilisé l'API un peu, mais pas pendant un certain temps, et il est assez simple.