asyncopoisk


Nameasyncopoisk JSON
Version 1.0.2 PyPI version JSON
download
home_page
SummaryAsync wrapper for unofficial KinopoiskAPI
upload_time2024-01-11 08:26:51
maintainer
docs_urlNone
author
requires_python>=3.8
license
keywords api async asynchronous kinopoisk movies-api python-api
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # [Asyncopoisk](https://github.com/Ninnjah/asyncopoisk)

![PyPI - License](https://img.shields.io/pypi/l/asyncopoisk?color=%23d12e7d&style=flat-square&link=https%3A%2F%2Fpypi.org%2Fproject%2Fasyncopoisk%2F) ![PyPI - Version](https://img.shields.io/pypi/v/asyncopoisk?style=flat-square&color=%23d12e7d&link=https%3A%2F%2Fpypi.org%2Fproject%2Fasyncopoisk%2F) ![PyPI - Supported versions](https://img.shields.io/pypi/pyversions/asyncopoisk?style=flat-square&color=%23d12e7d&link=https%3A%2F%2Fpypi.org%2Fproject%2Fasyncopoisk%2F) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/ninnjah/asyncopoisk/tests.yml?branch=main&style=flat-square&link=https%3A%2F%2Fgithub.com%2FNinnjah%2Fasyncopoisk%2Factions)

Это асинхронная обертка для [Kinopoisk API Unofficial](https://kinopoiskapiunofficial.tech/). Создавалась для личного пользования, так как удобной и асинхронной обертки найти не смог. Это был мой первый опыт в написании АПИ обертки, так что PR и Issue приветствуются!

# Особенности
В обертки реализованы все методы, что были описаны в [документации](https://kinopoiskapiunofficial.tech/documentation/api/) на момент *2023.21.12* структура запросов сделана так, чтобы минимально отличаться от [документации](https://kinopoiskapiunofficial.tech/documentation/api/) самой АПИ

# Начало работы
Перед использованием asyncopoisk вам нужно получить токен. Получить его можно на сайте [Kinopoisk API Unofficial](https://kinopoiskapiunofficial.tech/)

Установите Asyncopoisk
```shell
pip install asyncopoisk
```

Далее создайте экземпляр обертки
```python
from asyncopoisk import KinopoiskAPI
kp = KinopoiskAPI(token="TOKEN")
```
Теперь с помощью `kp` вы можете вызывать методы АПИ.

> *ВАЖНО* так как обертка использует асинхронную httpx сессию, вызов всех методов должен происходить асинхронно

# Примеры
**Получить данные о фильме по kinopoisk id**
```python
import asyncio
from asyncopoisk import KinopoiskAPI


async def main(kp_token: str, kp_id: int):
    kp = KinopoiskAPI(token=kp_token)
    # Получаем фильм по id
    film = await kp.films(kp_id)


if __name__ == "__main__":
    asyncio.run(main(kp_token="TOKEN", kp_id=841700))
```

**Получить данные о фильме по imdb id**
```python
import asyncio
from asyncopoisk import KinopoiskAPI


async def main(kp_token: str, imdb_id: str):
    kp = KinopoiskAPI(token=kp_token)
    # Получаем фильм по imdb id
    film = await kp.films(imdb_id=imdb_id)


if __name__ == "__main__":
    asyncio.run(main(kp_token="TOKEN", imdb_id="tt3659388"))
```

**Получить список русских сериалов с рейтингом не ниже 6.5 от 2023 года**
> Номера стран и жанров можно получить используя метод `films.filters()`
```python
from typing import List

import asyncio
from asyncopoisk import KinopoiskAPI
from asyncopoisk.models.enums import SearchOrder, SearchFilmType


async def main(
	kp_token: str, 
    countries: List[int],
    order: SearchOrder,
    type: SearchFilmType,
    rating_from: float,
    year_from: int,
):
    kp = KinopoiskAPI(token=kp_token)
    # Поиск по фильтрам
    film = await kp.films(
        countries=countries,
        order=order,
        type=type,
        rating_from=rating_from,
        year_from=year_from,
    )


if __name__ == "__main__":
    asyncio.run(
        main(
            kp_token="TOKEN", 
            countries = [34],
            order = SearchOrder.RATING,
            type = SearchFilmType.TV_SERIES,
            rating_from = 6.5,
            year_from = 2023,
        )
    )
```

**Поиск по ключевому слову**
```python
import asyncio
from asyncopoisk import KinopoiskAPI
from asyncopoisk.models.enums import SearchOrder, SearchFilmType


async def main(kp_token: str, keyword: str):
    kp = KinopoiskAPI(token=kp_token)
    # Поиск по ключевому слову
    result = await kp.films.search_by_keyword(keyword=keyword)


if __name__ == "__main__":
    asyncio.run(
        main(
            kp_token="2d3c7c68-b288-4fbd-84d8-ccb68e495923",
            keyword="Марсианин",
        )
    )
```

# Зависимости
- [pydantic 2.3.0](https://github.com/pydantic/pydantic)
- [httpx 0.25.0](https://github.com/encode/httpx)
            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "asyncopoisk",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "api,async,asynchronous,kinopoisk,movies-api,python-api",
    "author": "",
    "author_email": "Ninnjah <yand.man4@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/5c/22/2c553b8614307eeb2a4be5fe65667c4d75ba62d40aa8dbf94de62889c85e/asyncopoisk-1.0.2.tar.gz",
    "platform": null,
    "description": "# [Asyncopoisk](https://github.com/Ninnjah/asyncopoisk)\n\n![PyPI - License](https://img.shields.io/pypi/l/asyncopoisk?color=%23d12e7d&style=flat-square&link=https%3A%2F%2Fpypi.org%2Fproject%2Fasyncopoisk%2F) ![PyPI - Version](https://img.shields.io/pypi/v/asyncopoisk?style=flat-square&color=%23d12e7d&link=https%3A%2F%2Fpypi.org%2Fproject%2Fasyncopoisk%2F) ![PyPI - Supported versions](https://img.shields.io/pypi/pyversions/asyncopoisk?style=flat-square&color=%23d12e7d&link=https%3A%2F%2Fpypi.org%2Fproject%2Fasyncopoisk%2F) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/ninnjah/asyncopoisk/tests.yml?branch=main&style=flat-square&link=https%3A%2F%2Fgithub.com%2FNinnjah%2Fasyncopoisk%2Factions)\n\n\u042d\u0442\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f [Kinopoisk API Unofficial](https://kinopoiskapiunofficial.tech/). \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433. \u042d\u0442\u043e \u0431\u044b\u043b \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u043f\u044b\u0442 \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0410\u041f\u0418 \u043e\u0431\u0435\u0440\u0442\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e PR \u0438 Issue \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f!\n\n# \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438\n\u0412 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e \u0431\u044b\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](https://kinopoiskapiunofficial.tech/documentation/api/) \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 *2023.21.12* \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](https://kinopoiskapiunofficial.tech/documentation/api/) \u0441\u0430\u043c\u043e\u0439 \u0410\u041f\u0418\n\n# \u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b\n\u041f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c asyncopoisk \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 [Kinopoisk API Unofficial](https://kinopoiskapiunofficial.tech/)\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Asyncopoisk\n```shell\npip install asyncopoisk\n```\n\n\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043e\u0431\u0435\u0440\u0442\u043a\u0438\n```python\nfrom asyncopoisk import KinopoiskAPI\nkp = KinopoiskAPI(token=\"TOKEN\")\n```\n\u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e `kp` \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0410\u041f\u0418.\n\n> *\u0412\u0410\u0416\u041d\u041e* \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e httpx \u0441\u0435\u0441\u0441\u0438\u044e, \u0432\u044b\u0437\u043e\u0432 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\n\n# \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n**\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0444\u0438\u043b\u044c\u043c\u0435 \u043f\u043e kinopoisk id**\n```python\nimport asyncio\nfrom asyncopoisk import KinopoiskAPI\n\n\nasync def main(kp_token: str, kp_id: int):\n    kp = KinopoiskAPI(token=kp_token)\n    # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u043c \u043f\u043e id\n    film = await kp.films(kp_id)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main(kp_token=\"TOKEN\", kp_id=841700))\n```\n\n**\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0444\u0438\u043b\u044c\u043c\u0435 \u043f\u043e imdb id**\n```python\nimport asyncio\nfrom asyncopoisk import KinopoiskAPI\n\n\nasync def main(kp_token: str, imdb_id: str):\n    kp = KinopoiskAPI(token=kp_token)\n    # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u043c \u043f\u043e imdb id\n    film = await kp.films(imdb_id=imdb_id)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main(kp_token=\"TOKEN\", imdb_id=\"tt3659388\"))\n```\n\n**\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0441\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0441 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c \u043d\u0435 \u043d\u0438\u0436\u0435 6.5 \u043e\u0442 2023 \u0433\u043e\u0434\u0430**\n> \u041d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u0430\u043d \u0438 \u0436\u0430\u043d\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 `films.filters()`\n```python\nfrom typing import List\n\nimport asyncio\nfrom asyncopoisk import KinopoiskAPI\nfrom asyncopoisk.models.enums import SearchOrder, SearchFilmType\n\n\nasync def main(\n\tkp_token: str, \n    countries: List[int],\n    order: SearchOrder,\n    type: SearchFilmType,\n    rating_from: float,\n    year_from: int,\n):\n    kp = KinopoiskAPI(token=kp_token)\n    # \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\n    film = await kp.films(\n        countries=countries,\n        order=order,\n        type=type,\n        rating_from=rating_from,\n        year_from=year_from,\n    )\n\n\nif __name__ == \"__main__\":\n    asyncio.run(\n        main(\n            kp_token=\"TOKEN\", \n            countries = [34],\n            order = SearchOrder.RATING,\n            type = SearchFilmType.TV_SERIES,\n            rating_from = 6.5,\n            year_from = 2023,\n        )\n    )\n```\n\n**\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443**\n```python\nimport asyncio\nfrom asyncopoisk import KinopoiskAPI\nfrom asyncopoisk.models.enums import SearchOrder, SearchFilmType\n\n\nasync def main(kp_token: str, keyword: str):\n    kp = KinopoiskAPI(token=kp_token)\n    # \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443\n    result = await kp.films.search_by_keyword(keyword=keyword)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(\n        main(\n            kp_token=\"2d3c7c68-b288-4fbd-84d8-ccb68e495923\",\n            keyword=\"\u041c\u0430\u0440\u0441\u0438\u0430\u043d\u0438\u043d\",\n        )\n    )\n```\n\n# \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\n- [pydantic 2.3.0](https://github.com/pydantic/pydantic)\n- [httpx 0.25.0](https://github.com/encode/httpx)",
    "bugtrack_url": null,
    "license": "",
    "summary": "Async wrapper for unofficial KinopoiskAPI",
    "version": "1.0.2",
    "project_urls": {
        "Homepage": "https://github.com/Ninnjah/asyncopoisk/",
        "Issues": "https://github.com/Ninnjah/asyncopoisk/issues/",
        "Repository": "https://github.com/Ninnjah/asyncopoisk/"
    },
    "split_keywords": [
        "api",
        "async",
        "asynchronous",
        "kinopoisk",
        "movies-api",
        "python-api"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "988f88151a7cb1f103baacd8d6b2d1fff08eae51d156dae96e925147c667c9da",
                "md5": "ddfb258c8ee7a404cedc414eeb6f05f3",
                "sha256": "98270d996101c93a18bdeb17efe052a32b4fe87c398deefc332109313b9bc2e1"
            },
            "downloads": -1,
            "filename": "asyncopoisk-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ddfb258c8ee7a404cedc414eeb6f05f3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 16686,
            "upload_time": "2024-01-11T08:26:49",
            "upload_time_iso_8601": "2024-01-11T08:26:49.367902Z",
            "url": "https://files.pythonhosted.org/packages/98/8f/88151a7cb1f103baacd8d6b2d1fff08eae51d156dae96e925147c667c9da/asyncopoisk-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5c222c553b8614307eeb2a4be5fe65667c4d75ba62d40aa8dbf94de62889c85e",
                "md5": "3f8932557a1dd8e27af0fedbb2a2e914",
                "sha256": "b94bfd6027443c723b4513cce2799c4725bae377ad348532e83ecc8b7bd917b1"
            },
            "downloads": -1,
            "filename": "asyncopoisk-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "3f8932557a1dd8e27af0fedbb2a2e914",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 15056,
            "upload_time": "2024-01-11T08:26:51",
            "upload_time_iso_8601": "2024-01-11T08:26:51.491061Z",
            "url": "https://files.pythonhosted.org/packages/5c/22/2c553b8614307eeb2a4be5fe65667c4d75ba62d40aa8dbf94de62889c85e/asyncopoisk-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-11 08:26:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Ninnjah",
    "github_project": "asyncopoisk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "asyncopoisk"
}
        
Elapsed time: 0.22621s