Skip to content

Мигрирование с v1 на v2

Uladzislau Hramyka edited this page Mar 6, 2023 · 6 revisions

Данный гайд по миграции более неактуален для версии 2.2.0 и выше. Узнать о том, как пользоваться обновленной библиотекой можно из примера кода в README

Для миграции с версии 1.x.x на версию 2.x.x нужно выполнить несколько действий:

  1. Добавить импорт asyncio и создать функцию async def main(): ... для запуска асинхронного кода
import asyncio

async def main():
  ...

asyncio.run(main())
  1. Переименовать класс API в ShikimoriAPI
from shikithon import ShikimoriAPI

...

shikimori = ShikimoriAPI(config)
  1. Выбрать режим использования API:
from shikithon import ShikimoriAPI

app_name = "..."
config = {"app_name": ..., ...}

# "Ограниченный" режим (без кода авторизации):
async def main():
  async with ShikimoriAPI(app_name) as shikimori:
    # вызов методов...

# Обычный режим
async def main():
  # Инициализация объекта API
  shikimori = ShikimoriAPI(config)

  # Запуск сессии (новое в 2.x.x)
  await shikimori.open()

  # вызов методов...

  # Закрытие сессии (новое в 2.x.x)
  await shikimori.close()

asyncio.run(main())
  1. Изменить формат вызовов методов
# Теперь у объекта ShikimoriAPI есть объекты API ресурсов, которые хранят в себе конкретные методы для каждого ресурса
# Названия взяты с https://shikimori.one/api/doc и https://shikimori.one/api/doc/1.0
# Структура: await [название объекта API].[название API ресурса].[название метода API ресурса]()
# Пример:

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

# Получение данных текущего пользователя через /users/whoami (Версия 2.x.x)
user = await shikimori.users.current()

---

# Получение достижений пользователя через /achievements (Версия 1.x.x)
user_achievements = shikimori.achievements(user.id)

# Получение достижений пользователя через /achievements (Версия 2.x.x)
user_achievements = await shikimori.achievements.get(user.id)

Новые функции, в версии 2.x.x:

  1. Отключение логгирования
shikithon = ShikimoriAPI(config, logging=False)
# или
async with ShikimoriAPI(app_name, logging=False) as shikimori:
  1. Вызов нескольких методов сразу
chainsaw, lycoris_chisato, lycoris_ranobe = await shikimori.multiple_requests([
    shikimori.animes.get_all(search="Бензопила"),
    shikimori.characters.search("Тисато Нисикиги"),
    shikimori.ranobes.get_all(search="Ликорис"),
])
print(chainsaw)
print(lycoris_chisato[:1])
print(lycoris_ranobe)

# вывод...

async with ShikimoriAPI(app_name) as shikimori:
  lycoris_ranobe, = await shikimori.multiple_requests([
    shikimori.ranobes.get_all(search="Ликорис")
  ])
  print(lycoris_ranobe)
  # вывод...
Clone this wiki locally