1- <p align =" center " ><img src =" .github/logo.svg " ></p >
1+ <p align =" center " ><img src =" https://raw.githubusercontent.com/thedvxchsquad/kodikwrapper/master/ .github/logo.svg" ></p >
22<p align =" center " >
3- <a href =" https://www.npmjs.com/package/kodikwrapper " ><img src =" https://img.shields.io/npm/v/kodikwrapper.svg?style=flat-square " alt =" NPM version " ></a >
4- <a href =" https://www.npmjs.com/package/kodikwrapper " ><img src =" https://img.shields.io/npm/dt/kodikwrapper.svg?style=flat-square " alt =" NPM downloads " ></a >
3+ <a href="https://www.npmjs.com/package/kodikwrapper"><img src="https://img.shields.io/npm/v/kodikwrapper.svg?style=flat-square" alt="NPM version"></a>
4+ <a href="https://www.npmjs.com/package/kodikwrapper"><img src="https://img.shields.io/npm/dt/kodikwrapper.svg?style=flat-square" alt="NPM downloads"></a>
55</p >
66
7- > kodikwrapper is an implementation of the client API kodikapi.com for Node.js
7+ > kodikwrapper - это реализация API kodikapi.com для Node.js
88
9- | 📖 [ References] ( https://thedvxchsquad.github.io/kodikwrapper/index.html ) | 📖 [ Kodik API docs (needs authorization)] ( https://bd.kodik.biz/api/info ) |
10- | --------------------------------------------------------------------------| -------------------------------------------------------------------------:|
9+ > [ !NOTE]
10+ > Начиная с v3.0.0 поддерживается только Node.js 18.0.0+
11+
12+ | 📖 [ TSDocs] ( https://tsdocs.dev/search/docs/kodikwrapper ) | 📖 [ Kodik API документация (требуется авторизация)] ( https://bd.kodik.biz/api/info ) |
13+ | -------------------------------------------------------------------------| -----------------------------------------------------------------------------------:|
1114
1215## Установка
1316``` bash
@@ -17,50 +20,134 @@ pnpm add kodikwrapper
1720```
1821
1922## Использования
20- Смотрите все доступные методы в [ 📖 Референсах] ( https://thedvxchsquad.github.io/kodikwrapper/index.html ) или [ документации Kodik API] ( https://bd.kodik.biz/api/info ) .
21- ``` typescript
22- import { Client } from " kodikwrapper" ; // ESM / TypeScript
23- // OR
24- const { Client } = require (" kodikwrapper" ); // CommonJS
2523
26- // Create client
24+ ### Класс Client
25+ Класс ` Client ` реализует только публичное API из [ документации Kodik API] ( https://bd.kodik.biz/api/info ) . Это означает, что методы будут называться одинаково.
26+
27+ Смотрите все доступные методы в [ 📖 TSDocs] ( https://tsdocs.dev/search/docs/kodikwrapper ) , [ документации Kodik API] ( https://bd.kodik.biz/api/info ) или с помощью подсказок в IDE.
28+
29+ ``` javascript
30+ import { Client } from ' kodikwrapper' ; // ESM / TypeScript
31+ // или
32+ const { Client } = require (' kodikwrapper' ); // CommonJS
33+
34+ // Создание клиента
2735const client = new Client ({
28- token: " <public token>" ,
36+ token: ' <public token>' ,
2937});
38+ // или
39+ const client = Client .fromToken (' <public token>' )
3040
3141client .search ({
3242 limit: 1 ,
33- title: " судьба ночь схватки прикосновение небес" ,
43+ title: ' судьба ночь схватки прикосновение небес' ,
3444})
35- .then (response => response .results .shift ())
36- .then (material => console .log (material ));
45+ .then ((response ) => response .results .shift ())
46+ .then ((material ) => console .log (material));
47+
3748/**
38- {
39- id: 'movie-27068',
40- type: 'anime',
41- link: '//aniqit.com/video/27068/35bd2611080a6add3e209be3b76cd16d/720p',
42- title: 'Судьба: Ночь схватки. Прикосновение небес',
43- title_orig: "Gekijouban Fate/Stay Night: Heaven's Feel - I. Presage Flower",
44- other_title: 'Судьба: Ночь схватки. Прикосновение небес (фильм первый) / Судьба. Ночь схватки - Прикосновение небес.
45- Предвещающий цветок',
46- translation: { id: 767, title: 'SHIZA Project', type: 'voice' },
47- year: 2017,
48- kinopoisk_id: '895880',
49- imdb_id: 'tt4054952',
50- worldart_link: 'http://www.world-art.ru/animation/animation.php?id=2588',
51- shikimori_id: '25537',
52- quality: 'BDRip 720p',
53- camrip: false,
54- blocked_countries: [],
55- created_at: '2018-09-28T13:56:40Z',
56- updated_at: '2019-11-16T22:10:16Z',
57- screenshots: [
58- 'https://i.kodik.biz/screenshots/video/27068/1.jpg',
59- 'https://i.kodik.biz/screenshots/video/27068/2.jpg',
60- 'https://i.kodik.biz/screenshots/video/27068/3.jpg',
61- 'https://i.kodik.biz/screenshots/video/27068/4.jpg',
62- 'https://i.kodik.biz/screenshots/video/27068/5.jpg'
63- ]
64- }
49+ {
50+ id: 'movie-27068',
51+ type: 'anime',
52+ link: '//aniqit.com/video/27068/35bd2611080a6add3e209be3b76cd16d/720p',
53+ title: 'Судьба: Ночь схватки. Прикосновение небес',
54+ title_orig: "Gekijouban Fate/Stay Night: Heaven's Feel - I. Presage Flower",
55+ other_title: 'Судьба: Ночь схватки. Прикосновение небес (фильм первый) / Судьба. Ночь схватки - Прикосновение небес.
56+ Предвещающий цветок',
57+ translation: { id: 767, title: 'SHIZA Project', type: 'voice' },
58+ year: 2017,
59+ kinopoisk_id: '895880',
60+ imdb_id: 'tt4054952',
61+ worldart_link: 'http://www.world-art.ru/animation/animation.php?id=2588',
62+ shikimori_id: '25537',
63+ quality: 'BDRip 720p',
64+ camrip: false,
65+ blocked_countries: [],
66+ created_at: '2018-09-28T13:56:40Z',
67+ updated_at: '2019-11-16T22:10:16Z',
68+ screenshots: [
69+ 'https://i.kodik.biz/screenshots/video/27068/1.jpg',
70+ 'https://i.kodik.biz/screenshots/video/27068/2.jpg',
71+ 'https://i.kodik.biz/screenshots/video/27068/3.jpg',
72+ 'https://i.kodik.biz/screenshots/video/27068/4.jpg',
73+ 'https://i.kodik.biz/screenshots/video/27068/5.jpg'
74+ ]
75+ }
6576*/
6677```
78+
79+ ### Класс VideoLinks
80+
81+ Класс ` VideoLinks ` используется для получения прямых ссылок на файлы с Kodik и получения дополнительной информации о материале (тайминги для пропуска опенингов/эндингов, озвучку и др.), как это делает их плеер.
82+
83+ ``` javascript
84+ import { Client , VideoLinks } from ' kodikwrapper' ;
85+
86+ const client = Client .fromToken (' <public token>' )
87+
88+ client .search ({
89+ limit: 1 ,
90+ title: ' судьба ночь схватки прикосновение небес' ,
91+ })
92+ .then ((response ) => response .results .shift ())
93+ .then (async (material ) => {
94+ if (! material) throw new Error (' не найдено' );
95+
96+ const links = await VideoLinks .getLinks ({
97+ link: material .link
98+ });
99+
100+ console .log (links);
101+ });
102+
103+ /**
104+ {
105+ "360": [
106+ {
107+ "src": "//cloud.kodik-storage.com/useruploads/c936a552-2455-43e2-9854-1625aaac9db8/fd762bc53599a4b97c8151a5fc725ddb:2024021820/360.mp4:hls:manifest.m3u8",
108+ "type": "application/x-mpegURL"
109+ }
110+ ],
111+ "480": [
112+ {
113+ "src": "//cloud.kodik-storage.com/useruploads/c936a552-2455-43e2-9854-1625aaac9db8/fd762bc53599a4b97c8151a5fc725ddb:2024021820/480.mp4:hls:manifest.m3u8",
114+ "type": "application/x-mpegURL"
115+ }
116+ ],
117+ "720": [
118+ {
119+ "src": "//cloud.kodik-storage.com/useruploads/c936a552-2455-43e2-9854-1625aaac9db8/fd762bc53599a4b97c8151a5fc725ddb:2024021820/720.mp4:hls:manifest.m3u8",
120+ "type": "application/x-mpegURL"
121+ }
122+ ]
123+ }
124+ */
125+ ```
126+
127+
128+ #### Актуальный endpoint для получения ссылок
129+
130+ Недавно Kodik начал часто менять endpoint для получения прямых ссылок, поэтому в прошлых обновлениях (до v3.0.0) я добавил поле ` videoInfoUrl ` (начиная с v3.0.0 - ` videoInfoEndpoint ` ) для его замены.
131+
132+ Так как они могут снова изменить endpoint, начиная с v3.0.0, в класс ` VideoLinks ` добавлен метод ` getActualVideoInfoEndpoint ` для получения актуального endpoint, в который необходимо передать ссылку на чанк с плеером. Получить ссылку на чанк можно с помощью метода ` parseLink ` с переданным параметром ` extended: true `
133+
134+ ``` javascript
135+ const getLinksWithActualEndpoint = async (link ) => {
136+ const parsedLink = await VideoLinks .parseLink ({
137+ link, extended: true
138+ });
139+
140+ if (! parsedLink .ex .playerSingleUrl ) throw new Error (' не могу получить ссылку на чанк с плеером' );
141+
142+ const endpoint = await VideoLinks .getActualVideoInfoEndpoint (parsedLink .ex .playerSingleUrl );
143+
144+ const links = await VideoLinks .getLinks ({
145+ link, videoInfoEndpoint: endpoint
146+ });
147+
148+ return links;
149+ };
150+
151+ getLinksWithActualEndpoint (' //aniqit.com/video/27068/35bd2611080a6add3e209be3b76cd16d/720p' )
152+ .then (console .log )
153+ ```
0 commit comments