** Meskipun semuanya tampak berhasil sekarang, hal ini jelas merupakan pekerjaan yang sedang berjalan. **
Untuk program percepatan membaca perlu diketahui poin-poin dan rincian lainnya dari buku yang dibaca siswa. Ini dapat ditemukan di arbookfind.co.uk tetapi ketika mencoba membuat katalog buku dalam jumlah besar, fakta bahwa situs web tersebut tidak mendukung API menimbulkan kesulitan. Memang situs tersebut memerlukan cookie yang harus disetel untuk mengakses mesin pencari.
Repositori ini menampung berbagai upaya saya untuk mengatasi keterbatasan tersebut. Tujuan kode di sini adalah untuk mengambil ISBN (baik diketik atau dipindai) dan mencari detail buku. Hal ini dicapai dengan menggunakan phantomjs untuk mengikis situs web mereka dan mengembalikan informasi dalam format yang dapat digunakan. Sebagai cadangan, skrip juga akan mencoba dan mengakses API Google Buku jika tidak ada informasi yang ditemukan di situs web arbookfind.
Saat ini saya sedang bereksperimen dengan dua metode berbeda untuk menjalankan program dan memformat hasilnya. Ini mungkin digabungkan dalam satu skrip di beberapa titik tetapi saat ini saya memisahkannya. Cara-caranya adalah sebagai berikut:
Di bawah ini adalah versi singkat dari keluaran JSON yang dihasilkan oleh program. Inilah yang akan diberikan kepada Anda sebagai hasilnya jika Anda menulis penangan Anda sendiri atau menggunakan versi server http. Klien CSV hanya mengambil informasi ini dan memasukkannya, tanpa perubahan, ke dalam file CSV. Jika tidak ditemukan informasi untuk properti tertentu maka akan tetap ditambahkan. Namun jika tidak ditemukan keterangan sama sekali pada buku tersebut maka hanya ISBN yang dikembalikan dan tidak ada sifat lain yang ditetapkan.
{
"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"
}
Meskipun kode untuk pendekatan ini kurang bagus, namun tetap berhasil. Setelah skrip dipanggil dengan phantomjs, Anda akan diminta untuk mencari ISBN. Informasi yang dihasilkan hanya akan dirangkum di konsol - judul buku akan muncul jika ditemukan. Semua informasi lainnya disimpan ke dalam salah satu dari dua file yang dibuat di direktori kerja skrip saat ini.
Skrip akan meminta ISBN baru setelah setiap pencarian. Untuk mengakhiri skrip cukup masukkan ISBN kosong.
###Mengeksekusi
phantomjs arfinder-cli-csv.js
Juga berfungsi sampai sekarang meskipun, sekali lagi, kodenya perlu diperbaiki. Ketika skrip dijalankan, ia membuka server web internal Phantomjs dan mendengarkan port 8080. Untuk menggunakan server, buka http://localhost:8080/{isbn} di browser web Anda di mana Anda telah mengganti bagian isbn dengan nomor yang Anda inginkan untuk mencari. Misalnya buka http://localhost:8080/9780439023528 dan itu akan mengembalikan informasi tentang buku dalam format JSON.
Masih bekerja dengan kode http apa yang akan dikembalikan tetapi saat ini jika Anda menggunakan karakter yang tidak valid di jalur maka kesalahan 401 akan dikembalikan. Jika ISBN tidak valid atau jika terjadi kesalahan selama pemrosesan, kesalahan 404 akan dikembalikan. Jika ISBN valid, objek JSON yang dirangkai akan dikembalikan berisi semua informasi yang dikumpulkan. Jika tidak tersedia informasi ISBN maka objek tersebut hanya akan berisi nilai ISBN itu sendiri.
###Mengeksekusi
phantomjs arfinder-http-json.js
Jika Anda ingin menggunakan kode dalam skrip Anda sendiri maka saat ini sangat mudah untuk memanggilnya - lihat contoh di bawah.
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();
});
Jika Anda ingin menambahkan lebih banyak penangan sehingga jika tidak ada detail buku yang ditemukan maka ia akan memeriksa sumber lain yang, sekali lagi, cukup mudah. Buat modul Anda di folder core/handlers dengan nama yang masuk akal. Buat fungsi ekspor yang mengambil dua parameter - isbn dan callback untuk hasilnya. Ingatlah bahwa bidang standar yang harus dikembalikan oleh penangan ditampilkan di core/datatamapping/core-datatamapping.js. Semua bidang harus ada di sana meskipun stringnya kosong.
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;
Selanjutnya edit file handlers.js di folder yang sama. Impor modul Anda dan ubah array yang diekspor di bagian akhir (lihat contoh) sehingga fungsi Anda ditambahkan ke dalamnya. Perlu diketahui bahwa pencarian dilakukan dalam urutan array dan setelah penangan mengembalikan beberapa hasil, penangan berikut TIDAK dipanggil.
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];