gradle/ wrapper add sigla and api stats and secure 1 day ago
searxng add searxng odocker compose 21 hours ago
src/ main fix distinct data 5 hours ago
.env.example.txt add UI and Docker 9 hours ago
.gitignore init app 13 days ago
Dockerfile add UI and Docker 9 hours ago
README.md small fix 9 hours ago
build-and-push.ps1 small fix 9 hours ago
build.gradle add sigla and api stats and secure 1 day ago
docker-compose.searxng.yml add searxng odocker compose 21 hours ago
docker-compose.yml small fix 9 hours ago
find_book.py add llm python script and add search by title 12 days ago
gradle.properties init app 13 days ago
gradlew init app 13 days ago
gradlew.bat init app 13 days ago
settings.gradle init app 13 days ago
settings.yml add llm python script and add search by title 12 days ago
README.md

Book Metadata Service

Открытый бесплатный API для поиска метаданных книг по ISBN или названию — без регистрации, без ключа. Объединяет Open Library, Google Books, FantLab и другие источники в одну карточку, автоматически обогащая базу при первом запросе по книге, которой ещё нет.

Публичный инстанс: bookmetadata.ru · документация API · Swagger

Быстрый старт (без сборки, готовый образ с Docker Hub)

Нужны только два файла — не нужно клонировать репозиторий и ставить Java/Gradle:

curl -O https://raw.githubusercontent.com/malexple/book-metadata-service/main/docker-compose.hub.yml
curl -O https://raw.githubusercontent.com/malexple/book-metadata-service/main/.env.example
cp .env.example .env   # открыть и поправить DB_PASSWORD
docker compose -f docker-compose.hub.yml up -d
curl http://localhost:8080/api/v1/search?q=Дорога

Образ: malexple/book-metadata-service на Docker Hub.

Сборка из исходников (для разработки)

git clone https://github.com/malexple/book-metadata-service.git
cd book-metadata-service
cp .env.example .env
docker compose up -d --build

API

Три публичных метода, ограничение 60 запросов/мин с одного IP:

curl "https://bookmetadata.ru/api/v1/search/isbn/9785171234567"
curl "https://bookmetadata.ru/api/v1/search/title?q=Мастер+и+Маргарита"
curl "https://bookmetadata.ru/api/v1/search?q=9785171234567"

Выбор полей: ?fields=Title,AuthorName,ISBN. Полное описание — на странице документации и в Swagger UI.

Опциональные источники (выключены по умолчанию)

Некоторые источники обогащения выключены "из коробки" и требуют осознанного включения — см. .env.example:

  • LibGen (LIBGEN_ENABLED) — юридически серая зона.
  • Sigla / sigla.ru (SIGLA_ENABLED) — неофициальный скрапинг сайта библиотеки МГУ, не предназначенного для автоматических обращений.
  • LLM fallback (LLM_FALLBACK_ENABLED) — требует отдельно поднятые SearXNG и Ollama; результаты идут не напрямую в базу, а в очередь на ручную модерацию.

Архитектура

EAV/pivot-модель метаданных (mtobjects/mtfields/mtdata) в духе white paper Force.com Multitenant Architecture — гибкая схема без ALTER TABLE при добавлении новых полей. PostgreSQL + Flyway, Spring Boot 3.4 / Java 21.

Разработка и деплой

  • build-and-push.sh / build-and-push.ps1 — сборка и публикация образа в Docker Hub под тегами :latest и :<git-sha>.
  • docker-compose.yml — сборка из исходников (для разработки).
  • docker-compose.hub.yml — готовый образ с Docker Hub (для конечных пользователей, без клонирования репозитория).

Лицензия

Apache 2.0