Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

yandex-book-api

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

yandex-book-api

Python-клиент для Bookmate / Яндекс Книги API

pipPyPI
Version
2.0.0
Maintainers
1

📚 Yandex Bookmate API v2.0

Неофициальный Python API для Яндекс.Книг с нативной аутентификацией Bookmate

⚠️ Версия 2.0 — несовместима с v0.1.x

Это полностью переписанная версия библиотеки. Если вы использовали версию 0.1.2 и ниже, ознакомьтесь с руководством по миграции.

Что нового в v2.0

  • Клиент-серверная архитектура — единый YandexBookClient вместо статических методов на моделях
  • OAuth-авторизация — приватные методы (библиотека, полки, профиль) через Яндекс OAuth-токен
  • 20+ приватных методов — управление библиотекой, полками, достижениями, уведомлениями и др.
  • GraphQL-поддержка — поиск, подписки, статистика чтения через GraphQL endpoint
  • Async-версия — полноценный асинхронный клиент на aiohttp (pip install yandex-book-api[async])
  • Dataclass-модели вместо Pydantic — легковеснее, без внешних зависимостей для моделей
  • Кастомные исключенияUnauthorizedError, NotFoundError, BadRequestError и др.
  • Тесты — pytest-покрытие основных моделей

Миграция с v0.1.x на v2.0

Ключевые отличия

v0.1.xv2.0
АрхитектураСтатические методы на моделях (User.get())Единый клиент YandexBookClient
МоделиPydantic BaseModelDataclass через @model декоратор
Зависимостиpydantic>=2.0, requestsТолько requests (pydantic убран)
Python>=3.8>=3.9
АвторизацияНетOAuth-токен Яндекса
AsyncНетaiohttp (опционально)
Ошибкиrequests.HTTPErrorApiError, UnauthorizedError, NotFoundError

Примеры миграции

Было (v0.1.x):

from yandex_book import User, Book

user = User.get("b1234567890")
books = User.list_books(user.id)
book = Book.get("mqK3FFjg")
book.download_cover(size="small", dest="cover.jpg")

Стало (v2.0):

from yandex_book import YandexBookClient

# Без токена — только публичные методы
client = YandexBookClient()
user = client.get_user("b1234567890")
books = client.get_user_books(user.id_)

# С токеном — все методы
client = YandexBookClient('y0_AgAAAA...')
book = client.get_book("mqK3FFjg")
client.download_file(book.cover.small, "cover.jpg")

# Приватные методы (требуют токен)
my_library = client.get_my_library()
client.add_book("mqK3FFjg")

Содержание

Установка

pip install -e .

Получение токена

Нужен токен Яндекса формат: y0_AgAAAA...

Способ 1: Через OAuth - РЕКОМЕНДУЕТСЯ

  • Откройте: https://oauth.yandex.ru/authorize?response_type=token&client_id=4483e97bab6e486a9822973109a14d05
  • Скопируйте весь access_token из URL (начинается с y0_)
  • Используйте как токен для Client

Публичные методы (без авторизации)

User.get()

Получить информацию о пользователе.

ПараметрТипОписание
user_idint|strID пользователя

Возвращает: User объект с полями:

ПолеТипОписание
idintЧисловой ID
loginstrЛогин пользователя
namestr?Полное имя
avatarAvatar?Аватар
library_cards_countint?Кол-во книг в библиотеке
followers_countint?Кол-во подписчиков
followings_countint?Кол-во подписок
bookshelves_countint?Кол-во полок
aboutstr?О себе
facebook, twitter, vk, sitestr?Соцсети/сайт

User.list_books()

Получить публичные книги пользователя.

ПараметрТипОписание
user_idint|strID пользователя

Возвращает: List[Book] с полями:

ПолеТипОписание
uuidstrУникальный ID книги
titlestr?Название
annotationstr?Аннотация
coverImage?Обложка (small, large, placeholder)
authors_objectsList[Person]?Авторы

User.list_audiobooks()

Получить публичные аудиокниги пользователя.

ПараметрТипОписание
user_idint|strID пользователя

Возвращает: List[Audiobook] (наследует Book + дополнительные поля):

ПолеТипОписание
durationint?Длительность в секундах
languagestr?Язык
narratorsList[Person]?Чтецы/рассказчики
listeners_countint?Кол-во слушателей
age_restrictionstr?Возрастное ограничение

User.list_quotes()

Получить цитаты пользователя (публично).

ПараметрТипОписание
user_idint|strID пользователя

Возвращает: List[Quote] с полями:

ПолеТипОписание
contentstrТекст цитаты
bookBookКнига, откуда цитата
created_atintTimestamp создания
likes_countintКол-во лайков
comments_countintКол-во комментариев

User.list_bookshelves()

Получить полки пользователя.

ПараметрТипОписание
user_idint|strID пользователя

Возвращает: List[Bookshelf]

ПолеТипОписание
uuidstrID полки
titlestrНазвание
annotationstr?Описание
books_countint?Кол-во книг
followers_countint?Подписчиков

User.list_impressions()

Получить рецензии пользователя.

ПараметрТипОписание
user_idint|strID пользователя

Возвращает: List[Impression]

ПолеТипОписание
contentstr?Текст рецензии
bookBook?Книга
likes_countint?Лайки
comments_countint?Комментарии

Book.get()

Получить информацию о книге.

ПараметрТипОписание
book_idstrUUID книги

Возвращает: Book объект

ПолеТипОписание
uuidstrУникальный ID
titlestr?Название
annotationstr?Описание
coverImage?Обложка
authors_objectsList[Person]?Авторы

Book.impressions()

Получить рецензии на книгу.

ПараметрТипОписание
book_idstrUUID книги

Возвращает: List[Impression]

Приватные методы (с авторизацией)

Client(auth_token)

Инициализировать авторизованный клиент.

ПараметрТипОписание
auth_tokenstrВаш Auth-Token

client.test_token()

Проверить валидность токена.

ПараметрыНет
Возвращаетbool - True если токен работает

client.get_profile()

Получить свой профиль.

ПараметрыНет
ВозвращаетDict с ключом user содержащим профиль

Поля user:

ПолеТипОписание
idintЧисловой ID
loginstrВаш логин
namestr?Имя
emailstr?Email
library_cards_countint?Кол-во книг
followers_countint?Подписчиков
following_countint?Подписок

client.get_my_library()

Получить мою приватную библиотеку.

ПараметрТипDefaultОписание
limitint50Кол-во книг (макс 100)
offsetint0Смещение для пагинации

Возвращает: Dict с ключом data содержащим список карточек:

ПолеТипОписание
uuidstrUUID карточки библиотеки
bookBookОбъект книги (title, annotation, cover и т.д.)
progressintПрогресс чтения (0-100%)
statestrСтатус: pending, reading, finished
started_atint?Timestamp начала
finished_atint?Timestamp завершения

client.add_book()

Добавить книгу в мою библиотеку.

ПараметрТипОписание
book_idstrUUID книги

Возвращает: Dict с полями:

ПолеТипОписание
statusstrsuccess или error
book_idstrUUID добавленной книги
book_titlestr?Название книги
library_card_uuidstr?UUID карточки в библиотеке
errorstr?Сообщение ошибки если есть

client.remove_book()

Удалить книгу из моей библиотеки.

ПараметрТипОписание
library_card_uuidstrUUID карточки (из get_my_library)

Возвращает: Dict с полями:

ПолеТипОписание
statusstrsuccess или error
messagestr?Описание результата
errorstr?Сообщение ошибки если есть

client.get_my_bookshelves()

Получить мои книжные полки.

ПараметрТипDefaultОписание
pageint1Номер страницы
per_pageint20Кол-во полок на странице

Возвращает: Dict с ключом data содержащим список полок:

ПолеТипОписание
uuidstrUUID полки
titlestrНазвание полки
annotationstr?Описание
books_countint?Кол-во книг на полке
followers_countint?Подписчиков

client.get_notifications_status()

Получить статус уведомлений.

ПараметрыНет
ВозвращаетDict с информацией о новых уведомлениях

client.get_reading_achievements()

Получить достижения за год.

ПараметрТипОписание
yearint?Год для статистики (по умолчанию текущий)

Возвращает: Dict с полями:

ПолеТипОписание
finished_books_countintКниг прочитано
pagesintВсего страниц
secondsintВсего секунд чтения
yearintГод
reading_challengeDict?Информация о челлендже

Получить популярные поиски.

ПараметрТипDefaultОписание
languagestrruКод языка
pageint1Номер страницы

Возвращает: Dict с ключом data содержащим список популярных запросов

client.get_emotions()

Получить доступные эмоции для рецензий.

ПараметрыНет
ВозвращаетDict с ключом data содержащим список эмоций

client.get_access_levels()

Получить уровни доступа к контенту.

ПараметрыНет
ВозвращаетDict с информацией об уровнях доступа

client.get_counters()

Получить счётчики профиля.

ПараметрыНет
ВозвращаетDict со счётчиками (сообщения, уведомления и т.д.)

client.get_context()

Получить контекст приложения.

ПараметрыНет
ВозвращаетDict с контекстной информацией приложения

client.get_privacy_settings()

