** 虽然现在一切似乎都有效,但这绝对是一项正在进行的工作。 **
对于加速阅读计划,有必要了解学生正在阅读的书籍的要点和其他细节。这些可以在 arbookfind.co.uk 上找到,但当尝试对大量书籍进行编目时,该网站不支持 API 会带来困难。事实上,该网站需要设置 cookie 才能访问搜索引擎。
这个存储库保存了我为克服此限制所做的各种努力。这里代码的目的是获取 ISBN(打印或扫描的)并查找书籍详细信息。这是通过使用phantomjs抓取他们的网站并以可用格式返回信息来实现的。作为后备方案,如果在 arbookfind 网站上找不到信息,脚本还将尝试访问 Google Books API。
目前我正在尝试两种不同的方法来调用程序和格式化结果。这些可能会在某个时刻合并到一个脚本中,但目前我将它们分开。方法如下:
下面是程序生成的 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 Web 服务器并侦听端口 8080。要使用该服务器,请在 Web 浏览器中访问 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();
});
如果您想添加更多处理程序,以便在找不到书籍详细信息的情况下,它将检查另一个相当直接的来源。在 core/handlers 文件夹中使用合理的名称创建模块。创建一个导出函数,该函数采用两个参数 - 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];