Skip to content

Commit 8ffe734

Browse files
authored
Merge pull request #16 from DevCraftClub/mh-branch-1
2 parents bb0cd6b + 6e471c3 commit 8ffe734

11 files changed

Lines changed: 202 additions & 204 deletions

File tree

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
title: Атрибуты
22
nav:
3-
- ApiField: ApiField.md
4-
- Sensitive: Sensitive.md
5-
- Validation: Validation.md
3+
- "*"
4+
sort:
5+
type: alphabetical
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
title: Контракты
22
nav:
3-
- CacheInterface: CacheInterface.md
4-
- LoggerInterface: LoggerInterface.md
3+
- "*"
4+
sort:
5+
type: alphabetical
Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
title: Перечисления
22
nav:
3-
- FilterField: FilterField.md
4-
- FilterOperator: FilterOperator.md
5-
- HttpStatusCode: HttpStatusCode.md
6-
- ImageType: ImageType.md
7-
- ListCategory: ListCategory.md
8-
- MovieStatus: MovieStatus.md
9-
- MovieType: MovieType.md
10-
- PersonProfession: PersonProfession.md
11-
- PersonSex: PersonSex.md
12-
- RatingMpaa: RatingMpaa.md
13-
- ReviewType: ReviewType.md
14-
- SortDirection: SortDirection.md
15-
- SortField: SortField.md
16-
- StudioType: StudioType.md
3+
- "*"
4+
sort:
5+
type: alphabetical
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
title: Исключения
22
nav:
3-
- KinopoiskDevException: KinopoiskDevException.md
4-
- KinopoiskResponseException: KinopoiskResponseException.md
5-
- ValidationException: ValidationException.md
3+
- "*"
4+
sort:
5+
type: alphabetical
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
title: Фильтры
22
nav:
3-
- ImageSearchFilter: ImageSearchFilter.md
4-
- KeywordSearchFilter: KeywordSearchFilter.md
5-
- MovieSearchFilter: MovieSearchFilter.md
6-
- PersonSearchFilter: PersonSearchFilter.md
7-
- ReviewSearchFilter: ReviewSearchFilter.md
8-
- SeasonSearchFilter: SeasonSearchFilter.md
9-
- SortCriteria: SortCriteria.md
10-
- StudioSearchFilter: StudioSearchFilter.md
3+
- "*"
4+
sort:
5+
type: alphabetical
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
title: HTTP запросы
22
nav:
3-
- ImageRequests: ImageRequests.md
4-
- KeywordRequests: KeywordRequests.md
5-
- ListRequests: ListRequests.md
6-
- MovieRequests: MovieRequests.md
7-
- PersonRequests: PersonRequests.md
8-
- ReviewRequests: ReviewRequests.md
9-
- SeasonRequests: SeasonRequests.md
10-
- StudioRequests: StudioRequests.md
3+
- "*"
4+
sort:
5+
type: alphabetical

docs/dev/kinopoiskdev/README.md

