** Bien que tout semble fonctionner maintenant, il s'agit définitivement d'un travail en cours. **
Pour le programme de lecture accélérée, il est nécessaire de connaître les points et autres détails des livres que les étudiants lisent. Ceux-ci peuvent être trouvés sur arbookfind.co.uk, mais lorsque l'on essaie de cataloguer un grand nombre de livres, le fait que le site Web ne prend pas en charge une API présente une difficulté. En effet le site nécessite le dépôt d'un cookie pour accéder au moteur de recherche.
Ce référentiel contient mes différents efforts pour surmonter cette limitation. Le but du code ici est de prendre un ISBN (tapé ou numérisé) et de rechercher les détails d'un livre. Ceci est réalisé en utilisant phantomjs pour gratter leur site Web et renvoyer les informations dans un format utilisable. En guise de solution de secours, les scripts tenteront également d'accéder à l'API Google Books si aucune information n'est trouvée sur le site Web arbookfind.
Actuellement, j'expérimente deux méthodes différentes pour appeler le programme et formater le résultat. Ceux-ci peuvent être réunis dans un seul script à un moment donné, mais pour le moment, je les ai gardés séparés. Les méthodes sont les suivantes :
Vous trouverez ci-dessous une version abrégée de la sortie JSON produite par le programme. C'est ce qui vous sera donné si vous écrivez vos propres gestionnaires ou utilisez la version du serveur http. Le client CSV prend simplement ces informations et les insère, telles quelles, dans un fichier CSV. Si aucune information n'est trouvée pour une propriété particulière, elle sera quand même ajoutée. Cependant, si aucune information n'est trouvée sur le livre, seul l'isbn sera renvoyé et aucune autre propriété ne sera définie.
{
"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"
}
Bien que le code de cette approche ne soit pas joli, il fonctionne. Une fois le script invoqué avec phantomjs , il vous demandera un ISBN à rechercher. Les informations obtenues seront uniquement résumées sur la console - le titre du livre apparaîtra s'il a été trouvé. Toutes les autres informations sont enregistrées dans l'un des deux fichiers créés dans le répertoire de travail actuel du script.
Le script demandera un nouvel ISBN après chaque recherche. Pour terminer le script, entrez simplement un ISBN vide.
###Exécution
phantomjs arfinder-cli-csv.js
Fonctionne également à partir de maintenant même si, encore une fois, le code a besoin d'être retravaillé. Lorsque le script est exécuté, il ouvre le serveur Web interne phantomjs et écoute le port 8080. Pour utiliser le serveur, accédez à http://localhost:8080/{isbn} dans votre navigateur Web où vous avez remplacé la partie isbn par le numéro souhaité. à rechercher. Par exemple, allez sur http://localhost:8080/9780439023528 et il renverra les informations sur le livre au format JSON.
Je travaille toujours avec les codes http à renvoyer, mais pour le moment, si vous utilisez des caractères non valides dans le chemin, une erreur 401 sera renvoyée. Si l'ISBN n'est pas valide ou si une erreur se produit lors du traitement, une erreur 404 sera renvoyée. Si l'ISBN est valide, un objet JSON stringifié sera renvoyé contenant toutes les informations recueillies. Si aucune information n'est disponible pour l'ISBN, l'objet contiendra simplement la valeur ISBN elle-même.
###Exécution
phantomjs arfinder-http-json.js
Si vous souhaitez utiliser le code dans vos propres scripts, il est actuellement très simple de l'appeler - voir l'exemple ci-dessous.
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();
});
Si vous souhaitez ajouter plus de gestionnaires afin que si aucun détail du livre n'est trouvé, il vérifiera une autre source qui, encore une fois, est assez simple. Créez votre module dans le dossier core/handlers avec un nom raisonnable. Créez une fonction d'exportation qui prend deux paramètres : l'isbn et le rappel pour les résultats. N'oubliez pas que les champs standardisés que les gestionnaires doivent renvoyer sont affichés dans core/datamapping/core-datamapping.js. Tous les champs doivent être là même s'il s'agit de chaînes vides.
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;
Modifiez ensuite le fichier handlers.js dans le même dossier. Importez votre module et modifiez le tableau exporté à la fin (voir exemple) pour que votre fonction y soit ajoutée. Veuillez noter que les recherches sont effectuées dans l'ordre du tableau et qu'une fois qu'un gestionnaire renvoie des résultats, les gestionnaires suivants ne sont PAS appelés.
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];