Skip to content

Instantly share code, notes, and snippets.

@fauzandotme
Created March 26, 2018 08:08
Show Gist options
  • Save fauzandotme/e1709bb962cb054be6708327af4620b3 to your computer and use it in GitHub Desktop.
Save fauzandotme/e1709bb962cb054be6708327af4620b3 to your computer and use it in GitHub Desktop.
const tool = require('curl-ganteng');
module.exports = {scrap, search};
function search(keyword) {
let link = `https://myanimelist.net/search/prefix.json?type=anime&keyword=${encodeURI(keyword)}&v=1`;
return tool.curl(link).then((done) => {
let response = true;
try {
response = JSON.parse(done.body);
} catch (e) {
response = {results: []};
}
let suggestions = response.categories[0].items.map((data) => {
let output = {};
output.value = data.name;
output.data = data.id;
return output;
})
return {keyword, suggestions};
}).catch((err) => {
console.log(err);
return {keyword, suggestions: [{valule: 'Not Found', data: ''}]};
})
}
function scrap(malID) {
if(/myanimelist\.net/.test(malID)) {
malID = malID.match(/anime\/\d+/g);
if(malID.length < 1) return new Promise((resolve, reject) => {reject({message: 'Invalid Link'})});
malID = malID[0].replace('anime/', '');
}
let link = `https://myanimelist.net/anime/${malID}`;
return tool.curl(link).then((res) => {
let $ = tool.jquery(res.body);
let title = $('h1').children('span').text().trim();
let alternativeTitle = $('h2:contains("Alternative Titles")').next().clone().children().remove().end().text().trim();
let episodes = $('.dark_text:contains("Episodes")').parent().clone().children().remove().end().text().trim();
let genre = [];
$('.dark_text:contains("Genres")').parent().children('a').each(function(index, el) {
genre.push($(el).text().trim());
});
let runtime = $('.dark_text:contains("Duration")').parent().clone().children().remove().end().text().trim();
runtime = parseInt(runtime) * 60;
let rating = $('.score').text().trim();
let votes = $('.score').attr('data-user').replace(/\D/ig, '');
let poster = $('.ac').attr('src');
let plot = $('span[itemprop="description"]').text().trim();
let airDate = $('.dark_text:contains("Aired")').parent().clone().children().remove().end().text().trim();
let releaseDate = new Date(airDate.split('to')[0].trim());
let year = [releaseDate.getFullYear()];
let airStatus = $('.dark_text:contains("Status")').parent().clone().children().remove().end().text().trim();
airStatus = (airStatus == 'Finished Airing') ? 'Ended' : 'Ongoing';
let language = ['Japanese'];
let country = ['Japan'];
return {title, poster, alternativeTitle, episodes, genre, rating, votes, plot, releaseDate, year, airStatus, language, country, runtime};
})
}
// search('naruto').then((done) => {
// console.log(done);
// }).catch((err) => {
// console.log(err);
// })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment