ReviewResponse
Документация по reviewresponse. Часть API wrapper для КиноПоиска.
Описание
ReviewResponse - это специализированный класс ответа для работы с отзывами на фильмы от Kinopoisk API. Наследует функциональность PaginatedResponse и добавляет специфичные поля для статистики отзывов по типам (положительные, отрицательные, нейтральные).
Основные возможности
- Наследование функциональности пагинации от
PaginatedResponse - Хранение статистики отзывов по типам
- Создание объекта из данных API с валидацией
- Преобразование в массив для сериализации
- Поддержка всех методов пагинации
Наследование
NotKinopoisk\Responses\PaginatedResponse
└── NotKinopoisk\Responses\ReviewResponseКонструктор
public function __construct(
int $total,
array $items,
int $currentPage,
int $totalPages,
public int $totalPositiveReviews,
public int $totalNegativeReviews,
public int $totalNeutralReviews
)Параметры
$total(int) - Общее количество отзывов$items(array) - Массив отзывов текущей страницы$currentPage(int) - Номер текущей страницы$totalPages(int) - Общее количество страниц$totalPositiveReviews(int) - Общее количество положительных отзывов$totalNegativeReviews(int) - Общее количество отрицательных отзывов$totalNeutralReviews(int) - Общее количество нейтральных отзывов
Свойства
totalPositiveReviews
public int $totalPositiveReviewsОбщее количество положительных отзывов на фильм.
totalNegativeReviews
public int $totalNegativeReviewsОбщее количество отрицательных отзывов на фильм.
totalNeutralReviews
public int $totalNeutralReviewsОбщее количество нейтральных отзывов на фильм.
Статические методы
fromArray()
public static function fromArray(array $data, string $cls): selfСоздает экземпляр ReviewResponse из массива данных API.
Параметры
$data(array) - Массив данных от API, содержащий информацию об отзывах$cls(string) - Имя класса для элементов коллекции (обычноReview::class)
Возвращает
ReviewResponse- Новый экземпляр с данными об отзывах
Исключения
KpValidationException- Если данные имеют некорректную структуру
Пример использования
$apiData = [
'total' => 150,
'items' => [...],
'current_page' => 1,
'total_pages' => 5,
'totalPositiveReviews' => 100,
'totalNegativeReviews' => 30,
'totalNeutralReviews' => 20
];
$reviewResponse = ReviewResponse::fromArray($apiData, Review::class);Методы экземпляра
toArray()
public function toArray(): arrayПреобразует объект в массив.
Возвращает
array- Массив с данными об отзывах и статистикой
Пример использования
$response = ReviewResponse::fromArray($apiData, Review::class);
$array = $response->toArray();Наследованные методы
ReviewResponse наследует все методы от PaginatedResponse:
getNextPage()- Получение номера следующей страницыhasNextPage()- Проверка наличия следующей страницыgetPreviousPage()- Получение номера предыдущей страницыhasPreviousPage()- Проверка наличия предыдущей страницыgetFirstPage()- Получение номера первой страницыgetLastPage()- Получение номера последней страницыisFirstPage()- Проверка, является ли текущая страница первойisLastPage()- Проверка, является ли текущая страница последнейgetPaginationInfo()- Получение информации о пагинации
Типы отзывов
Класс поддерживает следующие типы отзывов:
- Положительные - Отзывы с положительной оценкой
- Отрицательные - Отзывы с отрицательной оценкой
- Нейтральные - Отзывы с нейтральной оценкой
Статистика отзывов
Класс предоставляет доступ к статистике отзывов:
// Получение статистики
$positiveCount = $reviewResponse->totalPositiveReviews;
$negativeCount = $reviewResponse->totalNegativeReviews;
$neutralCount = $reviewResponse->totalNeutralReviews;
// Вычисление общего количества
$totalReviews = $positiveCount + $negativeCount + $neutralCount;
// Вычисление процентов
$positivePercent = ($positiveCount / $totalReviews) * 100;
$negativePercent = ($negativeCount / $totalReviews) * 100;
$neutralPercent = ($neutralCount / $totalReviews) * 100;Обработка ошибок
Класс включает обработку ошибок:
- Валидация структуры данных API
- Проверка типизации элементов
- Обработка некорректных данных отзывов
- Валидация параметров пагинации
Пример полного использования
use NotKinopoisk\Responses\ReviewResponse;
use NotKinopoisk\Models\Review;
// Получение данных от API
$apiData = [
'total' => 150,
'items' => [
[
'reviewId' => 1,
'reviewType' => 'POSITIVE',
'reviewText' => 'Отличный фильм!'
],
[
'reviewId' => 2,
'reviewType' => 'NEGATIVE',
'reviewText' => 'Не понравилось'
]
],
'current_page' => 1,
'total_pages' => 5,
'totalPositiveReviews' => 100,
'totalNegativeReviews' => 30,
'totalNeutralReviews' => 20
];
// Создание объекта ответа
$reviewResponse = ReviewResponse::fromArray($apiData, Review::class);
// Анализ статистики отзывов
$positiveCount = $reviewResponse->totalPositiveReviews;
$negativeCount = $reviewResponse->totalNegativeReviews;
$neutralCount = $reviewResponse->totalNeutralReviews;
$totalReviews = $positiveCount + $negativeCount + $neutralCount;
echo "Статистика отзывов:\n";
echo "- Положительных: {$positiveCount} (" . round(($positiveCount / $totalReviews) * 100, 1) . "%)\n";
echo "- Отрицательных: {$negativeCount} (" . round(($negativeCount / $totalReviews) * 100, 1) . "%)\n";
echo "- Нейтральных: {$neutralCount} (" . round(($neutralCount / $totalReviews) * 100, 1) . "%)\n";
echo "- Всего: {$totalReviews}\n";
// Работа с пагинацией
echo "\nПагинация:\n";
echo "- Текущая страница: {$reviewResponse->currentPage}\n";
echo "- Всего страниц: {$reviewResponse->totalPages}\n";
echo "- Отзывов на странице: " . count($reviewResponse->items) . "\n";
if ($reviewResponse->hasNextPage()) {
echo "- Следующая страница: {$reviewResponse->getNextPage()}\n";
}
if ($reviewResponse->hasPreviousPage()) {
echo "- Предыдущая страница: {$reviewResponse->getPreviousPage()}\n";
}
// Обработка отзывов
echo "\nОтзывы на текущей странице:\n";
foreach ($reviewResponse->items as $review) {
echo "- [{$review->reviewType}] {$review->reviewText}\n";
}
// Преобразование в массив
$array = $reviewResponse->toArray();Связанные классы
PaginatedResponse- Базовый класс для пагинированных ответовReview- Модель отзыва на фильмKpValidationException- Исключение для ошибок валидацииDefaultResponse- Базовый класс для всех ответов API