Updated openlibrary api query url
Updated cover field Added workaround to get specific editions title and covers
This commit is contained in:
parent
fa691741ce
commit
f973d15c4f
1 changed files with 41 additions and 21 deletions
|
|
@ -8,16 +8,23 @@ import { APIModel } from '../APIModel';
|
|||
import type { paths } from '../schemas/OpenLibrary';
|
||||
|
||||
interface SearchResponse {
|
||||
cover_i: number;
|
||||
has_fulltext: boolean;
|
||||
edition_count: number;
|
||||
title: string;
|
||||
author_name: string[];
|
||||
first_publish_year: number;
|
||||
editions: {
|
||||
docs: {
|
||||
key?: string;
|
||||
title?: string;
|
||||
cover_i?: number;
|
||||
isbn?: string[];
|
||||
}[];
|
||||
};
|
||||
cover_i?: number;
|
||||
has_fulltext?: boolean;
|
||||
edition_count?: number;
|
||||
title?: string;
|
||||
author_name?: string[];
|
||||
first_publish_year?: number;
|
||||
key: string;
|
||||
|
||||
number_of_pages_median?: number;
|
||||
cover_edition_key?: string;
|
||||
isbn?: string[];
|
||||
ratings_average?: number;
|
||||
}
|
||||
|
|
@ -69,7 +76,7 @@ export class OpenLibraryAPI extends APIModel {
|
|||
year: result.first_publish_year?.toString() ?? 'unknown',
|
||||
dataSource: this.apiName,
|
||||
id: result.key,
|
||||
author: result.author_name.join(', '),
|
||||
author: result.author_name?.join(', '),
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
|
@ -85,8 +92,8 @@ export class OpenLibraryAPI extends APIModel {
|
|||
const response = await client.GET('/search.json', {
|
||||
params: {
|
||||
query: {
|
||||
q: `key:${id}`,
|
||||
fields: 'key,title,author_name,number_of_pages_median,first_publish_year,isbn,ratings_score,first_sentence,title_suggest,rating*,cover_edition_key',
|
||||
q: `${id}`,
|
||||
fields: 'key,title,author_name,number_of_pages_median,first_publish_year,isbn,ratings_score,first_sentence,title_suggest,rating*,cover*,editions',
|
||||
},
|
||||
},
|
||||
fetch: obsidianFetch,
|
||||
|
|
@ -98,31 +105,44 @@ export class OpenLibraryAPI extends APIModel {
|
|||
|
||||
const data = response.data as {
|
||||
docs: SearchResponse[];
|
||||
q?: string;
|
||||
};
|
||||
|
||||
// TODO: maybe description.
|
||||
|
||||
// console.debug(data);
|
||||
const result = data.docs[0];
|
||||
|
||||
let key = result.key;
|
||||
let title = result.title;
|
||||
let cover_i = result.cover_i;
|
||||
let isbnArr = result.isbn;
|
||||
|
||||
// Check if the query is for /isbn/ or /books/ and extract from editions.docs if present
|
||||
const q = data.q ?? '';
|
||||
if ((q.includes('/isbn/') || q.includes('/books/')) && result.editions && Array.isArray(result.editions.docs) && result.editions.docs.length > 0) {
|
||||
const edition = result.editions.docs[0];
|
||||
key = edition.key ?? key;
|
||||
title = edition.title ?? title;
|
||||
cover_i = edition.cover_i ?? cover_i;
|
||||
isbnArr = edition.isbn ?? isbnArr;
|
||||
}
|
||||
|
||||
const pages = Number(result.number_of_pages_median);
|
||||
const isbn = Number((result.isbn ?? []).find((el: string) => el.length <= 10));
|
||||
const isbn13 = Number((result.isbn ?? []).find((el: string) => el.length == 13));
|
||||
const isbn = Number((isbnArr ?? []).find((el: string) => el.length <= 10));
|
||||
const isbn13 = Number((isbnArr ?? []).find((el: string) => el.length == 13));
|
||||
|
||||
return new BookModel({
|
||||
title: result.title,
|
||||
title: title,
|
||||
year: result.first_publish_year?.toString() ?? 'unknown',
|
||||
dataSource: this.apiName,
|
||||
url: `https://openlibrary.org` + result.key,
|
||||
id: result.key,
|
||||
url: `https://openlibrary.org` + key,
|
||||
id: key,
|
||||
isbn: Number.isNaN(isbn) ? undefined : isbn,
|
||||
isbn13: Number.isNaN(isbn13) ? undefined : isbn13,
|
||||
englishTitle: result.title,
|
||||
englishTitle: title,
|
||||
|
||||
author: result.author_name.join(', '),
|
||||
author: result.author_name?.join(', '),
|
||||
pages: Number.isNaN(pages) ? undefined : pages,
|
||||
onlineRating: result.ratings_average,
|
||||
image: result.cover_edition_key ? `https://covers.openlibrary.org/b/OLID/` + result.cover_edition_key + `-L.jpg` : undefined,
|
||||
image: cover_i ? `https://covers.openlibrary.org/b/id/` + cover_i + `-L.jpg` : undefined,
|
||||
|
||||
released: true,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue