UNPKG

myreadingmanga-unofficial

Version:

MyReadingManga WebCrawler. Find By Languages, Genres and Tags.

95 lines (84 loc) 3.16 kB
const state = require('./state.js') const readline = require('readline-sync') const axios = require('axios') const JSSoup = require('jssoup').default const categories = { LANGUAGES: 'languages', GENRES: 'genres', TAGS: 'tags' } async function robot() { const content = state.load() // const byLang = fetchLanguage(content) // const byGenre = fetchGenre(content) const byTag = fetchTag(content) await fetchOthersBooks(content, categories.TAGS) const book = await fetchBook(content, categories.TAGS, byTag) state.save(content) return book function fetchLanguage(content) { const prefixes = [] content.languages.map(language => prefixes.push(language.title)) const pos = readline.keyInSelect(prefixes, 'Escolha um idioma: ') return pos } function fetchGenre(content) { const prefixes = [] content.genres.map(genre => prefixes.push(genre.title)) const pos = readline.keyInSelect(prefixes, 'Escolha um Gênero: ') if(pos == 0) return pos } function fetchTag(content) { const prefixes = [] let tags = content.tags for(let i = 0; i < tags.length; i++) { tags.pop() } tags.map(tag => prefixes.push(tag.title)) const pos = readline.keyInSelect(prefixes, 'Escolha uma Tag: ') return pos } async function fetchBook(content, key, value) { // console.log(content[key]) const { data } = await axios.get(content[key][value].url) const soup = new JSSoup(data) soup.prettify() const mangas = soup.findAll('article') const ctx = content[key][value] if(!ctx.mangas) ctx.mangas = [] const prefixes = mangas.map(manga => manga.find('h2').text) mangas.map(manga => { const title = manga.find('h2').text const url = manga.find('h2').find('a').attrs.href const thumbnail = manga.find('div').find('img').attrs.src if(!ctx.mangas) ctx.mangas = [] ctx.mangas.push({ title, url, thumbnail }) }) const pos = readline.keyInSelect(prefixes, 'Escolha um mangá: ') return content[key][value].mangas[pos] } async function fetchOthersBooks(content, key) { for (const val of content[key]) { const ctx = val console.log(`${val.title}:\n`) const { data } = await axios.get(ctx.url) const soup = new JSSoup(data) soup.prettify() const mangas = soup.findAll('article') mangas.map(manga => { const title = manga.find('h2').text const url = manga.find('h2').find('a').attrs.href const thumbnail = manga.find('div').find('img').attrs.src if(!ctx.mangas) ctx.mangas = [] ctx.mangas.push({ title, url, thumbnail }) console.log(title) }) content[key][val] = ctx console.log() } } } // module.exports = { // run: robot, // categories // } module.exports = robot