** بينما يبدو أن كل شيء يعمل الآن، إلا أنه بالتأكيد عمل قيد التقدم. **
بالنسبة لبرنامج القارئ السريع لا بد من معرفة النقاط والتفاصيل الأخرى الخاصة بالكتب التي يقرأها الطلاب. يمكن العثور عليها على arbookfind.co.uk ولكن عند محاولة فهرسة عدد كبير من الكتب، فإن حقيقة أن موقع الويب لا يدعم واجهة برمجة التطبيقات (API) يمثل صعوبة. في الواقع يتطلب الموقع تعيين ملف تعريف الارتباط للوصول إلى محرك البحث.
يحمل هذا المستودع جهودي المختلفة للتغلب على هذا القيد. الهدف من الكود هنا هو الحصول على رقم ISBN (إما مطبوعًا أو ممسوحًا ضوئيًا) والبحث عن تفاصيل الكتاب. يتم تحقيق ذلك عن طريق استخدام phantomjs لاستخراج موقع الويب الخاص بهم وإرجاع المعلومات بتنسيق قابل للاستخدام. كإجراء احتياطي، ستحاول البرامج النصية أيضًا الوصول إلى Google Books API في حالة عدم العثور على معلومات على موقع arbookfind.
أقوم حاليًا بتجربة طريقتين مختلفتين لاستدعاء البرنامج وتنسيق النتيجة. قد يتم دمجها معًا في نص واحد في وقت ما ولكن في الوقت الحالي أبقيتها منفصلة. الطرق هي كما يلي:
يوجد أدناه نسخة مختصرة من مخرجات JSON التي ينتجها البرنامج. هذا ما ستحصل عليه نتيجة لذلك إذا كتبت معالجاتك الخاصة أو استخدمت إصدار خادم http. يقوم عميل CSV فقط بأخذ هذه المعلومات وإدراجها، دون تغيير، في ملف CSV. إذا لم يتم العثور على معلومات لخاصية معينة ستتم إضافتها. ومع ذلك، إذا لم يتم العثور على أي معلومات عن الكتاب على الإطلاق، فسيتم إرجاع رقم ISBN فقط ولن يتم تعيين أي خصائص أخرى.
{
"author" : "Rowling, J.K. " ,
"category" : "Fiction" ,
"imageURL" : "http://somewhere.com/image.jpg" ,
"interest" : "Middle Years" ,
"isbn" : "9750747532743" ,
"lang" : "EN" ,
"level" : "2.0" ,
"pages" : "223" ,
"points" : "19.0" ,
"publishedDate" : "1997" ,
"publisher" : "Bloomsbury Publishing" ,
"quizNumber" : "210738" ,
"ranking" : "3" ,
"series" : "Harry Potter; " ,
"summary" : "Harry thinks he is an ordinary boy till he finds out he is a wizard. First in the series." ,
"title" : "Harry Potter and the Philosopher's Stone" ,
"topic" : "Award Winners/Nominee..." ,
"words" : "77325"
}
على الرغم من أن الكود الخاص بهذا الأسلوب ليس جميلًا، إلا أنه يعمل. بمجرد استدعاء البرنامج النصي باستخدام phantomjs، سيطالبك برقم ISBN للبحث عنه. سيتم تلخيص المعلومات الناتجة على وحدة التحكم فقط - وسيظهر عنوان الكتاب في حالة العثور عليه. يتم حفظ جميع المعلومات الأخرى في أحد الملفين اللذين تم إنشاؤهما في دليل العمل الحالي للبرنامج النصي.
سيطلب البرنامج النصي رقم ISBN جديد بعد كل عملية بحث. لإنهاء البرنامج النصي، فقط أدخل رقم ISBN فارغًا.
###التنفيذ
phantomjs arfinder-cli-csv.js
يعمل أيضًا حتى الآن، على الرغم من أن الكود يحتاج إلى العمل مرة أخرى. عند تشغيل البرنامج النصي، فإنه يفتح خادم الويب phantomjs الداخلي ويستمع إلى المنفذ 8080. لاستخدام الخادم، انتقل إلى http://localhost:8080/{isbn} في متصفح الويب الخاص بك حيث قمت باستبدال جزء isbn بالرقم الذي تريده للبحث. على سبيل المثال، انتقل إلى http://localhost:8080/9780439023528 وسيقوم بإرجاع المعلومات حول الكتاب بتنسيق JSON.
لا نزال نعمل مع رموز http التي سيتم إرجاعها، ولكن في الوقت الحالي، إذا كنت تستخدم أحرفًا غير صالحة في المسار، فسيتم إرجاع خطأ 401. إذا كان رقم ISBN غير صالح أو في حالة حدوث خطأ أثناء المعالجة، فسيتم إرجاع خطأ 404. إذا كان رقم ISBN صالحًا، فسيتم إرجاع كائن JSON مقسم يحتوي على جميع المعلومات التي تم جمعها. إذا لم تكن هناك معلومات متاحة لرقم ISBN، فسيحتوي الكائن ببساطة على قيمة ISBN نفسها.
###التنفيذ
phantomjs arfinder-http-json.js
إذا كنت تريد استخدام الرمز في البرامج النصية الخاصة بك، فمن السهل جدًا الاتصال به حاليًا - راجع المثال أدناه.
var arfinder = import('./core/arfinder-core);
var isbn = 1234567890; // the isbn you are looking for.
core.searchByISBN(isbn, function (result) {
// do something with the result.
// only call this if you want to
// close phantomjs and stop.
core.exit();
});
إذا كنت ترغب في إضافة المزيد من المعالجات بحيث إذا لم يتم العثور على تفاصيل الكتاب، فسيتم التحقق من مصدر آخر، مرة أخرى، مباشر إلى حد ما. قم بإنشاء الوحدة النمطية الخاصة بك في المجلد الأساسي/المعالجات باسم معقول. قم بإنشاء دالة تصدير تأخذ معلمتين - رقم Isbn ورد الاتصال للنتائج. تذكر أن الحقول القياسية التي يجب على المعالجات إرجاعها تظهر في core/datamapping/core-datamapping.js. يجب أن تكون جميع الحقول موجودة حتى لو كانت سلاسل فارغة.
function mySearch(isbn, callback) {
// Write what you want here.
// When complete you should call the callback function with
// the JSON formatted results as a parameter. If you can't
// find the information then pass null or call the function
// without supplying the parameter - as below.
callback();
}
// Export your function from the module.
module.exports.mySearch = mySearch;
قم بعد ذلك بتحرير ملف Handlers.js الموجود في نفس المجلد. قم باستيراد الوحدة النمطية الخاصة بك وتغيير المصفوفة المصدرة في النهاية (انظر المثال) بحيث تتم إضافة وظيفتك إليها. يرجى العلم أن عمليات البحث يتم تنفيذها بترتيب المصفوفة وبمجرد أن يقوم المعالج بإرجاع بعض النتائج، لا يتم استدعاء المعالجات التالية.
var arBookFind = require("./arfinder-handlers.js");
var googleBooks = require("./google-handlers.js");
var mySearch = require("./mySearch-handlers.js")
module.exports = [arBookFind.arBookSearch, googleBooks.googleBookSearch, mySearch.mySearch];