myreadingmanga-unofficial
Version:
MyReadingManga WebCrawler. Find By Languages, Genres and Tags.
95 lines (84 loc) • 3.16 kB
JavaScript
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