hanime-crave
Version:
hanime.tv scraper
59 lines (49 loc) • 2.58 kB
JavaScript
const HentaiVideo = require('../structures/video.js');
const HentaiEpisodeInfo = require('../structures/episodeInfo.js');
module.exports = (link) => {
return new Promise((res, rej) => {
if(!link) return rej(new Error("Video link is not provided."));
fetch(link)
.then(resp => resp.text())
.then(body => {
try {
let data = JSON.parse(body.match(/window\.__NUXT__=(.+);<\/script>/)[1]);
let vidInfo = data.state.data.video.hentai_video;
let vidServer = data.state.data.video.videos_manifest.servers[0];
if(!vidServer) return rej(new Error("No video servers found."));
vidServer.streams.map(m => m.url = !m.url ?
`https://weeb.hanime.tv/weeb-api-cache/api/v8/m3u8s/${m.id}.m3u8`
: m.url);
let streams = [];
for(let i = 0; i < vidServer.streams.length; i++)
streams[i] = new HentaiVideo(vidServer.streams[i].url,
vidServer.streams[i].width,
eval(vidServer.streams[i].height),
vidServer.streams[i].duration_in_ms);
let video = new HentaiEpisodeInfo(vidInfo.name,
vidInfo.slug,
vidInfo.created_at,
vidInfo.created_at_unix,
vidInfo.released_at,
vidInfo.released_at_unix,
vidInfo.description,
vidInfo.views,
vidInfo.interests,
vidInfo.poster_url,
vidInfo.cover_url,
vidInfo.brand,
vidInfo.is_censored,
vidInfo.likes,
vidInfo.dislikes,
vidInfo.downloads,
vidInfo.is_banned_in,
vidInfo.hentai_tags,
streams);
res(video)
} catch(err) {
rej(err)
}
})
.catch(err => rej(err))
})
}