|
|
|
@ -19,7 +19,7 @@ class ThemeParser {
|
|
|
|
|
return await this.parseLinks();
|
|
|
|
|
}
|
|
|
|
|
catch(err) {
|
|
|
|
|
throw err;
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -30,18 +30,18 @@ class ThemeParser {
|
|
|
|
|
return await this.parseYears();
|
|
|
|
|
}
|
|
|
|
|
catch(err) {
|
|
|
|
|
throw err;
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async serie(query) {
|
|
|
|
|
async serie(title) {
|
|
|
|
|
try {
|
|
|
|
|
this.animes = [];
|
|
|
|
|
this.$ = await redditocall('anime_index');
|
|
|
|
|
return await this.parseSerie(query);
|
|
|
|
|
return await this.parseSerie(title);
|
|
|
|
|
}
|
|
|
|
|
catch(err) {
|
|
|
|
|
throw err;
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -52,7 +52,7 @@ class ThemeParser {
|
|
|
|
|
return await this.parseArtists();
|
|
|
|
|
}
|
|
|
|
|
catch(err) {
|
|
|
|
|
throw err;
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -63,7 +63,7 @@ class ThemeParser {
|
|
|
|
|
return await this.parseArtist();
|
|
|
|
|
}
|
|
|
|
|
catch(err) {
|
|
|
|
|
throw err;
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -74,13 +74,14 @@ class ThemeParser {
|
|
|
|
|
return await this.parseRandom(query);
|
|
|
|
|
}
|
|
|
|
|
catch(err) {
|
|
|
|
|
throw err;
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async year(date) {
|
|
|
|
|
let animes = [];
|
|
|
|
|
this.$ = await redditocall(date)
|
|
|
|
|
|
|
|
|
|
this.$ = await redditocall(date);
|
|
|
|
|
this.$('h3').each((i, el) => {
|
|
|
|
|
let parsed = this.parseAnime(el);
|
|
|
|
|
parsed.year = date;
|
|
|
|
@ -102,13 +103,13 @@ class ThemeParser {
|
|
|
|
|
let parsed = this.parseAnime(this.$('h3')[rand]);
|
|
|
|
|
resolve(parsed);
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parseYears(){
|
|
|
|
|
parseYears() {
|
|
|
|
|
return new Promise(async resolve => {
|
|
|
|
|
|
|
|
|
|
let promises = []
|
|
|
|
|
let promises = [];
|
|
|
|
|
let data = this.$('h3 a');
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
|
@ -119,15 +120,15 @@ class ThemeParser {
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (i === data.length - 1) {
|
|
|
|
|
resolve(promises)
|
|
|
|
|
resolve(promises);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parseArtists(){
|
|
|
|
|
parseArtists() {
|
|
|
|
|
return new Promise(async resolve => {
|
|
|
|
|
|
|
|
|
|
let promises = []
|
|
|
|
@ -169,22 +170,31 @@ class ThemeParser {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parseSerie(query){
|
|
|
|
|
/* - ParseSerie
|
|
|
|
|
Parse the HTML from the redditocall
|
|
|
|
|
and search for the h3 tag to be the
|
|
|
|
|
same of the title and resolve a object.
|
|
|
|
|
*/
|
|
|
|
|
parseSerie(title) {
|
|
|
|
|
return new Promise(async resolve => {
|
|
|
|
|
|
|
|
|
|
let data = this.$('p a');
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
|
|
|
|
|
|
|
|
let serieElement = data[i].children[0].data
|
|
|
|
|
let serieElement = data[i].children[0].data;
|
|
|
|
|
|
|
|
|
|
if (serieElement.split(" (")[0] === query) {
|
|
|
|
|
if (serieElement.split(" (")[0] === title) {
|
|
|
|
|
|
|
|
|
|
let year = this.$('p a')[i].attribs.href.split('/r/AnimeThemes/wiki/')[1].split('#wiki')[0];
|
|
|
|
|
this.$ = await redditocall(this.$('p a')[i].attribs.href.split('/r/AnimeThemes/wiki/')[1].split('#wiki')[0]);
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < this.$('h3').length; i++) {
|
|
|
|
|
if (this.$('h3')[i].children[0].children[0].data === query) {
|
|
|
|
|
|
|
|
|
|
if (this.$('h3')[i].children[0].children[0].data === title) {
|
|
|
|
|
|
|
|
|
|
let parsed = this.parseAnime(this.$('h3')[i]);
|
|
|
|
|
parsed.year = year;
|
|
|
|
|
resolve(parsed);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -192,7 +202,7 @@ class ThemeParser {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parseLinks() {
|
|
|
|
@ -215,65 +225,80 @@ class ThemeParser {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parseAnime(dat) {
|
|
|
|
|
let el = this.$(dat).children('a');
|
|
|
|
|
parseAnime(element) {
|
|
|
|
|
let el = this.$(element).children('a');
|
|
|
|
|
let title = el.text();
|
|
|
|
|
let malId = el.attr('href').split('/')[4];
|
|
|
|
|
let next = this.$(dat).next();
|
|
|
|
|
let mal_id = el.attr('href').split('/')[4];
|
|
|
|
|
let next = this.$(element).next();
|
|
|
|
|
|
|
|
|
|
let theme = {
|
|
|
|
|
id: malId,
|
|
|
|
|
id: mal_id,
|
|
|
|
|
title
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (next.prop("tagName") === "TABLE") {
|
|
|
|
|
|
|
|
|
|
if (next.prop("tagName") === "P") {
|
|
|
|
|
theme.themes = this.parseTable(next.next());
|
|
|
|
|
} else if (next.prop("tagName") === "TABLE") {
|
|
|
|
|
theme.themes = this.parseTable(next);
|
|
|
|
|
|
|
|
|
|
}else if (next.prop("tagName") === "P") {
|
|
|
|
|
|
|
|
|
|
theme.themes = this.parseTable(next.next());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return theme;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parseTable(table) {
|
|
|
|
|
if (table.prop('tagName') !== "TABLE") {
|
|
|
|
|
return this.parseTable(table.next());
|
|
|
|
|
/* - ParseTable
|
|
|
|
|
Parse the table tag from the HTML
|
|
|
|
|
and returns a object with all the
|
|
|
|
|
information.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
parseTable(element) {
|
|
|
|
|
|
|
|
|
|
if (element.prop('tagName') !== "TABLE") {
|
|
|
|
|
return this.parseTable(element.next());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let themes = [];
|
|
|
|
|
|
|
|
|
|
table.children('tbody').children('tr').each(function () {
|
|
|
|
|
const $ = cheerio.load(this);
|
|
|
|
|
const td = $('td'); // Theme row
|
|
|
|
|
let name = replaceAll(td.first().text(), """, "\"")
|
|
|
|
|
let linkEl = td.eq(1).children().first();
|
|
|
|
|
let link = linkEl.attr('href');
|
|
|
|
|
let linkDesc = linkEl.text();
|
|
|
|
|
let episodes = td.eq(2).text();
|
|
|
|
|
let notes = td.eq(3).text();
|
|
|
|
|
|
|
|
|
|
element.find('tbody').find('tr').each((i, elem) => {
|
|
|
|
|
|
|
|
|
|
let name = replaceAll(elem.children[1].children[0].data, """, "\"");
|
|
|
|
|
let link = elem.children[3].children[0].attribs.href;
|
|
|
|
|
let linkDesc = elem.children[3].children[0].children[0].data;
|
|
|
|
|
let episodes = elem.children[5].children.length > 0 ? elem.children[5].children[0].data : "";
|
|
|
|
|
let notes = elem.children[7].children.length > 0 ? elem.children[7].children[0].data : "";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
themes.push({
|
|
|
|
|
name,
|
|
|
|
|
link,
|
|
|
|
|
desc: linkDesc,
|
|
|
|
|
type: (name.startsWith('OP') ? 'opening' : 'ending'),
|
|
|
|
|
type: name.startsWith('OP') ? 'Opening' : name.startsWith('ED') ? 'Ending' : 'OP/ED',
|
|
|
|
|
episodes,
|
|
|
|
|
notes
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
return themes;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function redditocall(href) {
|
|
|
|
|
let resp = await homgot(REDDIT_ANIMETHEMES + href + ".json", { parse: true })
|
|
|
|
|
let resp = await homgot(REDDIT_ANIMETHEMES + href + ".json", { parse: true });
|
|
|
|
|
return cheerio.load(getHTML(resp.data.content_html));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getHTML(str) {
|
|
|
|
|
let html = replaceAll(str, "<", "<")
|
|
|
|
|
html = replaceAll(html, ">", ">")
|
|
|
|
|
let html = replaceAll(str, "<", "<");
|
|
|
|
|
html = replaceAll(html, ">", ">");
|
|
|
|
|
return html;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -281,4 +306,5 @@ function replaceAll(str, find, replace) {
|
|
|
|
|
return str.replace(new RegExp(find, 'g'), replace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = ThemeParser;
|
|
|
|
|