vostfreescrapper
Version:
a Scrapper for Vostfree.tv website
113 lines (107 loc) • 4.89 kB
JavaScript
const utils = require('./utils.js');
class Anime {
constructor(vsf) {
this.utils = new utils();
this.vsf = vsf;
}
async getAnimeByUrl(animeUrl) {
animeUrl = animeUrl.replace('https://vostfree.tv/', '');
await this.vsf.relocatePage(animeUrl);
if (!this.vsf.page._pageBindings.get('getLecteur')) {
await this.vsf.page.exposeFunction('getLecteur', this.utils.getLecteur);
}
const anime = await this.vsf.page.evaluate(async () => {
const anime = {};
anime.url = document.location.href;
anime.title = document.querySelector('h1').innerText;
anime.description = document.getElementsByName('description')[0].content;
const image = document.querySelector('.slide-poster')
anime.image = image.querySelectorAll('img')[0].src
anime.nbepisodes = parseInt(document.getElementsByClassName('year')[0].innerText.replace('Episode ', ''));
anime.genres = [];
const genres = document.getElementsByClassName('right')[0];
genres.querySelectorAll('a').forEach(element => {
anime.genres.push(element.innerText);
});
let FinalPlayer = [];
const allPlayer = document.querySelectorAll('.player_box');
for (const element of allPlayer) {
let player = element.id.replace('content_', '');
const stream = document.getElementById(player);
if (stream) {
const meth = stream.className;
const id = element.textContent;
const link = await getLecteur(meth, id);
FinalPlayer.push({player:player, link: link});
}
}
anime.episodes = [];
const button = document.querySelectorAll('.button_box');
button.forEach(element => {
const id = element.id.replace('buttons_', '');
const data = element.querySelectorAll('div');
let link = [];
data.forEach(elem => {
for (const player of FinalPlayer) {
if (elem.id === player.player) {
link.push(player.link);
}
}
});
anime.episodes.push({id: id, link: link});
});
return anime;
});
return anime;
}
async getAnimeById(animeId) {
await this.vsf.relocatePage(`${animeId}-ddl-streaming-1fichier-uptobox.html`)
if (!this.vsf.page._pageBindings.get('getLecteur')) {
await this.vsf.page.exposeFunction('getLecteur', this.utils.getLecteur);
}
const anime = await this.vsf.page.evaluate(async () => {
const anime = {};
anime.url = document.location.href;
anime.title = document.querySelector('h1').innerText;
anime.description = document.getElementsByName('description')[0].content;
const image = document.querySelector('.slide-poster')
anime.image = image.querySelectorAll('img')[0].src
anime.nbepisodes = parseInt(document.getElementsByClassName('year')[0].innerText.replace('Episode ', ''));
anime.genres = [];
const genres = document.getElementsByClassName('right')[0];
genres.querySelectorAll('a').forEach(element => {
anime.genres.push(element.innerText);
});
let FinalPlayer = [];
const allPlayer = document.querySelectorAll('.player_box');
for (const element of allPlayer) {
let player = element.id.replace('content_', '');
const stream = document.getElementById(player);
if (stream) {
const meth = stream.className;
const id = element.textContent;
const link = await getLecteur(meth, id);
FinalPlayer.push({player:player, link: link});
}
}
anime.episodes = [];
const button = document.querySelectorAll('.button_box');
button.forEach(element => {
const id = element.id.replace('buttons_', '');
const data = element.querySelectorAll('div');
let link = [];
data.forEach(elem => {
for (const player of FinalPlayer) {
if (elem.id === player.player) {
link.push(player.link);
}
}
});
anime.episodes.push({id: id, link: link});
});
return anime;
});
return anime;
}
}
module.exports = Anime;