Created
March 26, 2018 08:08
-
-
Save fauzandotme/e1709bb962cb054be6708327af4620b3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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