Warning
Данный инструмент разработан и опубликован исключительно в образовательных целях и предназначен для личного использования. Он не является официальным инструментом и не нарушает условия использования сторонних сервисов, с которыми взаимодействует. Автор не несёт ответственности за последствия его использования, включая, но не ограничиваясь, возможными блокировками, ограничениями доступа или юридическими последствиями. Ответственность за соблюдение условий использования сторонних сервисов, с которыми взаимодействует инструмент, полностью лежит на пользователе.
KINOPAPI - библиотека для работы с API Кинопоиска, она была разработана в учебных целях, для изучения способов работы с API и предоставляет удобный и эффективный интерфейс для получения информации с платформы Кинопоиск.
Библиотека поддерживает как синхронный, так и асинхронный (включая работу с файлами тел запросов) режим работы, что делает её гибкой и удобной для самых разных сценариев.
Ниже пример использования функции для глобального поиска по запросу:
import json
import asyncio
from kinopapi import suggest_search_async
async def start():
request = await suggest_search_async("Властелин колец")
data = await request.json()
print(json.dumps(data, indent=4, ensure_ascii=False))
asyncio.run(start())
Вывод полученных данных (для компактности большее кол-во строк было скрыто):
- 🎬 21 запрос в асинхронном и синхронном вариантах (ещё два запроса в разработке).
- 🔑 Нет необходимости в API-ключе или регистрации для доступа.
- 🚀 Без парсинга страниц — только быстрые и стабильные API-запросы.
- 📊 Актуальная и достоверная информация о фильмах и сериалах.
- 🔍 Доступ к поисковому алгоритму, рекомендациям и подбору схожего контента.
- 🎥 Медиа-контент: трейлеры, постеры и изображения.
- 💬 Отзывы пользователей, интересные факты и рецензии критиков.
- ⚡ Быстрая и удобная интеграция возможностей API Кинопоиска в ваши проекты.
- 🤖 Идеально подходит для использования в ботах, приложениях и сервисах, которые требуют информации о фильмах, сериалах и актерах с Кинопоиска.
-
Клонируем репозиторий:
git clone https://github.com/cloudsucker/kinopapi.git
-
Переходим в созданную директорию:
cd kinopapi
-
Создаём виртуальное окружение (опционально):
Рекомендуется, если в проекте не создано виртуальнуе окружение.
python -m venv .venv
Активируем виртуальное окружение:
Windows:
.venv\Scripts\activate
Linux/macOS:
source .venv/bin/activate
-
Устанавливаем библиотеку:
Обычная установка:
pip install .
Этот вариант устанавливает библиотеку как статический пакет, после чего клонированную директорию можно удалить. Если выйдет новая версия, её нужно будет обновлять вручную c помощью
pip install --upgrade .
Установка в режиме редактирования:
pip install -e .
Этот вариант устанавливает библиотеку с привязкой к исходному коду. Если библиотека обновится, например, при
git pull
, изменения автоматически применятся без необходимости переустановки. Важно не удалять директорию с библиотекой из вашего проекта.Рекомендуется, если вы планируете обновлять библиотеку из репозитория или вносить в неё изменения.
Note
Перед проведением тестирования создайте виртуальное окружение, убедитесь в его активации, и корректной установки библиотеки.
python -m unittest tests/test_async_requests.py
python -m unittest tests/test_sync_requests.py
Запросы делятся на несколько основных типов:
- Film - запросы для фильмов.
- TvSeries - запросы для сериалов.
- Movies - запросы общего типа (обычно включают и фильмы и сериалы).
- Person — запросы, связанные с людьми кинематографа.
- Search — запросы для поиска.
Запросы к API реализуются в виде функций, принимающих параметры, которые затем заменяются в теле запроса. Рассмотрим формат на примере:
Функции:
# FILM_MEDIA_POSTS
def film_media_posts(film_id: int) -> requests.Response:
"""API-запрос для получения медиа-постов фильма по его ID."""
return _request("FILM_MEDIA_POSTS", filmId=film_id)
# [ ASYNC ] FILM_MEDIA_POSTS
async def film_media_posts_async(film_id: int) -> aiohttp.ClientResponse:
"""Асинхронный API-запрос для получения медиа-постов фильма по его ID."""
return await _request_async("FILM_MEDIA_POSTS", filmId=film_id)
Тело запроса:
{
"operationName": "FilmMediaPosts",
"variables": {
"mediaPostsLimit": 8,
"filmId": 1209193 // это значение меняется на переданное в функцию
},
"query": "query FilmMediaPosts($filmId: Long!, $mediaPostsLimit: Int = 10) { film(id: $filmId) { id mediaPosts: post(limit: $mediaPostsLimit) { items { id title commentsCount publishedAt commentable type thumbImage { avatarsUrl fallbackUrl __typename } __typename } total __typename } __typename } } "
}
Параметр filmId
заменяется значением, переданным в функцию, и используется в ключе variables.filmId
в теле запроса.
Примечание: В ASYNC методах для работы с файлами используется aiofiles, так что вся работа происходит асинхронно.
- aiofiles==24.1.0
- aiohttp==3.11.11
- requests==2.32.3
Библиотека активно развивается, буду рад обратной связи.
По всем вопросам: [email protected]