Получить настройки приватности.

ПараметрыНет
ВозвращаетDict с настройками приватности профиля

client.get_sync_state()

Получить состояние синхронизации.

ПараметрыНет
ВозвращаетDict с состоянием синхронизации данных

client.get_metadata_secret()

Получить секретные метаданные.

ПараметрыНет
ВозвращаетDict с защищёнными метаданными профиля

client.get_user_json()

Получить полные данные пользователя.

ПараметрыНет
ВозвращаетDict с полным JSON объектом пользователя

client.get_push_notification_restrictions()

Получить ограничения для push уведомлений.

ПараметрыНет
ВозвращаетDict с настройками ограничений для push уведомлений

client.get_features()

Получить информацию о функциях.

ПараметрТипDefaultОписание
feature_namesList[str]?СтандартныеСписок названий функций для проверки

Возвращает: Dict с информацией о доступности функций

client.get_series_following()

Получить серии, на которые я подписан.

ПараметрТипDefaultОписание
user_idstr?Не требуетсяID пользователя (если None - свои серии)
pageint1Номер страницы
per_pageint20Кол-во серий на странице

Возвращает: Dict с ключом series содержащим список серий:

ПолеТипОписание
uuidstrУникальный ID серии
titlestrНазвание серии
descriptionstr?Описание серии
books_countint?Кол-во книг в серии

Таблица всех REST методов Client

Всего 21 метод (+ новый get_series_following):

МетодПараметрыНазначение
1test_token()Проверка валидности токена
2get_profile()Получить свой профиль
3get_my_library()limit, offsetПолучить мою библиотеку
4add_book()book_idДобавить книгу в библиотеку
5remove_book()library_card_uuidУдалить книгу из библиотеки
6get_my_bookshelves()page, per_pageПолучить мои полки
7get_notifications_status()Статус уведомлений
8get_reading_achievements()yearДостижения за год
9get_popular_searches()language, pageПопулярные поиски
10get_emotions()Доступные эмоции
11get_access_levels()Уровни доступа
12get_counters()Счётчики профиля
13get_context()Контекст приложения
14get_privacy_settings()Настройки приватности
15get_sync_state()Состояние синхронизации
16get_metadata_secret()Секретные метаданные
17get_user_json()Полные данные пользователя
18get_push_notification_restrictions()Ограничения push уведомлений
19get_features()feature_namesИнформация о функциях
20get_series_following()user_id, page, per_pageСерии подписок

Модели данных

Image / Avatar

ПолеТипОписание
smallstr?URL миниатюры
largestr?URL большого изображения
placeholderstr?Base64 заглушка
ratiofloat?Соотношение сторон
background_color_hexstr?Цвет фона (HEX)

Person

ПолеТипОписание
namestrИмя (автор, иллюстратор, чтец)
localestr?Локаль (ru, en и т.д.)
uuidstr?Уникальный ID
works_countint?Кол-во работ
imageImage?Профильное изображение

Label

ПолеТипОписание
titlestrНазвание метки
kindstrТип метки

Примеры

Публичные методы (без токена)

from yandex_book import YandexBookClient

client = YandexBookClient()

# Получить пользователя
user = client.get_user("b1234567890")
print(user.name, user.login)

# Книги пользователя
books = client.get_user_books(user.id_)
for book in books[:3]:
    print(book.display_title)

# Информация о книге
book = client.get_book("mqK3FFjg")
print(book.title, book.annotation)

Приватные методы (с токеном)

from yandex_book import YandexBookClient

client = YandexBookClient('y0_AgAAAA...')

# Проверить токен
if client.test_token():
    print("Токен валиден!")

# Профиль
me = client.get_profile()
print(me.name, me.login)

# Библиотека
library = client.get_my_library(limit=10)
for card in library:
    print(card.book.display_title, card.state)

# Добавить / удалить книгу
client.add_book("mqK3FFjg")

# Поиск через GraphQL
results = client.search("Мастер и Маргарита")

Async-версия

import asyncio
from yandex_book import YandexBookClientAsync

async def main():
    client = YandexBookClientAsync('y0_AgAAAA...')
    me = await client.get_profile()
    books = await client.get_user_books(me.id_)
    print(f"{me.name}: {len(books)} книг")
    await client._request.close()

asyncio.run(main())

Обработка ошибок

from yandex_book import YandexBookClient, NotFoundError, UnauthorizedError

client = YandexBookClient('y0_AgAAAA...')

try:
    user = client.get_user("nonexistent")
except NotFoundError:
    print("Пользователь не найден")
except UnauthorizedError:
    print("Неверный токен")

Лицензия

MIT

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts