const axios = require('axios');
const crypto = require('crypto');
class Hanime {
search = async function (query, page = 0) {
try {
if (!query) throw new Error('Query is required.');
if (isNaN(page)) throw new Error('Page must be a number.');
const { data } = await axios.post(`https://cloudflare-cors-anywhere.supershadowcube.workers.dev/?url=${encodeURIComponent('https://search.htv-services.com/search')}`, {
search_text: query,
tags: [],
tags_mode: 'AND',
brands: [],
blacklist: [],
order_by: 'created_at_unix',
ordering: 'desc',
page: parseInt(page)
}, {
headers: {
'content-type': 'application/json;charset=UTF-8',
origin: 'https://hanime.tv',
referer: 'https://hanime.tv/',
'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36'
}
});
if (data.hits && typeof data.hits === 'string') data.hits = JSON.parse(data.hits);
return {
currentPage: parseInt(page),
totalPages: data.nbPages,
contents: data.hits.map(hit => ({
...hit,
url: 'https://hanime.tv/videos/hentai/' + hit.slug
}))
};
} catch (error) {
throw new Error(error.message);
}
}
detail = async function (url) {
try {
if (!url.includes('hanime.tv/videos/hentai/')) throw new Error('Invalid url.');
const { data } = await axios.get(`https://cloudflare-cors-anywhere.supershadowcube.workers.dev/?url=${encodeURIComponent(`https://hanime.tv/api/v8/video?id=${url.split('/').pop()}`)}`, {
headers: {
'x-signature-version': 'web2',
'x-signature': crypto.randomBytes(32).toString('hex'),
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
});
return {
metadata: {
...data.hentai_video,
hentai_tags: data.hentai_video.hentai_tags.map(tag => tag.text),
titles: data.hentai_video.titles.map(t => t.title)
},
hentai_franchise: data.hentai_franchise_hentai_videos.map(vid => ({
...vid,
url: 'https://hanime.tv/videos/hentai/' + vid.slug
}))
};
} catch (error) {
throw new Error(error.message);
}
}
}
const h = new Hanime();
h.detail('https://hanime.tv/videos/hentai/sayuri-s-mother-in-law-1').then(console.log);