Перейти к содержанию

Модели данных

Модели для представления данных из Kinopoisk API.


📚 Навигация: Главная → Модели


📋 Категории моделей

🎬 Основные модели фильмов

  • Film - Основная модель фильма/сериала
  • FilmSearchResult - Результат поиска фильмов
  • FilmCollection - Коллекция фильмов
  • RelatedFilm - Связанный фильм
  • Episode - Эпизод сериала
  • Season - Сезон сериала

👥 Модели персон

  • Person - Основная модель персоны
  • Staff - Съемочная группа
  • PersonFilm - Фильм персоны
  • PersonSpouse - Супруг персоны
  • PersonByNameResult - Результат поиска персоны по имени

📊 Модели контента

🏆 Модели наград и статистики

🌍 Справочные модели

🔑 Модели API

🔗 Связанные компоненты

Сервисы

Перечисления

Интерфейсы

🚀 Быстрый старт

Создание модели из массива данных

PHP
<?php

require_once 'vendor/autoload.php';

use NotKinopoisk\Models\Film;
use NotKinopoisk\Models\Person;
use NotKinopoisk\Models\Staff;

// Создание модели фильма
$filmData = [
    'kinopoiskId' => 301,
    'nameRu' => 'Матрица',
    'nameEn' => 'The Matrix',
    'rating' => 8.7,
    'year' => 1999
];

$film = Film::fromArray($filmData);

// Создание модели персоны
$personData = [
    'kinopoiskId' => 123,
    'nameRu' => 'Киану Ривз',
    'nameEn' => 'Keanu Reeves',
    'sex' => 'MALE'
];

$person = Person::fromArray($personData);

// Создание модели съемочной группы
$staffData = [
    'kinopoiskId' => 456,
    'nameRu' => 'Лана Вачовски',
    'nameEn' => 'Lana Wachowski',
    'professionKey' => 'DIRECTOR'
];

$staff = Staff::fromArray($staffData);

// Создание модели информации об API ключе
$apiKeyData = [
    'totalQuota' => ['value' => 1000, 'used' => 150],
    'dailyQuota' => ['value' => 100, 'used' => 25],
    'accountType' => 'FREE'
];

$apiKeyInfo = \NotKinopoisk\Models\ApiKeyInfo::fromArray($apiKeyData);

// Создание модели результата поиска персоны
$personSearchData = [
    'kinopoiskId' => 66539,
    'webUrl' => '10096',
    'nameRu' => 'Винс Гиллиган',
    'nameEn' => 'Vince Gilligan',
    'sex' => 'MALE',
    'posterUrl' => 'https://kinopoiskapiunofficial.tech/images/actor_posters/kp/10096.jpg'
];

$personResult = \NotKinopoisk\Models\PersonByNameResult::fromArray($personSearchData);

Работа с моделями

PHP
// Получение отображаемого имени
echo $film->getDisplayName(); // "Матрица (The Matrix)"

// Проверка свойств
if ($film->hasRating()) {
    echo "Рейтинг: {$film->rating}\n";
}

if ($person->isMale()) {
    echo "Пол: Мужской\n";
}

if ($staff->isDirector()) {
    echo "Профессия: Режиссер\n";
}

// Преобразование в массив
$filmArray = $film->toArray();

// Работа с информацией об API ключе
echo "Тип аккаунта: {$apiKeyInfo->accountType->getDisplayName()}\n";
echo "Осталось запросов: {$apiKeyInfo->getRemainingTotalQuota()}\n";

if ($apiKeyInfo->isUnlimited()) {
    echo "Безлимитный аккаунт!\n";
}

// Работа с результатом поиска персоны
echo "Персона: {$personResult->getDisplayName()}\n";
echo "Полное имя: {$personResult->getFullName()}\n";

if ($personResult->isMale()) {
    echo "Пол: Мужской\n";
}

📊 Статистика моделей

Всего моделей: 28

Основные модели фильмов (6)

  • Film - Самая сложная модель с 30+ свойствами
  • FilmSearchResult - Упрощенная версия для поиска
  • FilmCollection - Коллекция фильмов
  • RelatedFilm - Связанные фильмы
  • Episode - Эпизоды сериалов
  • Season - Сезоны сериалов

Модели персон (4)

  • Person - Основная модель персоны
  • Staff - Съемочная группа
  • PersonFilm - Фильмография
  • PersonSpouse - Семейные связи
  • PersonByNameResult - Результаты поиска персон

Модели контента (5)

  • Review - Отзывы пользователей
  • Fact - Интересные факты
  • Image - Изображения
  • Video - Видео контент
  • MediaPost - Медиа посты

Модели наград и статистики (4)

  • Award - Награды и номинации
  • BoxOffice - Кассовые сборы
  • UserVote - Пользовательские голоса
  • ExternalSource - Внешние источники

