Skip to main content

Yet another Python wrapper for Shikimori API

Project description

Shikithon

Очередной враппер для Shikimori API, написанный на Python

Publish Shikithon package to PyPI

Данная библиотека находится на ранней стадии разработки.

Большинство функционала отстуствует на данный момент и, скорее всего, текущий функционал может иметь критические баги.

На данный момент, использовать библиотеку как базу для вашего приложения стоит на свой страх и риск (Или если есть большое желание проверить работоспособность этой библиотеки).

Преимущество библиотеки

Данный враппер предоставляет базовую абстракцию, которая позволяет удобнее работать с методами API и их ответами.

Для каждого метода API существует свой метод класса, который благодаря библиотеке Pydantic, возвращает удобную модель данных для работы.

Все данные, возвращаемые API Shikimori, валидируются и парсятся в модели, со всеми необходимыми полями, а также дополнительными, которые могут вернуть некоторые методы API (Например /users/whoami и /users/:id/info).

Это позволяет не задумываться об обработке очередного ответа от сервера и сосредоточиться над реализацией своей идеи.

Также, данная библиотека поддерживает ранние версии Python, начиная с 3.8.10.

Поддержка Python 3.6.x не имеет смысла, так как она не является актуальной на момент разработки, а Python 3.7.x не поддерживается на Apple Silicon (Основная платформа, на которой разрабатывается данная библиотека).

Поэтому в качестве минимальной версии был выбран Python 3.8.10

Установка

pip install shikithon

Пример использования

С использованием полного конфига:

from json import loads
# Необязательно
from typing import Dict, List

from shikithon import API
# Необязательно
from shikithon.models.achievement import Achievement
# Необязательно
from shikithon.models.user import User

# Можно установить данные конфигурации в коде
config: Dict[str, str] = {
    "app_name": "...",
    "client_id": "...",
    "client_secret": "...",
    "redirect_uri": "...",
    "scopes": "...",
    "auth_code": "..."
}

# Или же прочитать его из внешнего файла
with open("config.json", "r", encoding="utf-8") as config_file:
    config_2: Dict[str, str] = loads(config_file.read())

# Инициализация объекта API
shikimori: API = API(config)

# Получение данных текущего пользователя через /users/whoami
user: User = shikimori.current_user()
print(f"Current user is {user.nickname}")

# Получение достижений пользователя через /achievements
# и вывод первого достижения
user_achievements: List[Achievement] = shikimori.achievements(user.id)
print(user_achievements[0])

# >> Current user is SecondThundeR
# >> id=719972946
# >> neko_id='animelist'
# >> level=1
# >> progress=77
# >> user_id=723052
# >> created_at=datetime.datetime(...)
# >> updated_at=datetime.datetime(...)

# На самом деле достижение выводится как одна строка с данными.
# Для удобства она показана здесь раздельно

С использованием имени приложения:

# Необязательно
from typing import List

from shikithon import API
# Необязательно
from shikithon.models.achievement import Achievement

# Можно установить имя приложения в коде
app_name: str = "..."

# Или же прочитать его из внешнего файла
with open("config.txt", "r", encoding="utf-8") as config_file:
    app_name_2: str = config_file.readline().strip()

# Инициализация объекта API
shikimori: API = API(app_name)

# Попытка получения данных текущего пользователя через /users/whoami
# При попытке доступа к защищенному методу, возвращает всегда None
user = shikimori.current_user()
print(user)

# Получение достижений пользователя через /achievements
# и вывод первого достижения
# Можно получать достижения любого пользователя через ID
user_achievements: List[Achievement] = shikimori.achievements(1)
print(user_achievements[0])

# >> None
# >> id=811883697
# >> neko_id='aa_megami_sama'
# >> level=0
# >> progress=31
# >> user_id=1
# >> created_at=datetime.datetime(...)
# >> updated_at=datetime.datetime(...)

# На самом деле достижение выводится как одна строка с данными.
# Для удобства она показана здесь раздельно

Пара уточнений по использованию:

  • Не обязательно импортировать модели, если вы не используете функцию аннотации типов

  • Поле scopes является строкой и разделяется "+", если значений несколько.

    Пример: user_rates+messages+comments+topics+...

  • При отсутствии каких-либо полей в данных конфигурации, библиотека выдает исключение

  • Посмотреть список поддерживаемых методов API вместе с названиями для них в библиотеке, можно здесь

Получение данных для конфигурации

Для начала вам необходимо создать новое OAuth-приложение здесь (После этого, сохраните app_name, client_id, client_secret, а так же redirect_uri)

Позже, на данной странице выберите свое приложение, необходимые разрешения и получите код авторизации (После этого сохраните, scopes и auth_code)

Теперь ваш файл конфигурации готов!

На первой инициализации, библиотека создаст кэш конфигурации в скрытом файле для дальнейших запросов. Если токены станут недоступны, библиотека автоматически обновит токены и кэшированный файл конфигурации

Также возможно использование библиотеки в "ограниченном режиме", используя только имя приложения для доступа к публичным методам API.

В таком случае, вы должны только передать строку с app_name для дальнейшей работы, как в примере выше.

Список изменений

Все изменения перечислены на странице релизов

Помощь проекту

Хотите внести вклад или оставить репорт о баге? Великолепно!

Для таких случаев, стоит почитать CONTRIBUTING.md

Зависимости проекта

Данный проект использует четыре библиотеки:

В качестве зависимостей для разработки, проект использует тоже четыре библиотеки:

Лицензия проекта

Данный проект имеет MIT лицензию. Ознакомиться с ее содержанием можно здесь

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shikithon-0.2.0.tar.gz (34.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shikithon-0.2.0-py3-none-any.whl (47.9 kB view details)

Uploaded Python 3

File details

Details for the file shikithon-0.2.0.tar.gz.

File metadata

  • Download URL: shikithon-0.2.0.tar.gz
  • Upload date:
  • Size: 34.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.12

File hashes

Hashes for shikithon-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3a70fd5039c84cf5b5c17bec4944ad0a2d0ed9ef7f2ed0f7c40c8ca49ccc74a8
MD5 29d4f02610aadc8d4f6ab941fe9fbda2
BLAKE2b-256 a8c0d5d22d8395025dac34e2742181df9fb361bd1ac9e69c2f6f8b2d874f8d12

See more details on using hashes here.

File details

Details for the file shikithon-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: shikithon-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 47.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.12

File hashes

Hashes for shikithon-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2c7ea166dae57bd89a282f9915dc93499e45db3eec37abfe50f0b9b4aba8285a
MD5 a4c249869a6239dd003b53a652bc1c9d
BLAKE2b-256 5a164d348a59bf4261e9c0686d9bedcdea83ce68962295448e2bc56133343f83

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page