Asynchronous client for api Shikimori written in Python 3.7 with asyncio and aiohttp.
Project description
Shiki4py
Асинхронный клиент для взаимодействия с api Shikimori, написанный на Python 3.7 c использованием asyncio и aiohttp.
Версии shiki4py v0.2.2 и раньше являются синхронными, но начиная с v2.0.0 этот пакет стал асинхронным. Рекомендую использовать в своих проектах только shiki4py >= v2.0.0!
Сравнение shiki4py v0.2.2 и v2.0.0 по времени отправки 25 запросов:
shiki4py v0.2.2 ~10.5 секунд
Код
```python from shiki4py import Clientclient = Client("APP_NAME", "CLIENT_ID", "CLIENT_SECRET") for i in range(25): client.get(f"/users/{i}/info")
</details>
shiki4py v2.0.0 ~5.07 секунд
<details>
<summary>Код</summary>
```python
from shiki4py import Shikimori
import asyncio
async def main():
async with Shikimori("APP_NAME", "CLIENT_ID", "CLIENT_SECRET") as api:
await asyncio.gather(*[api.request(f"/api/users/{i}/info") for i in range(25)])
asyncio.run(main())
Особенности
- Поддержка api v1 и v2
- Ограничения 5rps и 90rpm
- OAuth2 авторизация
- Контроль срока действия токена
- Хранение токенов в .env файле
- Функция безопасного создания комментариев
Установка
pip install shiki4py
Использование
Быстрый старт
from shiki4py import Shikimori
import asyncio
import logging
logging.basicConfig(level=logging.INFO)
async def main():
# Клиент без авторизации
async with Shikimori("APP_NAME") as api:
clubs = await api.request("/api/clubs", params={
"search": "Детектив Конан"
})
print(clubs)
# Клиент с авторизацией
# Метод open() можно не писать, если клиент без авторизации
api = await Shikimori("APP_NAME", "CLIENT_ID", "CLIENT_SECRET").open()
# Отправляем запросы
# await api.request(...)
# ...
await api.close()
asyncio.run(main())
Сохранение токенов авторизации
По умолчанию клиент сохраняет токены авторизации в файле .env, но при инициализации можно выбрать другой вариант хранения токенов, либо создать свой вариант унаследовав базовый класс и переопределив его методы.
from shiki4py import Shikimori
from shiki4py.store import BaseTokenStore
from shiki4py.store.memory import MemoryTokenStore
class MyTokenStore(BaseTokenStore):
...
api = Shikimori('APP_NAME',
'CLIENT_ID',
'CLIENT_SECRET',
# store=MyTokenStore()
store=MemoryTokenStore())
await api.open()
Зависимости
- aiohttp - для асинхронных HTTP запросов
- PyrateLimiter - для ограничения частоты запросов
- python-dotenv - для сохранения токенов авторизации в
.env
файл
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.