node-subscene
Version:
Subscene's Scrapping Module
113 lines (107 loc) • 4.33 kB
JavaScript
const rxjs = require('rxjs');
const Observable = rxjs.Observable;
const axios = require('axios');
const cheerio = require('cheerio');
class Subscene {
search(q) {
return Observable.create(observer => {
q = q.replace(' ', '+');
let url = 'https://subscene.com/subtitles/title?q=' + q + '&l=';
axios.get(url).then((body) => {
var arr = [];
let $ = cheerio.load(body.data);
$('div.search-result').each((i, value) => {
$(value).find('li').each((j, data) => {
$(data).find('div.title').each((k, item) => {
let link = $(item).find('a');
let title = link.text();
let url = link.attr('href');
let count = $(item).next().text().replace('\n\n\t\t', '').replace('\n\t', '');
let data = [];
data[0] = title;
data[1] = url;
data[2] = count.replace(' subtitles', '');
arr.push(data);
});
});
});
// Make it unique by url
var result = [];
arr.forEach((a) => {
let ada = false;
result.forEach((b) => {
if (b[1] == a[1]) {
ada = true;
}
});
if (ada == false) {
result.push(a);
}
});
observer.next(result);
});
});
}
getSub(filmUrl) {
return Observable.create(observer => {
const url = 'https://subscene.com' + filmUrl;
let poster;
let language = [];
axios.get(url).then((body) => {
let arr = [];
let $ = cheerio.load(body.data);
$('div.poster').each((i, v) => {
$(v).find('img').each((j, va) => {
poster = $(va).attr('src');
})
})
$('table').each((i, val) => {
$(val).find('tr').each((j, valu) => {
$(valu).find('td.a1').each((k, value) => {
$(value).find('a').each((l, v) => {
let d = [];
$(v).find('span').each((m, va) => {
d.push($(va).text());
});
let data = [];
data[0] = $(v).attr('href');
data[1] = d[0].slice(7, -6);
data[2] = d[1].slice(7, -7);
arr.push(data);
})
})
})
});
arr.forEach((l) => {
let ada = false;
language.forEach((la) => {
if (l[1] == la) {
ada = true;
}
});
if (ada == false) {
language.push(l[1]);
}
});
observer.next({poster: poster, lang: language, data: arr})
});
});
}
getDownloadUrl(filmUrl) {
const url = 'https://subscene.com' + filmUrl;
return Observable.create(observer => {
axios.get(url).then((body) => {
let $ = cheerio.load(body.body);
$('div.download').each((i,val) => {
$(val).find('a').each((j,v) => {
let link = $(v).attr('href');
link = 'https://subscene.com' + link;
observer.next(link);
})
})
})
})
}
}
sub = new Subscene;
sub.search('avenger').subscribe(a => console.log(a))