Lines changed: 170 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,170 @@
1-
# Содержание
2-
3-
## Filter/
4-
5-
* [ReviewSearchFilter](Filter/ReviewSearchFilter.md)
6-
* [SortCriteria](Filter/SortCriteria.md)
7-
* [MovieSearchFilter](Filter/MovieSearchFilter.md)
8-
* [SeasonSearchFilter](Filter/SeasonSearchFilter.md)
9-
* [StudioSearchFilter](Filter/StudioSearchFilter.md)
10-
* [ImageSearchFilter](Filter/ImageSearchFilter.md)
11-
* [KeywordSearchFilter](Filter/KeywordSearchFilter.md)
12-
* [PersonSearchFilter](Filter/PersonSearchFilter.md)
13-
## Contracts/
14-
15-
* [CacheInterface](Contracts/CacheInterface.md)
16-
* [LoggerInterface](Contracts/LoggerInterface.md)
17-
## Utils/
18-
19-
* [DataManager](Utils/DataManager.md)
20-
* [FilterTrait](Utils/FilterTrait.md)
21-
* [SortManager](Utils/SortManager.md)
22-
* [MovieFilter](Utils/MovieFilter.md)
23-
## Models/
24-
25-
* [Spouses](Models/Spouses.md)
26-
* [FactInMovie](Models/FactInMovie.md)
27-
* [Rating](Models/Rating.md)
28-
* [WatchabilityItem](Models/WatchabilityItem.md)
29-
* [ExternalId](Models/ExternalId.md)
30-
* [CurrencyValue](Models/CurrencyValue.md)
31-
* [Name](Models/Name.md)
32-
* [FactInPerson](Models/FactInPerson.md)
33-
* [NominationAward](Models/NominationAward.md)
34-
* [YearRange](Models/YearRange.md)
35-
* [Networks](Models/Networks.md)
36-
* [Watchability](Models/Watchability.md)
37-
* [Movie](Models/Movie.md)
38-
* [MovieInPerson](Models/MovieInPerson.md)
39-
* [Season](Models/Season.md)
40-
* [NetworkItem](Models/NetworkItem.md)
41-
* [PersonPlace](Models/PersonPlace.md)
42-
* [MeiliPersonEntity](Models/MeiliPersonEntity.md)
43-
* [Video](Models/Video.md)
44-
* [DeathPlace](Models/DeathPlace.md)
45-
* [PersonAward](Models/PersonAward.md)
46-
* [LinkedMovie](Models/LinkedMovie.md)
47-
* [ItemName](Models/ItemName.md)
48-
* [SeasonInfo](Models/SeasonInfo.md)
49-
* [Logo](Models/Logo.md)
50-
* [Image](Models/Image.md)
51-
* [Review](Models/Review.md)
52-
* [BirthPlace](Models/BirthPlace.md)
53-
* [Votes](Models/Votes.md)
54-
* [ReviewInfo](Models/ReviewInfo.md)
55-
* [PersonInMovie](Models/PersonInMovie.md)
56-
* [Episode](Models/Episode.md)
57-
* [Audience](Models/Audience.md)
58-
* [ApiImage](Models/ApiImage.md)
59-
* [Premiere](Models/Premiere.md)
60-
* [Lists](Models/Lists.md)
61-
* [BaseModel](Models/BaseModel.md)
62-
* [MovieFromKeyword](Models/MovieFromKeyword.md)
63-
* [Nomination](Models/Nomination.md)
64-
* [Fees](Models/Fees.md)
65-
* [MovieAward](Models/MovieAward.md)
66-
* [SearchMovie](Models/SearchMovie.md)
67-
* [Person](Models/Person.md)
68-
* [AbstractBaseModel](Models/AbstractBaseModel.md)
69-
* [Studio](Models/Studio.md)
70-
* [Keyword](Models/Keyword.md)
71-
* [VideoTypes](Models/VideoTypes.md)
72-
* [ShortImage](Models/ShortImage.md)
73-
* [MovieFromStudio](Models/MovieFromStudio.md)
74-
## Http/
75-
76-
* [StudioRequests](Http/StudioRequests.md)
77-
* [MovieRequests](Http/MovieRequests.md)
78-
* [ImageRequests](Http/ImageRequests.md)
79-
* [KeywordRequests](Http/KeywordRequests.md)
80-
* [PersonRequests](Http/PersonRequests.md)
81-
* [SeasonRequests](Http/SeasonRequests.md)
82-
* [ListRequests](Http/ListRequests.md)
83-
* [ReviewRequests](Http/ReviewRequests.md)
84-
## Enums/
85-
86-
* [ListCategory](Enums/ListCategory.md)
87-
* [FilterOperator](Enums/FilterOperator.md)
88-
* [SortDirection](Enums/SortDirection.md)
89-
* [ImageType](Enums/ImageType.md)
90-
* [PersonProfession](Enums/PersonProfession.md)
91-
* [MovieType](Enums/MovieType.md)
92-
* [HttpStatusCode](Enums/HttpStatusCode.md)
93-
* [ReviewType](Enums/ReviewType.md)
94-
* [RatingMpaa](Enums/RatingMpaa.md)
95-
* [MovieStatus](Enums/MovieStatus.md)
96-
* [StudioType](Enums/StudioType.md)
97-
* [FilterField](Enums/FilterField.md)
98-
* [SortField](Enums/SortField.md)
99-
* [PersonSex](Enums/PersonSex.md)
100-
##
101-
102-
* [Kinopoisk](Kinopoisk.md)
103-
## Exceptions/
104-
105-
* [KinopoiskResponseException](Exceptions/KinopoiskResponseException.md)
106-
* [ValidationException](Exceptions/ValidationException.md)
107-
* [KinopoiskDevException](Exceptions/KinopoiskDevException.md)
108-
## Services/
109-
110-
* [CacheService](Services/CacheService.md)
111-
* [ValidationService](Services/ValidationService.md)
112-
## Responses/
113-
114-
* [ErrorResponseDto](Responses/ErrorResponseDto.md)
115-
* [BaseDocsResponseDto](Responses/BaseDocsResponseDto.md)
116-
* [BaseResponseDto](Responses/BaseResponseDto.md)
117-
## Responses/Api/
118-
119-
* [ImageDocsResponseDto](Responses/Api/ImageDocsResponseDto.md)
120-
* [PersonDocsResponseDto](Responses/Api/PersonDocsResponseDto.md)
121-
* [MovieAwardDocsResponseDto](Responses/Api/MovieAwardDocsResponseDto.md)
122-
* [PossibleValueDto](Responses/Api/PossibleValueDto.md)
123-
* [KeywordDocsResponseDto](Responses/Api/KeywordDocsResponseDto.md)
124-
* [MovieDocsResponseDto](Responses/Api/MovieDocsResponseDto.md)
125-
* [SearchMovieResponseDto](Responses/Api/SearchMovieResponseDto.md)
126-
* [ListDocsResponseDto](Responses/Api/ListDocsResponseDto.md)
127-
* [SearchPersonResponseDto](Responses/Api/SearchPersonResponseDto.md)
128-
* [ReviewDocsResponseDto](Responses/Api/ReviewDocsResponseDto.md)
129-
* [SeasonDocsResponseDto](Responses/Api/SeasonDocsResponseDto.md)
130-
* [StudioDocsResponseDto](Responses/Api/StudioDocsResponseDto.md)
131-
* [PersonAwardDocsResponseDto](Responses/Api/PersonAwardDocsResponseDto.md)
132-
* [SearchStudioResponseDto](Responses/Api/SearchStudioResponseDto.md)
133-
## Responses/Errors/
134-
135-
* [NotFoundErrorResponseDto](Responses/Errors/NotFoundErrorResponseDto.md)
136-
* [UnauthorizedErrorResponseDto](Responses/Errors/UnauthorizedErrorResponseDto.md)
137-
* [ForbiddenErrorResponseDto](Responses/Errors/ForbiddenErrorResponseDto.md)
138-
## Attributes/
139-
140-
* [ApiField](Attributes/ApiField.md)
141-
* [Sensitive](Attributes/Sensitive.md)
142-
* [Validation](Attributes/Validation.md)
1+
# KinopoiskDev PHP Wrapper
2+
3+
Современная PHP библиотека для работы с API [kinopoisk.dev](https://kinopoisk.dev) - неофициальным API КиноПоиска.
4+
5+
## 🚀 Особенности
6+
7+
- **Современный подход** - использует PHP 8.3+ атрибуты и строгую типизацию
8+
- **Расширенные фильтры** - гибкая система фильтрации с поддержкой диапазонов
9+
- **Автоматическая валидация** - декларативная валидация через атрибуты
10+
- **PSR стандарты** - совместимость с PSR-3 для логирования
11+
- **Активная поддержка** - [Telegram группа](https://t.me/omdb_dev) с 7,908 участниками
12+
- **Модульная архитектура** - четкое разделение ответственности
13+
14+
## 📦 Установка
15+
16+
```bash
17+
composer require devcraftclub/kinopoisk-dev
18+
```
19+
20+
## 🔧 Быстрый старт
21+
22+
```php
23+
<?php
24+
25+
use KinopoiskDev\Http\MovieRequests;
26+
use KinopoiskDev\Filter\MovieSearchFilter;
27+
28+
// Создание клиента
29+
$request = new MovieRequests(apiToken: 'your-api-token');
30+
31+
// Поиск фильмов с расширенными фильтрами
32+
$filter = new MovieSearchFilter();
33+
$filter->withYearBetween(2020, 2024)
34+
->withMinRating(7.0, 'kp')
35+
->withAllGenres(['драма', 'комедия'])
36+
->onlyMovies();
37+
38+
$movies = $request->searchMovies($filter);
39+
40+
// Получение информации о фильме
41+
$movie = $request->getMovieById(301);
42+
echo $movie->name; // "Матрица"
43+
```
44+
45+
## 🏗️ Архитектура
46+
47+
### Основные компоненты
48+
49+
- **Kinopoisk** - главный класс для работы с API
50+
- **Фильтры** - специализированные классы для разных типов поиска
51+
- **Модели** - типизированные объекты для данных
52+
- **Атрибуты** - декларативная валидация и конфигурация
53+
- **Сервисы** - бизнес-логика и утилиты
54+
55+
### Структура проекта
56+
57+
```
58+
KinopoiskDev/
59+
├── Attributes/ # PHP 8.3+ атрибуты
60+
├── Contracts/ # Интерфейсы (PSR-3, кэширование)
61+
├── Enums/ # Перечисления
62+
├── Exceptions/ # Специализированные исключения
63+
├── Filter/ # Классы фильтров
64+
├── Http/ # HTTP запросы
65+
├── Models/ # Модели данных
66+
├── Responses/ # Ответы API
67+
├── Services/ # Сервисы
68+
└── Utils/ # Утилиты
69+
```
70+
71+
## 🔍 Возможности
72+
73+
### Поиск фильмов
74+
75+
```php
76+
$filter = new MovieSearchFilter();
77+
$filter->withYearBetween(2020, 2024)
78+
->withMinRating(7.0, 'kp')
79+
->withAllGenres(['драма', 'комедия'])
80+
->onlyMovies()
81+
->inTop250();
82+
83+
$movies = $kinopoisk->searchMovies($filter);
84+
```
85+
86+
### Поиск персон
87+
88+
```php
89+
$filter = new PersonSearchFilter();
90+
$filter->onlyActors()
91+
->ageRange(30, 50)
92+
->withMinRating(7.0, 'kp');
93+
94+
$persons = $kinopoisk->searchPersons($filter);
95+
```
96+
97+
### Работа с изображениями
98+
99+
```php
100+
$filter = new ImageSearchFilter();
101+
$filter->onlyPosters()
102+
->minResolution(1920, 1080)
103+
->onlyHighRes();
104+
105+
$images = $kinopoisk->getMovieImages(301, $filter);
106+
```
107+
108+
### Автоматическая валидация
109+
110+
```php
111+
class Movie {
112+
#[Validation(required: true, minLength: 1, maxLength: 255)]
113+
public string $title;
114+
115+
#[Validation(min: 1900, max: 2030)]
116+
public int $year;
117+
118+
#[Sensitive(hideInJson: true)]
119+
public string $apiToken;
120+
}
121+
```
122+
123+
## 🛡️ Безопасность
124+
125+
- **Атрибут `#[Sensitive]`** - автоматическое скрытие конфиденциальных данных
126+
- **Валидация входных данных** - защита от некорректных параметров
127+
- **Типизированные модели** - предотвращение ошибок типов
128+
129+
## 📚 Документация
130+
131+
- **[Основной класс](Kinopoisk.md)** - главный клиент API
132+
- **[Атрибуты](Attributes/)** - валидация и конфигурация
133+
- **[Фильтры](Filter/)** - система фильтрации
134+
- **[Модели](Models/)** - структуры данных
135+
- **[Исключения](Exceptions/)** - обработка ошибок
136+
137+
## 🔗 Полезные ссылки
138+
139+
- **[kinopoisk.dev](https://kinopoisk.dev)** - официальный сайт API
140+
- **[Telegram группа](https://t.me/omdb_dev)** - активное сообщество (7,908 участников)
141+
- **[Сравнение с KinopoiskUnofficialTech](notkinopoiskphp-compare.md)** - различия между библиотеками
142+
143+
## 🤝 Поддержка
144+
145+
- **Telegram**: [@omdb_dev](https://t.me/omdb_dev) - основная группа поддержки
146+
- **Email**: поддержка через Telegram группу
147+
- **Документация**: полная документация в этом разделе
148+
149+
## 📄 Лицензия
150+
151+
MIT License - см. файл [LICENSE](LICENSE) для деталей.
152+
153+
## 🆚 Сравнение с альтернативами
154+
155+
| Особенность | KinopoiskDev | KinopoiskUnofficialTech |
156+
| --------------- | -------------------------------------- | --------------------------- |
157+
| **API** | [kinopoisk.dev](https://kinopoisk.dev) | kinopoiskapiunofficial.tech |
158+
| **Поддержка** | ✅ Активная (Telegram) | ❌ Отсутствует |
159+
| **PHP версия** | 8.3+ | 8.3+ |
160+
| **Архитектура** | Модульная | Монолитная |
161+
| **Валидация** | Автоматическая | Ручная |
162+
| **Фильтры** | Расширенные | Базовые |
163+
164+
## 🚀 Миграция
165+
166+
Если вы используете KinopoiskUnofficialTech, см. [руководство по миграции](notkinopoiskphp-compare.md#миграция).
167+
168+
---
169+
170+
**KinopoiskDev** - современное решение для работы с API КиноПоиска с активной поддержкой и развитием.

0 commit comments

Comments
 (0)