Skip to content

Commit c7e8da3

Browse files
committed
omagah
1 parent 1056a18 commit c7e8da3

File tree

90 files changed

+499
-2581
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+499
-2581
lines changed

.eslintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
"ecmaVersion": "latest",
1111
"sourceType": "module"
1212
},
13-
"plugins": ["@typescript-eslint"],
13+
"plugins": ["@typescript-eslint", "@stylistic/eslint-plugin"],
1414
"rules": {
15+
"@stylistic/object-curly-spacing": ["error", "always"],
1516
"indent": ["error", 2],
1617
"linebreak-style": ["off"],
1718
"quotes": ["error", "single"],

README.md

Lines changed: 130 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
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+
// Создание клиента
2735
const client = new Client({
28-
token: "<public token>",
36+
token: '<public token>',
2937
});
38+
// или
39+
const client = Client.fromToken('<public token>')
3040

3141
client.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+
```

docs/.nojekyll

Lines changed: 0 additions & 1 deletion
This file was deleted.

docs/assets/highlight.css

Lines changed: 0 additions & 85 deletions
This file was deleted.

docs/assets/main.js

Lines changed: 0 additions & 59 deletions
This file was deleted.

docs/assets/navigation.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

docs/assets/search.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)