Модели данных
Документация по модели данных. Часть API wrapper для КиноПоиска.
Модели для представления данных из Kinopoisk API.
📚 Навигация: Главная → Модели
📋 Категории моделей
🎬 Основные модели фильмов
- Film - Основная модель фильма/сериала
- FilmSearchResult - Результат поиска фильмов
- FilmCollection - Коллекция фильмов
- RelatedFilm - Связанный фильм
- Episode - Эпизод сериала
- Season - Сезон сериала
👥 Модели персон
- Person - Основная модель персоны
- Staff - Съемочная группа
- PersonFilm - Фильм персоны
- PersonSpouse - Супруг персоны
- PersonByNameResult - Результат поиска персоны по имени
📊 Модели контента
🏆 Модели наград и статистики
- Award - Награда
- BoxOffice - Кассовые сборы
- UserVote - Голос пользователя
- ExternalSource - Внешний источник
🌍 Справочные модели
- Country - Страна
- Genre - Жанр
- Distribution - Дистрибуция
🔑 Модели API
- ApiKeyInfo - Информация об API ключе
- ApiKeyQouta - Квота API ключа
- Filters - Фильтры
🔗 Связанные компоненты
Сервисы
- FilmService - Работа с фильмами
- PersonService - Работа с персонами
- MediaService - Работа с медиа
- UserService - Работа с пользователями
Перечисления
- ImageType - Типы изображений
- ReviewType - Типы отзывов
- FactType - Типы фактов
- ProfessionKey - Ключи профессий
- VideoSite - Сайты видео
- BoxOfficeType - Типы кассовых сборов
- ContentType - Типы контента
- Sex - Пол
- RelationType - Типы связей
Интерфейсы
- ModelInterface - Базовый интерфейс модели
🚀 Быстрый старт
Создание модели из массива данных
<?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);
Работа с моделями
// Получение отображаемого имени
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()
public static function fromArray(array $data): selfСоздает экземпляр модели из массива данных API.
toArray()
public function toArray(): arrayПреобразует модель в массив.
getDisplayName()
public function getDisplayName(): stringВозвращает отображаемое имя объекта.
📖 Примеры использования
Работа с фильмом
$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";
}Работа с персоной
$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";
}Работа со съемочной группой
$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 ключе
$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";
}
}Работа с результатом поиска персоны
$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";
}🔗 Связанные разделы
- Сервисы - Работа с API
- Перечисления - Константы и типы
- Ответы - Классы ответов
- Исключения - Обработка ошибок
- Интерфейсы - Базовые интерфейсы
📚 Навигация: Главная → Модели