Added BakaInUa plugin (#1470)
* add BakaInUa plugin * fixed BakaInUa bugs * fixed BakaInUa bugs * Added search for BakaInUa * fixed BakaInUa parseChapter
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,86 @@
|
|||||||
|
import { CheerioAPI, load as parseHTML } from 'cheerio';
|
||||||
|
import { fetchApi } from '@libs/fetch';
|
||||||
|
import { Plugin } from '@typings/plugin';
|
||||||
|
|
||||||
|
class BakaInUa implements Plugin.PluginBase {
|
||||||
|
id = 'bakainua';
|
||||||
|
name = 'BakaInUA';
|
||||||
|
icon = 'src/uk/bakainua/icon.png';
|
||||||
|
site = 'https://baka.in.ua';
|
||||||
|
version = '1.0.1';
|
||||||
|
|
||||||
|
async popularNovels(): Promise<Plugin.NovelItem[]> {
|
||||||
|
const novels: Plugin.NovelItem[] = [];
|
||||||
|
|
||||||
|
const result = await fetchApi(this.site + '/fictions/alphabetical');
|
||||||
|
const body = await result.text();
|
||||||
|
const $ = parseHTML(body);
|
||||||
|
|
||||||
|
$('#fiction-list > ol > li > div > div').each((index, elem) => {
|
||||||
|
novels.push({
|
||||||
|
path: $(elem).find('a').attr('href'),
|
||||||
|
name: $(elem).find('a>h2').text(),
|
||||||
|
cover: this.site + $(elem).find('a>div>div>div>img').attr('src'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return novels;
|
||||||
|
}
|
||||||
|
async parseNovel(novelUrl: string): Promise<Plugin.SourceNovel> {
|
||||||
|
const result = await fetchApi(this.site + '/' + novelUrl);
|
||||||
|
const body = await result.text();
|
||||||
|
const $ = parseHTML(body);
|
||||||
|
|
||||||
|
const novel: Plugin.SourceNovel = {
|
||||||
|
path: novelUrl,
|
||||||
|
name: $('h2.text-xl.font-bold.text-stone-800.mb-2').text(),
|
||||||
|
author: $('button#fictions-author-search').text(),
|
||||||
|
cover:
|
||||||
|
this.site +
|
||||||
|
$('div.from-stone-50.to-stone-100>div.relative>img').attr('src'),
|
||||||
|
summary: $('p.text-sm.leading-relaxed').text(),
|
||||||
|
status: $('div.bg-stone-100:nth-child(3)>p:nth-child(2)').text(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let chapters: Plugin.ChapterItem[] = [];
|
||||||
|
$('li.group')
|
||||||
|
.find('a')
|
||||||
|
.each((index, elem) => {
|
||||||
|
const chapter: Plugin.ChapterItem = {
|
||||||
|
name: $(elem).find('div>div>span:nth-child(2)').text().trim(),
|
||||||
|
path: $(elem).attr('href'),
|
||||||
|
chapterNumber: index + 1,
|
||||||
|
};
|
||||||
|
chapters.push(chapter);
|
||||||
|
});
|
||||||
|
|
||||||
|
novel.chapters = chapters.reverse();
|
||||||
|
return novel;
|
||||||
|
}
|
||||||
|
|
||||||
|
async parseChapter(chapterUrl: string): Promise<string> {
|
||||||
|
const result = await fetchApi(this.site + '/' + chapterUrl);
|
||||||
|
const body = await result.text();
|
||||||
|
const $ = parseHTML(body);
|
||||||
|
return $('#user-content').html();
|
||||||
|
}
|
||||||
|
|
||||||
|
async searchNovels(searchTerm: string): Promise<Plugin.NovelItem[]> {
|
||||||
|
let novels: Plugin.NovelItem[] = [];
|
||||||
|
|
||||||
|
const result = await fetchApi(
|
||||||
|
this.site + '/search?search%5B%5D=' + searchTerm,
|
||||||
|
);
|
||||||
|
const body = await result.text();
|
||||||
|
const $ = parseHTML(body);
|
||||||
|
$('ul>section>div>div').each((index, elem) => {
|
||||||
|
novels.push({
|
||||||
|
path: $(elem).find('div:nth-child(2)>a').attr('href'),
|
||||||
|
name: $(elem).find('div:nth-child(2)>a').text().trim(),
|
||||||
|
cover: this.site + $(elem).find('div:nth-child(1)>img').attr('src'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return novels;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new BakaInUa();
|
||||||
Reference in New Issue
Block a user