hanime-crave
Version:
hanime.tv scraper
79 lines (67 loc) • 2.75 kB
JavaScript
const HentaiEpisode = require('../structures/episode.js');
const tag = require('./tag.js');
const defaults = {
tag: 'ahegao',
page: 0,
order: 'desc'
};
function addMissingArgs(args) {
let keys = Object.keys(defaults);
let newArgs = args;
for(let i = 0; i < keys.length; i++)
if(!newArgs.hasOwnProperty(keys[i]))
newArgs[keys[i]] = defaults[keys[i]];
return newArgs
}
module.exports = (args = defaults) => {
return new Promise((res, rej) => {
if(typeof args !== 'object') {
if(!isNaN(args))
args = addMissingArgs({page: args});
if(typeof args === 'string') {
if(['asc','desc'].includes(args))
args = addMissingArgs({order: args})
else args = addMissingArgs({tag: args})
}
} else args = addMissingArgs(args);
if(typeof args !== 'object' || (args || []).length >= 0) return rej(new Error("Wrong arguments format."));
fetch(
`https://hw.hanime.tv/api/v8/browse/hentai-tags/${args.tag}?page=${args.page}&order_by=created_at_unix&ordering=${args.order}`,
{
"headers": {
"x-signature-version": "web2"
}
}
)
.then(resp => resp.json())
.then(json => {
let episodes = [];
for(let i = 0; i < json.hentai_videos.length; i++)
episodes[i] = new HentaiEpisode(json.hentai_videos[i].name,
json.hentai_videos[i].slug,
json.hentai_videos[i].created_at,
json.hentai_videos[i].created_at_unix,
json.hentai_videos[i].released_at,
json.hentai_videos[i].released_at_unix,
json.hentai_videos[i].views,
json.hentai_videos[i].interests,
json.hentai_videos[i].poster_url,
json.hentai_videos[i].cover_url,
json.hentai_videos[i].brand,
json.hentai_videos[i].is_censored,
json.hentai_videos[i].likes,
json.hentai_videos[i].dislikes,
json.hentai_videos[i].downloads,
json.hentai_videos[i].is_banned_in);
res({
episodes: episodes,
query: {page: args.page, order: args.order},
next: function() {
args.page += 1;
return tag(args)
}
})
})
.catch(err => rej(err))
})
}