wakitsu
Version:
Hobby project for managing anime watch list on Kitsu through CLI
52 lines • 1.62 kB
JavaScript
import { HTTP } from './http.js';
import { parseFansubFilename } from './utils.js';
const _nyaaURLStr = 'https://nyaa.si';
export async function getFansubRSS(searchString) {
const url = new URL(_nyaaURLStr);
url.searchParams.append('f', '0');
url.searchParams.append('c', '1_2');
url.searchParams.append('q', searchString);
const resp = await HTTP.get(url);
if (!resp.ok) {
console.log(await resp.text());
process.exit(1);
}
const [entryCount, latestEntryName] = await getLatestAnimeEntry(await resp.text());
url.searchParams.append('page', 'rss');
if (!latestEntryName) {
return [null, null];
}
const [error, data] = parseFansubFilename(latestEntryName);
if (error) {
return [error, null];
}
const { title, fansub, paddedEpNum, season } = data;
const entry = {
entryCount,
raw: latestEntryName,
fansub: `[${fansub}]`,
title,
episode: paddedEpNum,
season,
rss: url.toString(),
};
return [null, entry];
}
async function getLatestAnimeEntry(html) {
const cheerio = await import('cheerio');
const $ = cheerio.load(html);
const els = $('tr td + td > a');
const torrents = [];
for (let i = 0; i < els.length; i++) {
const elementText = els.eq(i).text().trim();
if (elementText.length > 10) {
torrents.push(elementText);
}
}
const latestEntryName = torrents[0];
if (!torrents.length) {
return [0, null];
}
return [torrents.length, latestEntryName];
}
//# sourceMappingURL=rss.js.map