** 지금은 모든 것이 작동하는 것처럼 보이지만 확실히 진행 중인 작업입니다. **
속진 독서 프로그램에서는 학생들이 읽고 있는 책의 요점과 기타 세부 사항을 아는 것이 필요합니다. 이는 arbookfind.co.uk에서 찾을 수 있지만 많은 수의 책을 카탈로그화하려고 할 때 웹사이트가 API를 지원하지 않는다는 사실이 어려움을 안겨줍니다. 실제로 해당 사이트에서는 검색 엔진에 액세스하려면 쿠키를 설정해야 합니다.
이 저장소에는 이러한 한계를 극복하기 위한 나의 다양한 노력이 담겨 있습니다. 여기서 코드의 목적은 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 웹 서버가 열리고 포트 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();
});
책 세부정보가 발견되지 않을 경우 핸들러를 더 추가하여 다시 한 번 매우 간단한 다른 소스를 확인하게 됩니다. 합리적인 이름으로 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];