Справочные модели (3)

  • Country - Страны
  • Genre - Жанры
  • Distribution - Дистрибуция

Модели API (3)

  • ApiKeyInfo - Информация об API ключе
  • ApiKeyQouta - Квоты запросов
  • Filters - Фильтры для поиска

🔧 Общие методы

Все модели реализуют общие методы:

fromArray()

PHP
public static function fromArray(array $data): self

Создает экземпляр модели из массива данных API.

toArray()

PHP
public function toArray(): array

Преобразует модель в массив.

getDisplayName()

PHP
public function getDisplayName(): string

Возвращает отображаемое имя объекта.

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

Работа с фильмом

PHP
$film = Film::fromArray($filmData);

echo "Название: {$film->getDisplayName()}\n";
echo "Год: {$film->year}\n";
echo "Рейтинг: {$film->rating}\n";
echo "Описание: " . substr($film->description, 0, 100) . "...\n";

// Проверка свойств
if ($film->isSeries()) {
    echo "Тип: Сериал\n";
    echo "Количество сезонов: {$film->seasonsCount}\n";
} else {
    echo "Тип: Фильм\n";
    echo "Длительность: {$film->filmLength} мин\n";
}

// Работа с жанрами
if (!empty($film->genres)) {
    echo "Жанры: " . implode(', ', array_map(fn($g) => $g->genre, $film->genres)) . "\n";
}

// Работа со странами
if (!empty($film->countries)) {
    echo "Страны: " . implode(', ', array_map(fn($c) => $c->country, $film->countries)) . "\n";
}

Работа с персоной

PHP
$person = Person::fromArray($personData);

echo "Имя: {$person->getDisplayName()}\n";
echo "Дата рождения: {$person->birthday}\n";
echo "Место рождения: {$person->birthplace}\n";

// Проверка пола
if ($person->isMale()) {
    echo "Пол: Мужской\n";
} elseif ($person->isFemale()) {
    echo "Пол: Женский\n";
} else {
    echo "Пол: Не указан\n";
}

// Работа с профессиями
if (!empty($person->profession)) {
    echo "Профессии: " . implode(', ', $person->profession) . "\n";
}

Работа со съемочной группой

PHP
$staff = Staff::fromArray($staffData);

echo "Имя: {$staff->getDisplayName()}\n";
echo "Профессия: {$staff->getProfessionName()}\n";

// Проверка конкретных профессий
if ($staff->isDirector()) {
    echo "Роль: Режиссер\n";
} elseif ($staff->isActor()) {
    echo "Роль: Актер\n";
} elseif ($staff->isWriter()) {
    echo "Роль: Сценарист\n";
} elseif ($staff->isProducer()) {
    echo "Роль: Продюсер\n";
}

Работа с информацией об API ключе

PHP
$apiKeyInfo = ApiKeyInfo::fromArray($apiKeyData);

echo "Тип аккаунта: {$apiKeyInfo->accountType->getDisplayName()}\n";
echo "Общий лимит: {$apiKeyInfo->totalQuota->value}\n";
echo "Использовано: {$apiKeyInfo->totalQuota->used}\n";
echo "Осталось: {$apiKeyInfo->getRemainingTotalQuota()}\n";

// Проверка типа аккаунта
if ($apiKeyInfo->isUnlimited()) {
    echo "Безлимитный аккаунт - ограничений нет\n";
} else {
    echo "Ограниченный аккаунт\n";

    // Проверка лимитов
    $remainingTotal = $apiKeyInfo->getRemainingTotalQuota();
    $remainingDaily = $apiKeyInfo->getRemainingDailyQuota();

    if ($remainingTotal <= 0) {
        echo "Общий лимит исчерпан!\n";
    } else {
        echo "Осталось общих запросов: {$remainingTotal}\n";
    }

    if ($remainingDaily <= 0) {
        echo "Дневной лимит исчерпан!\n";
    } else {
        echo "Осталось дневных запросов: {$remainingDaily}\n";
    }
}

Работа с результатом поиска персоны

PHP
$personResult = PersonByNameResult::fromArray($personSearchData);

echo "ID: {$personResult->kinopoiskId}\n";
echo "Имя: {$personResult->getDisplayName()}\n";
echo "Полное имя: {$personResult->getFullName()}\n";
echo "Постер: {$personResult->posterUrl}\n";

// Проверка пола
if ($personResult->isMale()) {
    echo "Пол: Мужской\n";
} elseif ($personResult->isFemale()) {
    echo "Пол: Женский\n";
} else {
    echo "Пол: Неизвестен\n";
}

// Проверка наличия имен
if ($personResult->nameRu) {
    echo "Имя на русском: {$personResult->nameRu}\n";
}

if ($personResult->nameEn) {
    echo "Имя на английском: {$personResult->nameEn}\n";
}

🔗 Связанные разделы


📚 Навигация: Главная → Модели