bandcamp-fetch
Version:
Scrape Bandcamp content
71 lines • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cheerio_1 = require("cheerio");
const Constants_js_1 = require("../utils/Constants.js");
const Parse_js_1 = require("../utils/Parse.js");
class ArticleListParser {
static parseList(html, opts) {
const $ = (0, cheerio_1.load)(html);
const dailyUrl = Constants_js_1.URLS.DAILY;
const result = {
articles: [],
total: 0,
start: 0,
end: 0
};
$('articles-list').each((i, list) => {
$('.list-article', $(list)).each((i, article) => {
article = $(article);
const imgSrc = article.find('img').attr('src') || null;
// Category
const infoText = article.find('.article-info-text');
const infoTextCategoryLink = infoText.find('a.franchise');
const infoTextMiddot = infoText.find('.middot');
const categoryName = infoTextCategoryLink.text();
const category = categoryName ? {
name: categoryName
} : null;
const categoryUrl = infoTextCategoryLink.attr('href');
if (category && categoryUrl) {
category.url = (0, Parse_js_1.isAbsoluteUrl)(categoryUrl) ? categoryUrl : (0, Parse_js_1.normalizeUrl)(categoryUrl, dailyUrl);
}
// Date
infoTextCategoryLink.remove();
infoTextMiddot.remove();
const date = (0, Parse_js_1.stripLineBreaks)(infoText.text()).trim();
// Title and url
const titleLink = article.find('a.title');
const title = titleLink.text();
let url = titleLink.attr('href');
if (!(0, Parse_js_1.isAbsoluteUrl)(url)) {
url = (0, Parse_js_1.normalizeUrl)(url, dailyUrl);
}
if (titleLink) {
const parsed = {
url,
title,
date
};
if (category) {
parsed.category = category;
}
const imageUrl = (0, Parse_js_1.reformatImageUrl)(imgSrc, opts.imageFormat);
if (imageUrl) {
parsed.imageUrl = imageUrl;
}
result.articles.push(parsed);
}
});
});
const resultsText = (0, Parse_js_1.stripLineBreaks)($('#num-results').text()).trim();
const rtm = resultsText.match(/(\d+)(?:\s*to\s*)(\d+)(?:\s*of\s*)(\d+)/);
if (rtm?.length === 4) {
result.total = parseInt(rtm[3], 10);
result.start = parseInt(rtm[1], 10);
result.end = parseInt(rtm[2], 10);
}
return result;
}
}
exports.default = ArticleListParser;
//# sourceMappingURL=ArticleListParser.js.map