سؤال

وطيب، أنا الراغبين في قاعدة بيانات مكتبة صغيرة.

ولقد كان خبرة محدودة مع قواعد البيانات، وليس مع الاستعلام من خادم ويب.

وانا ذاهب الى تريد استرجاع المعلومات مثل العنوان، الناشر، وربما المؤلف والوصف أبسط طريقة أستطيع أن أفكر في dooing هذا هو يبحث عنها عبر ISBN.

ولقد جئت عبر isbndb.com قبل، ولكن API للوصول يبدو معقدا إلى حد ما.

وأنا أتساءل كيف يجب ان تذهب عن القيام بذلك.

هل كانت مفيدة؟

المحلول

وكان لي مؤخرا أن تفعل بالضبط هذا ونحن فهرستها مكتبتنا لأغراض التأمين. أقل رمز الطبقة VBA I اخترق معا:

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-> فئة وحدة نمطية) واسم وحدة "ISBN". تحتاج أيضا إلى إضافة مرجع إلى "Microsoft XML" في محرر VBA (أدوات> المراجع)

ويمكنك اختبار أنها تعمل مع التعليمات البرمجية المتكررة أدناه في وحدة نمطية VBA العادية:

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

وبعد ذلك فقط اكتب "testlookup" في إطار فوري (عرض-> الإطار الحالي). يجب أن تشاهد رد:

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

وisbnDB يمكن أن يعود أكثر من البيانات I جمع في فئة المذكورة أعلاه، وقراءة المرجع API هنا: HTTP: / /isbndb.com/docs/api/ و خياط الطبقة لاحتياجاتك.

ولقد وجدت هذه المادة مفيدة جدا في شرح كيفية استخدام XMLHTTP من داخل الوصول: http://www.15seconds.com/issue/991125.htm

وكانت مفيدة أيضا الصفحات MSDN على XML DOM أساليب ومدعوم كائن (لأن أنا مستخدم جديد يمكنني أن وظيفة اثنين فقط روابط نشطة، سيكون لديك لاستبدال النقاط في عناوين أدناه):

وMSDN مايكروسوفت كوم / EN-US / مكتبة / ms757828 (ت = VS.85) .aspx اتصال

وMSDN مايكروسوفت كوم / EN-US / مكتبة / ms535874 (ت = vs.85) .aspx اتصال

نصائح أخرى

وهذا هو الجواب غير مكتملة، ولكن يجب أن تبدأ بها (أنا لم يعمل مع بيانات 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 ونشر البرنامج التعليمي على تستهلك خدمات الويب من الوصول، ولكن لا أستطيع العثور عليه. قد يكون هذا المقال أن تفعل شيئا مع المشكلة:

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

ووISBNdb.com تبدو API بسيطة. الطلب التالي يجب استرداد المعلومات التي تريدها ... مجرد استبدال مفتاح الدخول ل "YourKey" وISBN ل "YourISBN".

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

والرد هو XML الذي يحتوي على معلومات حول كتاب واحد الذي ISBN كنت قدمت.

ويمكنك استخدام XML MARC21 من مكتبة الكونغرس.

وفعلت الشيء نفسه كما كنت، وبناء قاعدة بيانات لإيواء مكتبتي. مسح في ISBN بجمع البيانات من هذا URL http://z3950.loc.gov:7090/voyager؟ نسخة = 1.1 و تشغيل = searchRetrieve والاستعلام = YOUR_ISBN وmaximumRecords = 1

وبعد ذلك يملأ البيانات استجابة في شكل مع كافة البيانات. أنت لا تحتاج إلى حساب، أن مجرد URL.

والرد يأتي في XML (كما ذكر)، ويمكنك تحليل من هناك باستخدام أي لغة تريدها (خياري يحدث أن تكون PHP).

ما هي اللغة الذي تستخدمه؟ كنت في حاجة الى برنامج / برنامج نصي لتقديم استمارة حيث يمكنك إدخال ISBN، التي من شأنها ثم الحصول على البيانات من isbndb.com وملء قاعدة البيانات. لقد استعملت API قليلا، ولكن ليس لبعض الوقت، وانها واضحة جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top