mirror of
https://github.com/opelly27/streetmerchant.git
synced 2026-05-20 07:37:39 +00:00
83 lines
1.7 KiB
TypeScript
83 lines
1.7 KiB
TypeScript
import {Link, Series, Store} from './model';
|
|
import {Print, logger} from '../logger';
|
|
import {Browser} from 'puppeteer';
|
|
import cheerio from 'cheerio';
|
|
import {filterSeries} from './filter';
|
|
import {usingResponse} from '../util';
|
|
|
|
function addNewLinks(store: Store, links: Link[], series: Series) {
|
|
if (links.length === 0) {
|
|
logger.debug(
|
|
Print.message('NO STORE LINKS FOUND', series, store, true)
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
const existingUrls = new Set(store.links.map((link) => link.url));
|
|
const newLinks = links.filter((link) => !existingUrls.has(link.url));
|
|
|
|
if (newLinks.length === 0) {
|
|
return;
|
|
}
|
|
|
|
logger.debug(
|
|
Print.message(
|
|
`FOUND ${newLinks.length} STORE LINKS`,
|
|
series,
|
|
store,
|
|
true
|
|
)
|
|
);
|
|
logger.debug(JSON.stringify(newLinks, null, 2));
|
|
|
|
store.links = store.links.concat(newLinks);
|
|
}
|
|
|
|
export async function fetchLinks(store: Store, browser: Browser) {
|
|
if (!store.linksBuilder) {
|
|
return;
|
|
}
|
|
|
|
const promises: Array<Promise<void>> = [];
|
|
|
|
for (let {series, url} of store.linksBuilder.urls) {
|
|
if (!filterSeries(series)) {
|
|
continue;
|
|
}
|
|
|
|
logger.debug(
|
|
Print.message('DETECTING STORE LINKS', series, store, true)
|
|
);
|
|
|
|
if (!Array.isArray(url)) {
|
|
url = [url];
|
|
}
|
|
|
|
url.map((x) =>
|
|
promises.push(
|
|
usingResponse(browser, x, async (response) => {
|
|
const text = await response?.text();
|
|
|
|
if (!text) {
|
|
logger.error(
|
|
Print.message('NO RESPONSE', series, store, true)
|
|
);
|
|
return;
|
|
}
|
|
|
|
const docElement = cheerio.load(text).root();
|
|
const links = store.linksBuilder!.builder(
|
|
docElement,
|
|
series
|
|
);
|
|
|
|
addNewLinks(store, links, series);
|
|
})
|
|
)
|
|
);
|
|
}
|
|
|
|
await Promise.all(promises);
|
|
}
|