UNPKG

@xbibzlibrary/tiktokscrap

Version:

Powerful TikTok Scraper and Downloader Library

94 lines (78 loc) 2.63 kB
import HttpClient from '../utils/http'; import Parser from '../utils/parser'; import Validator from '../utils/validator'; import Logger from '../utils/logger'; import { TikTokScrapOptions, TikTokScrapResult } from '../types'; import { TikTokScrapError } from '../errors'; export abstract class BaseScraper { protected http: HttpClient; protected parser: Parser; protected validator: Validator; protected logger = Logger; constructor(options: TikTokScrapOptions = {}) { this.http = new HttpClient(options); this.parser = new Parser(); this.validator = new Validator(); } protected async executeRequest<T>( requestFn: () => Promise<T>, errorMessage: string ): Promise<TikTokScrapResult<T>> { try { this.logger.info(`Starting request: ${errorMessage}`); const data = await requestFn(); this.logger.success(`Request completed successfully: ${errorMessage}`); return { success: true, data, message: 'Success' }; } catch (error) { this.logger.error(`Request failed: ${errorMessage} - ${(error as Error).message}`); if (error instanceof TikTokScrapError) { return { success: false, error: (error as Error).message, message: error.code }; } return { success: false, error: (error as Error).message, message: 'UNKNOWN_ERROR' }; } } protected buildUrl(baseUrl: string, path: string, params: Record<string, any> = {}): string { const url = new URL(path, baseUrl); Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { url.searchParams.append(key, String(value)); } }); return url.toString(); } protected extractVideoIdFromUrl(url: string): string | null { const match = url.match(/\/video\/(\d+)/); return match ? match[1] : null; } protected extractPhotoIdFromUrl(url: string): string | null { const match = url.match(/\/photo\/(\d+)/); return match ? match[1] : null; } protected extractUsernameFromUrl(url: string): string | null { const match = url.match(/\/(@[\w.-]+)/); return match ? match[1] : null; } protected extractHashtagFromUrl(url: string): string | null { const match = url.match(/\/tag\/([\w]+)/); return match ? match[1] : null; } public updateOptions(options: Partial<TikTokScrapOptions>): void { this.http.updateOptions(options); } public getOptions(): TikTokScrapOptions { return this.http.getOptions(); } } export default BaseScraper;