UNPKG

tmal

Version:
150 lines (145 loc) 3.91 kB
const fetch = require('node-fetch'); const baseUrl = 'https://myanimelist.net/'; const _ = require('lodash'); const moment = require('moment'); const Promise = require('bluebird'); const refetch = (url) => { return new Promise((resolve,reject)=>{ fetch(url).then(response => { if(response.status !== 200) { if(response.status === 404) { reject({type:404,message: `${url} returned 404 status: ${response.status}`}) } else { console.error(`${url} returned non-200 status: ${response.status} going to refetch..`); resolve(refetch(url)); } } else { console.log(`${url} fetched successfully..`); resolve(response.text()); } }).catch(err => { reject(err); }); }) }; module.exports.fetch = function(url) { const _this = this; return fetch(url).then(response => { if(response.status !== 200) { console.error(`${url} returned non-200 status: ${response.status} going to refetch..`); return refetch(url); } else { console.log(`${url} fetched successfully..`); return response.text(); } }) }; module.exports.parseSidebar = ($,term,split) => { const el = $('span:contains("'+term+':")'); const re = new RegExp(term+':\n', 'g'); if (typeof el !== 'undefined' && el.length > 0) { if (split) { return el.parent().text().replace(re, '').trim() .split(','); } return el.parent().text().replace(re, '').trim(); } return null; }; module.exports.parseStartDate = (date) => { if(date.indexOf('to') > -1) { const tmp = _.split(date,'to'); try { return moment(tmp[0].trim(),'MMM D, YYYY').endOf('day').unix(); }catch(err) { throw err; } } else { try { return moment(date.trim(),'MMM D, YYYY').endOf('day').unix(); }catch(err) { throw err; } } }; module.exports.getSeason = function(date){ const y = parseInt(moment(date,'X').format('YYYY')); const m = parseInt(moment(date,'X').format('M')); let label; if(m >= 1 && m <= 3) { // winter label = 'Winter '+y; } else if( m >= 4 && m <= 5 ) { // spring label = 'Spring '+y; } else if(m >= 6 && m <= 9) { // summer label = 'Summer '+y; } else if( m >= 10 && m <= 12) { // fall label = 'Fall '+y; } return label; }; module.exports.parseEndDate = (date) => { if(date.indexOf('to') > -1) { const tmp = _.split(date,'to'); try { if(tmp[1].trim().indexOf('?') > -1) { return null; } else { return moment(tmp[1].trim(),'MMM D, YYYY').endOf('day').unix(); } }catch(err) { throw err; } } else { try { if(date.trim().indexOf('?') > -1) { return null; } else { return moment(date.trim(),'MMM D, YYYY').endOf('day').unix(); } }catch(err) { throw err; } } }; module.exports.getEpisodeAirDate = function($){ const airedMatch = $('table div.fn-grey2').text() .match(/((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]+, [0-9]{4})\(([A-Z]+)\)/); if (airedMatch !== null) { return moment(airedMatch[1],'MMMM D, YYYY').add(1,'days').unix() } else return null; }; module.exports.baseUrl = baseUrl;