Update book finder and cover matching - includes LibGen provider

This commit is contained in:
advplyr 2021-08-21 09:15:44 -05:00
parent 744aacbb4b
commit 7d4e2e3d97
14 changed files with 379 additions and 76 deletions

View file

@ -10,28 +10,40 @@ class LibGen {
console.log(`${this.mirror} is currently fastest`)
}
async search(query) {
async search(queryTitle) {
if (!this.mirror) {
await this.init()
}
queryTitle = queryTitle.replace(/'/g, '')
var options = {
mirror: this.mirror,
query: query,
query: queryTitle,
search_in: 'title'
}
var httpsMirror = this.mirror
if (httpsMirror.startsWith('http:')) {
httpsMirror = httpsMirror.replace('http:', 'https:')
}
// console.log('LibGen Search Options', options)
try {
const data = await libgen.search(options)
let n = data.length
console.log(`${n} results for "${options.query}"`)
// console.log(`${n} results for "${options.query}"`)
var cleanedResults = []
while (n--) {
console.log('');
console.log('Title: ' + data[n].title)
console.log('Author: ' + data[n].author)
console.log('Download: ' +
'http://gen.lib.rus.ec/book/index.php?md5=' +
data[n].md5.toLowerCase())
var resultObj = {
id: data[n].id,
title: data[n].title,
author: data[n].author,
publisher: data[n].publisher,
description: data[n].descr,
cover: `${httpsMirror}/covers/${data[n].coverurl}`,
year: data[n].year
}
if (!resultObj.title) continue;
cleanedResults.push(resultObj)
}
return data
return cleanedResults
} catch (err) {
console.error(err)
return {

View file

@ -50,7 +50,7 @@ class OpenLibrary {
return {
title: doc.title,
author: doc.author_name ? doc.author_name.join(', ') : null,
first_publish_year: doc.first_publish_year,
year: doc.first_publish_year,
edition: doc.cover_edition_key,
cover: doc.cover_edition_key ? `https://covers.openlibrary.org/b/OLID/${doc.cover_edition_key}-L.jpg` : null,
...worksData
@ -68,5 +68,17 @@ class OpenLibrary {
var searchDocs = await Promise.all(lookupData.docs.map(d => this.cleanSearchDoc(d)))
return searchDocs
}
async searchTitle(title) {
title = title.replace(/'/g, '')
var lookupData = await this.get(`/search.json?title=${title}`)
if (!lookupData) {
return {
errorCode: 404
}
}
var searchDocs = await Promise.all(lookupData.docs.map(d => this.cleanSearchDoc(d)))
return searchDocs
}
}
module.exports = OpenLibrary