Skip to content

Commit

Permalink
feat(examples): add example package.json and movie.ts script with usa…
Browse files Browse the repository at this point in the history
…ge of kinopoiskdev_ts_client API
  • Loading branch information
mdwitr0 committed Jun 25, 2023
1 parent 5e69013 commit 91ad1c1
Show file tree
Hide file tree
Showing 9 changed files with 388 additions and 2 deletions.
212 changes: 212 additions & 0 deletions examples/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions examples/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "kinopoiskdev_client_example",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"start:movie": "ts-node ./src/movie.ts"
},
"author": "",
"license": "ISC",
"dependencies": {
"@openmoviedb/kinopoiskdev_ts_client": "^1.0.3"
},
"devDependencies": {
"ts-node": "^10.9.1",
"typescript": "^5.1.3"
}
}
Empty file added examples/src/image.ts
Empty file.
Empty file added examples/src/keyword.ts
Empty file.
155 changes: 155 additions & 0 deletions examples/src/movie.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import {
KinopoiskDev,
MovieQueryBuilder,
SPECIAL_VALUE,
SORT_TYPE,
Filter,
MovieFields,
} from '@openmoviedb/kinopoiskdev_ts_client';

const kp = new KinopoiskDev('ВАШ ТОКЕН');

// Получение списка фильмов за 2020-2023 годы с рейтингом от 7.5 до 10, у которых есть постер
// Этот пример использует query builder
const getRelatedByQueryBuilderMovies = async () => {
// Создаем билдер запросов для фильмов
const queryBuilder = new MovieQueryBuilder();

// Выбираем поля, которые мы хотим получить в ответе
// Полный список полей можно посмотреть в документации
// https://api.kinopoisk.dev/v1/documentation для метода /v1.3/movie
const query = queryBuilder
.select(['id', 'name', 'rating', 'poster', 'year'])
// Добавляем фильтр поиска по указанному диапазону года
.filterRange('year', [2020, 2023])
// Добавляем фильтр поиска по указанному диапазону рейтинга
.filterRange('rating.kp', [7.5, 10])
// Добавляем фильтр для поиска фильмов с постером
.filterExact('poster.url', SPECIAL_VALUE.NOT_NULL)
// Добавляем сортировку по рейтингу
.sort('rating.kp', SORT_TYPE.DESC)
// Добавляем пагинацию и получаем 1 страницу по с 10 фильмами на странице
.paginate(1, 10)
// Собираем запрос
.build();

// Отправляем запрос на получение фильмов
const { data, error, message } = await kp.movie.getByFilters(query);

if (data) {
const { docs, page, limit } = data;
console.log(`Страница ${page} из ${limit}`);
console.log(docs);
}

// Если будет ошибка, то выведем ее в консоль
if (error) console.log(error, message);
};

// Этот пример без использования query builder. Объект для запроса создается вручную на основе документации API
const getRelatedWithoutQueryBuilderMovies = async () => {
const query: Filter<MovieFields> = {
// Выбираем поля, которые мы хотим получить в ответе
selectFields: ['id', 'name', 'rating', 'poster', 'year'],
// Добавляем фильтр поиска по указанному диапазону года
year: '2020-2023',
// Добавляем фильтр поиска по указанному диапазону рейтинга
'rating.kp': '7.5-10',
// Добавляем фильтр для поиска фильмов с постером
'poster.url': '!null',
// Добавляем сортировку по рейтингу
sortField: 'rating.kp',
sortType: '-1',
// Добавляем пагинацию и получаем 1 страницу по с 10 фильмами на странице
page: 1,
limit: 10,
};

// Отправляем запрос на получение фильмов
const { data, error, message } = await kp.movie.getByFilters(query);

if (data) {
const { docs, page, limit } = data;
console.log(`Страница ${page} из ${limit}`);
console.log(docs);
}

// Если будет ошибка, то выведем ее в консоль
if (error) console.log(error, message);
};

// Получение фильма по id
const getMovieById = async () => {
const { data, error, message } = await kp.movie.getById(666);

if (data) {
console.log(data);
}

// Если будет ошибка, то выведем ее в консоль
if (error) console.log(error, message);
};

// Получить рандомный фильм с использованием стандартного метода
// Вернутся все поля фильма как в методе getById
const getRandomMovie = async () => {
const { data, error, message } = await kp.movie.getRandom();

if (data) {
console.log(data);
}

// Если будет ошибка, то выведем ее в консоль
if (error) console.log(error, message);
};

// Получить рандомный фильм с указанными фильтрами
// Вернутся только указанные поля фильма или поля по умолчанию, если ничего не указано
const getRandomMovieWithFilters = async () => {
// Создаем билдер запросов для фильмов
const queryBuilder = new MovieQueryBuilder();

// Выбираем поля, которые мы хотим получить в ответе
const baseQuery = queryBuilder
.select(['id', 'name', 'rating', 'poster', 'year'])
// Добавляем фильтр для поиска фильмов с постером
.filterExact('poster.url', SPECIAL_VALUE.NOT_NULL)
// Добавляем фильтр для поиска фильмов с трейлерами
.filterExact('videos.trailers.url', SPECIAL_VALUE.NOT_NULL);

const firstQuery = baseQuery
// получим первую страницу, чтобы узнать сколько всего фильмов удовлетворяет нашим фильтрам
.paginate(1, 1)
// Собираем запрос
.build();

// Отправляем запрос на получение количества фильмов
const firstRes = await kp.movie.getByFilters(firstQuery);
if (firstRes.data) {
const { pages } = firstRes.data;
// Генерируем случайное число от 1 до pages
const randomPage = Math.floor(Math.random() * pages) + 1;
const query = baseQuery.paginate(randomPage, 1).build();

const { data, error, message } = await kp.movie.getByFilters(query);

if (data) {
console.log(data.docs[0]);
}
// Если будет ошибка, то выведем ее в консоль
if (error) console.log(error, message);
}

// Если будет ошибка, то выведем ее в консоль
if (firstRes.error) console.log(firstRes.error, firstRes.message);
};

const bootstrap = async () => {
await getMovieById();
await getRelatedByQueryBuilderMovies();
await getRelatedWithoutQueryBuilderMovies();
await getRandomMovie();
await getRandomMovieWithFilters();
};

bootstrap();
Empty file added examples/src/person.ts
Empty file.
Empty file added examples/src/season.ts
Empty file.
Empty file added examples/src/studio.ts
Empty file.
Loading

0 comments on commit 91ad1c1

Please sign in to comment.