UNPKG

hanime-crave

Version:
94 lines (80 loc) 3.39 kB
const HentaiEpisode = require('../structures/episode.js'); const necessary = [ 'start', 'end' ]; function getYearOffset(yr = 0) { let now = new Date(); return now.getFullYear() + yr } function arrayEqual(a1, a2) { return a1.filter(f => !a2.includes(f)) } function getDefaults() { return { order: {by: 'released_at', type: 'DESC'}, start: `${getYearOffset()}-01-01`, end: `${getYearOffset(1)}-01-01` } } module.exports = (args = getDefaults()) => { return new Promise((res, rej) => { let defaults = getDefaults(); if(typeof args !== 'object') { // 2018 / 2019 if(!isNaN(args)) { defaults.start = `${args}-01-01`; defaults.end = `${args + 1}-01-01` } else if(typeof args === 'string') { // 2018-02-08 || DESC / ASC || released_at if(/\d{4}\-\d{2}\-\d{2}/.test(args)) { defaults.start = args; defaults.end = `${+args.split('-')[0] + 1}-01-01` } else if(['DESC', 'ASC'].includes(args)) defaults.order.type = args.toUpperCase() else defaults.order.by = args.toLowerCase() } else defaults; args = defaults } else { if(Object.keys(args).length < 1) { // {} args = defaults } else { let diff = arrayEqual(Object.keys(defaults), Object.keys(args)); if(diff.length > 0) for(let i = 0; i < diff.length; i++) args[diff[i]] = defaults[diff[i]]; diff = arrayEqual(['by', 'type'], Object.keys(args.order)); if(diff.length > 0) for(let i = 0; i < diff.length; i++) args.order[diff[i]] = defaults.order[diff[i]]; } }; if(typeof args !== 'object' || (args || []).length >= 0) return rej(new Error("Wrong arguments format.")); fetch(`https://hr.hanime.tv/api/v8/hentai_videos?source=browse-seasons&__order=${args.order.by},${args.order.type}&${args.order.by}__gte=${args.start}&${args.order.by}__lt=${args.end}`) .then(resp => resp.json()) .then(json => { let episodes = []; for(let i = 0; i < json.data.length; i++) episodes[i] = new HentaiEpisode(json.data[i].name, json.data[i].slug, json.data[i].created_at, new Date(json.data[i].created_at).getTime(), json.data[i].released_at, new Date(json.data[i].released_at).getTime(), json.data[i].views, json.data[i].interests, json.data[i].poster_url, json.data[i].cover_url, json.data[i].brand, json.data[i].is_censored, json.data[i].likes, json.data[i].dislikes, json.data[i].downloads, ""); res({ info: {total: json.meta.total, count: json.meta.count}, episodes: episodes, query: args }) }) .catch(err => rej(err)) }) }