ISBN -> Bookdata Lookup для заполнения базы данных - PullRequest
2 голосов
/ 16 марта 2010

Хорошо, я хочу создать базу данных для небольшой библиотеки.

У меня был только ограниченный опыт работы с базами данных, а у меня нет запросов к веб-серверу.

Я хочу получить информацию, такую ​​как заголовок, издатель, возможно автор, описание Самый простой способ, которым я могу придумать, это найти их через ISBN.

Я уже сталкивался с isbndb.com, но API для доступа к нему кажется довольно сложным.

Мне интересно, как мне это сделать.

Ответы [ 5 ]

2 голосов
/ 16 марта 2010

API ISBNdb.com выглядит просто. Следующий запрос должен получить требуемую информацию ... просто замените ваш ключ доступа на «YourKey» и ISBN на «YourISBN».

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

Ответом является XML, который содержит информацию об одной книге, чей ISBN вы отправили.

2 голосов
/ 17 марта 2010

Это неполный ответ, но он должен помочь вам начать работу (я не работал с данными XML в качестве возврата).

Этот код имеет основы:

  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

Ответ с веб-страницы находится в свойстве .responseText объекта XMLHTTP. Как вы обрабатываете это вне меня. Я знаю, что один из гуру группы новостей Access опубликовал учебник по использованию веб-сервисов из Access, но я не могу его найти. Эта статья может иметь отношение к проблеме:

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

1 голос
/ 31 марта 2011

Мне недавно пришлось сделать именно это, когда мы проиндексировали нашу библиотеку для страховых целей. Ниже приведен код взломанного вместе класса vba:

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

Получите ключ API, вставьте приведенный выше код (вместе с вашим ключом) в новый модуль классов в редакторе VBA (Insert-> Class Module) и назовите модуль «isbn». Вам также необходимо добавить ссылку на «Microsoft XML» в редакторе VBA (Инструменты-> Ссылки)

Вы можете проверить его работу с фрагментом кода ниже в обычном модуле vba:

* +1007 *

Затем просто введите «testlookup» в непосредственное окно (View-> Immediate Window). Вы должны увидеть ответ:

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

isbnDB может вернуть больше данных, которые я собираю в вышеприведенном классе, прочитайте ссылку на API здесь: http://isbndb.com/docs/api/ и адаптируйте класс под свои нужды.

Я нашел эту статью очень полезной для объяснения того, как использовать xmlhttp изнутри доступа: http://www.15seconds.com/issue/991125.htm

Были также полезны страницы MSDN о методах XML DOM и объекте XMLHttpRequest (поскольку я новый пользователь, я могу публиковать только две активные ссылки, вам придется заменить точки в URL-адресах ниже):

msdn microsoft com / en-us / library / ms757828 (v = VS.85) .aspx

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

1 голос
/ 04 декабря 2010

Вы можете использовать XML MARC21 из Библиотеки Конгресса.

Я сделал то же самое, что и вы, создавая базу данных для своей библиотеки. Сканирование в ISBN собирает данные с этого URL http://z3950.loc.gov:7090/voyager?version=1.1&operation=searchRetrieve&query=YOUR_ISBN&maximumRecords=1

Затем данные ответа заполняются в форме со всеми данными. Вам не нужен аккаунт, только этот URL.

Ответ приходит в XML (как уже упоминалось), и вы можете оттуда анализировать, используя любой язык, который вы хотите (мой выбор - PHP).

0 голосов
/ 16 марта 2010

Какой язык вы используете? Вам нужна программа / скрипт для представления формы, в которой вы можете ввести ISBN, который затем получит данные с isbndb.com и заполнит базу данных. Я немного использовал API, но не в течение некоторого времени, и это довольно просто.

...