From f973d15c4f1ee7536349772610d1219427720879 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 14 Jan 2026 02:53:17 +0100 Subject: [PATCH 1/2] Updated openlibrary api query url Updated cover field Added workaround to get specific editions title and covers --- src/api/apis/OpenLibraryAPI.ts | 62 ++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/src/api/apis/OpenLibraryAPI.ts b/src/api/apis/OpenLibraryAPI.ts index d5c041e..d61918b 100644 --- a/src/api/apis/OpenLibraryAPI.ts +++ b/src/api/apis/OpenLibraryAPI.ts @@ -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, From 0b5c2907db886946b9437c6705feb56986f88fa2 Mon Sep 17 00:00:00 2001 From: ltctceplrm <14954927+ltctceplrm@users.noreply.github.com> Date: Wed, 14 Jan 2026 03:10:46 +0100 Subject: [PATCH 2/2] Added plot --- src/api/apis/OpenLibraryAPI.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/api/apis/OpenLibraryAPI.ts b/src/api/apis/OpenLibraryAPI.ts index d61918b..645d15b 100644 --- a/src/api/apis/OpenLibraryAPI.ts +++ b/src/api/apis/OpenLibraryAPI.ts @@ -23,6 +23,7 @@ interface SearchResponse { author_name?: string[]; first_publish_year?: number; key: string; + description?: string; number_of_pages_median?: number; isbn?: string[]; @@ -93,7 +94,7 @@ export class OpenLibraryAPI extends APIModel { params: { query: { q: `${id}`, - fields: 'key,title,author_name,number_of_pages_median,first_publish_year,isbn,ratings_score,first_sentence,title_suggest,rating*,cover*,editions', + fields: 'key,title,author_name,number_of_pages_median,first_publish_year,isbn,ratings_score,first_sentence,title_suggest,rating*,cover*,editions,description', }, }, fetch: obsidianFetch, @@ -140,6 +141,7 @@ export class OpenLibraryAPI extends APIModel { englishTitle: title, author: result.author_name?.join(', '), + plot: result.description ?? undefined, pages: Number.isNaN(pages) ? undefined : pages, onlineRating: result.ratings_average, image: cover_i ? `https://covers.openlibrary.org/b/id/` + cover_i + `-L.jpg` : undefined,