Неофициальное API для hentasis5.top.
Это локальный сервис, а не парсер «по каждому клику»: первый запрос тянет HTML по HTTP, после этого тайтлы, жанры, годы и списки лежат в data/ и отдаются из кэша. Страницы источника - обычный серверный HTML на DLE, Chromium не нужен.
18+ / NSFW. Неофициально. Используйте на свой риск.
Нужен Node.js 18+.
git clone https://github.com/lixim/hentasis-parser.git
cd hentasis-parser
npm install
npm startИли с GitHub без клона:
npm install github:lixim/hentasis-parser
npx hentasis-parserНа Windows start.bat при необходимости ставит зависимости и запускает сервер.
Дальше откройте:
- Демо-сайт - http://localhost:3000/
- Индекс API - http://localhost:3000/api
- Health - http://localhost:3000/health
- OpenAPI - http://localhost:3000/openapi.json
Демо в tests/ ходит в то же API: карточки, страница тайтла с плеером и сырой JSON.
const { HentasisAPI, HentasisClient } = require('hentasis-parser');
// Каталог в процессе (без HTTP-сервера)
const api = new HentasisAPI();
api.init();
await api.warmUp();
const latest = await api.latest(1);
const title = await api.title(latest.data.results[0].id);
// HTTP-клиент к уже запущенному серверу
const client = new HentasisClient({ baseUrl: 'http://localhost:3000' });
const search = await client.search('Someya');В кэшированных ответах есть meta.source (cache | live | catalog) и meta.cachedAt. Чтобы обойти кэш, передайте force=1.
| Метод | Путь | Описание |
|---|---|---|
| GET | /health |
Состояние процесса и каталога |
| GET | /api/status |
Тайтлы / жанры / годы в локальном хранилище |
| GET | /api/latest?page=1 |
Новые тайтлы |
| GET | /api/search?q=&page=1 |
Поиск |
| GET | /api/genre/:slug?page=1 |
Фильтр по жанру (Romance, Big, …) |
| GET | /api/year/:year?page=1 |
Фильтр по году |
| GET | /api/genres |
Справочник жанров |
| GET | /api/years |
Справочник годов |
| GET | /api/titles |
Локальный каталог (q, genre, year, page, limit) |
| GET | /api/titles/:id |
Полный тайтл (плееры, описание). При промахе кэша - живой запрос |
| GET | /api/parse?url= |
Разобрать URL источника и сохранить в каталог |
| POST | /api/sync?pages=1 |
Обновить новинки и справочники |
Примеры:
curl "http://localhost:3000/api/latest"
curl "http://localhost:3000/api/titles/1072"
curl -X POST "http://localhost:3000/api/sync?pages=2"В ответе тайтла есть id, name, poster, year, genres, players[] (episode, title, url, type).
Файлы в data/ (в git не попадают):
catalog.json- индекс тайтловmeta.json- жанры и годыcache.json- страницы списковtitles/*.json- полные карточки тайтлов
TTL по умолчанию: списки 5 мин, тайтлы 30 мин, справочники 6 часов.
| Переменная | По умолчанию | Назначение |
|---|---|---|
PORT |
3000 |
HTTP-порт |
HENTASIS_BASE_URL |
https://v4.hentasis5.top |
Адрес источника |
HENTASIS_DATA_DIR |
./data |
Папка кэша |
HENTASIS_LIST_TTL |
300000 |
Кэш списков, мс |
HENTASIS_TITLE_TTL |
1800000 |
Кэш тайтлов, мс |
HENTASIS_META_TTL |
21600000 |
Кэш жанров/годов, мс |
HENTASIS_CONCURRENCY |
4 |
Параллельные HTTP-запросы |
HENTASIS_WARMUP |
1 |
Подтянуть новинки и справочники при старте |
src/ API, HTTP-парсер, каталог, npm-экспорты
tests/ Демо-сайт и юнит-проверки
data/ Локальный каталог (создаётся при запуске)
npm test/api/parseпринимает только URL сhentasis5.top.- Поиск на источнике стабильно работает примерно от 4 символов.
- Пакет не проксирует видео: он возвращает ссылки, которые нашёл в Playerjs на странице.