ISBN -> bookdata بحث لملء في قاعدة بيانات
-
20-09-2019 - |
سؤال
وطيب، أنا الراغبين في قاعدة بيانات مكتبة صغيرة.
ولقد كان خبرة محدودة مع قواعد البيانات، وليس مع الاستعلام من خادم ويب.
وانا ذاهب الى تريد استرجاع المعلومات مثل العنوان، الناشر، وربما المؤلف والوصف أبسط طريقة أستطيع أن أفكر في 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 ونشر البرنامج التعليمي على تستهلك خدمات الويب من الوصول، ولكن لا أستطيع العثور عليه. قد يكون هذا المقال أن تفعل شيئا مع المشكلة:
وو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 قليلا، ولكن ليس لبعض الوقت، وانها واضحة جدا.