SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
2.1 KB · 41 lines typescript
Raw Blame History
1import type { ConnectorMeta, CrawlContext } from '@rareindex/connectors';2import type { ExtractionResult } from '@rareindex/shared';3import { goauctionPageUrl, parseGoauctionCalendar, parseGoauctionLots, type GoauctionHouse } from '../_g8-auctions-eu-apac-lib/goauction-platform.js';4import { SaleResultsConnector, type HouseConfig, type ParsedSalePage, type SaleRef } from '../_g8-auctions-eu-apac-lib/sale-results.js';56/**7 * Chiswick Auctions (London) — goauction platform, same structure as Sworders: /results/ calendar →8 * /auction/details/<slug>?au=<id>&pn=N&g=1 lot grid with "Sold for £…".9 */10const HOUSE: GoauctionHouse = { base: 'https://www.chiswickauctions.co.uk', currency: 'GBP', listStyle: 'details' };1112export class ChiswickConnector extends SaleResultsConnector {13  readonly version = '1.0.0';14  readonly house: HouseConfig = { houseName: 'Chiswick Auctions', defaultCurrency: 'GBP', location: 'London, United Kingdom', idKey: 'chiswick_lot', premiumIncluded: null, fallbackSlug: 'antiques', minIntervalMs: 2500, maxPagesPerSale: 20 };15  protected override minIntervalMs = 2500;1617  async listSales(ctx: CrawlContext): Promise<SaleRef[]> {18    const url = String(this.meta.config.resultsUrl ?? `${HOUSE.base}/results/`);19    await this.throttle(url);20    const res = await ctx.fetch(url, { engines: ['api'], responseType: 'text', minQuality: 0, timeoutMs: 60_000 });21    if (!res.success || !res.html) {22      ctx.anomaly('past_list_failed', `${url}: ${res.error ?? res.httpStatus}`);23      return [];24    }25    // the calendar links to chiswickauctions.co.uk without www → normalise to the canonical host26    return parseGoauctionCalendar(res.html, HOUSE).map((s) => ({ ...s, url: s.url.replace('https://chiswickauctions.co.uk', HOUSE.base) }));27  }2829  salePageUrl(sale: SaleRef, page: number): string {30    return goauctionPageUrl(sale, page, HOUSE);31  }3233  parseSalePage(res: ExtractionResult, sale: SaleRef): ParsedSalePage | null {34    return res.html ? parseGoauctionLots(res.html, sale, HOUSE) : null;35  }36}3738export default function createConnector(meta: ConnectorMeta) {39  return new ChiswickConnector(meta);40}41