# [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"
}