diff --git a/README.md b/README.md index a0a83a5..8e8d1b9 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The script auto-updates itself from this repo (via `@updateURL`), so you don't n ## What it does -On a book page on Bookshop.org, Amazon (`.fr`/`.com`), or Waterstones, it: +On a book page on Bookshop.org, Amazon (`.fr`/`.com`), Waterstones, or Google Books, it: 1. Extracts the book's ISBN (from the URL or page content) and, as a fallback, title/author. 2. Checks whether the book is available on: @@ -24,6 +24,7 @@ On a book page on Bookshop.org, Amazon (`.fr`/`.com`), or Waterstones, it: - `bookshop.org/p/books/*` - `waterstones.com/book/*` - `amazon.fr` and `amazon.com` product pages (`/dp/*`) +- Google Books (`books.google.com/books?id=…`, `google.com/books/edition/…`) ## Notes diff --git a/book-links.user.js b/book-links.user.js index ac73de3..d694cf5 100644 --- a/book-links.user.js +++ b/book-links.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Book Links // @namespace http://tampermonkey.net/ -// @version 1.1 +// @version 1.2 // @description Show Anna's Archive and Waterstones links when browsing books // @license MIT // @match https://bookshop.org/p/books/* @@ -10,6 +10,8 @@ // @match https://www.amazon.fr/*/dp/* // @match https://www.amazon.com/dp/* // @match https://www.amazon.com/*/dp/* +// @match https://books.google.com/books?* +// @match https://www.google.com/books/edition/* // @connect annas-archive.gl // @connect www.waterstones.com // @connect www.chez-mon-libraire.fr @@ -62,6 +64,17 @@ return null; } + if (host.includes('google.com')) { + const text = document.body?.innerText || ''; + const m13 = text.match(/\b(97[89][-\d ]{9,14}\d)\b/); + if (m13) { + const cleaned = m13[1].replace(/[-\s]/g, ''); + if (/^97[89]\d{10}$/.test(cleaned)) return cleaned; + } + const m10 = text.match(/ISBN[\s:]+(?:[\d-]+,\s*)?(\d{9}[\dX])\b/); + return m10 ? isbn10to13(m10[1]) : null; + } + if (host.includes('bookshop.org')) { const el = document.querySelector('[itemprop="isbn"]'); if (el && /^97[89]\d{10}$/.test(el.textContent.trim())) return el.textContent.trim(); @@ -106,6 +119,12 @@ return { title, author }; } + if (host.includes('google.com')) { + const title = document.querySelector('h1')?.textContent?.trim(); + const author = document.querySelector('a[href*="inauthor"]')?.textContent?.trim(); + return { title, author }; + } + if (host.includes('waterstones.com')) { const title = ( document.querySelector('[itemprop="name"]') ||