@xbibzlibrary/tiktokscrap
Version:
Powerful TikTok Scraper and Downloader Library
190 lines (157 loc) • 7.3 kB
text/typescript
import { TikTokScrapOptions, TikTokScrapResult, TikTokVideo, TikTokPhoto, TikTokUser, TikTokHashtag, TikTokComment, TikTokSearchOptions, TikTokUserFeedOptions, TikTokHashtagFeedOptions, TikTokDownloadOptions } from './types';
import { VideoScraper } from './scrapers/video';
import { PhotoScraper } from './scrapers/photo';
import { UserScraper } from './scrapers/user';
import { HashtagScraper } from './scrapers/hashtag';
import { VideoDownloader } from './downloaders/video';
import { PhotoDownloader } from './downloaders/photo';
import Logger from './utils/logger';
export class TikTokScrap {
private videoScraper: VideoScraper;
private photoScraper: PhotoScraper;
private userScraper: UserScraper;
private hashtagScraper: HashtagScraper;
private videoDownloader: VideoDownloader;
private photoDownloader: PhotoDownloader;
private logger = Logger;
constructor(options: TikTokScrapOptions = {}) {
this.videoScraper = new VideoScraper(options);
this.photoScraper = new PhotoScraper(options);
this.userScraper = new UserScraper(options);
this.hashtagScraper = new HashtagScraper(options);
this.videoDownloader = new VideoDownloader();
this.photoDownloader = new PhotoDownloader();
this.logger.info('TikTokScrap initialized');
}
// Video methods
public async getVideoByUrl(url: string): Promise<TikTokScrapResult<TikTokVideo>> {
return this.videoScraper.getVideoByUrl(url);
}
public async getVideoById(id: string): Promise<TikTokScrapResult<TikTokVideo>> {
try {
const video = await this.videoScraper.getVideoById(id);
return {
success: true,
data: video,
message: 'Success'
};
} catch (error) {
return {
success: false,
error: (error as Error).message,
message: 'ERROR'
};
}
}
public async getVideoTrends(count: number = 20): Promise<TikTokScrapResult<TikTokVideo[]>> {
return this.videoScraper.getVideoTrends(count);
}
public async getRecommendedVideos(videoId: string, count: number = 10): Promise<TikTokScrapResult<TikTokVideo[]>> {
return this.videoScraper.getRecommendedVideos(videoId, count);
}
// Photo methods
public async getPhotoByUrl(url: string): Promise<TikTokScrapResult<TikTokPhoto>> {
return this.photoScraper.getPhotoByUrl(url);
}
public async getPhotoById(id: string): Promise<TikTokScrapResult<TikTokPhoto>> {
try {
const photo = await this.photoScraper.getPhotoById(id);
return {
success: true,
data: photo,
message: 'Success'
};
} catch (error) {
return {
success: false,
error: (error as Error).message,
message: 'ERROR'
};
}
}
public async getPhotoTrends(count: number = 20): Promise<TikTokScrapResult<TikTokPhoto[]>> {
return this.photoScraper.getPhotoTrends(count);
}
public async getRecommendedPhotos(photoId: string, count: number = 10): Promise<TikTokScrapResult<TikTokPhoto[]>> {
return this.photoScraper.getRecommendedPhotos(photoId, count);
}
// User methods
public async getUserByUsername(username: string): Promise<TikTokScrapResult<TikTokUser>> {
return this.userScraper.getUserByUsername(username);
}
public async getUserFeed(options: TikTokUserFeedOptions): Promise<TikTokScrapResult<TikTokVideo[] | TikTokPhoto[]>> {
return this.userScraper.getUserFeed(options);
}
public async getUserVideos(username: string, cursor: number = 0, count: number = 20): Promise<TikTokScrapResult<TikTokVideo[]>> {
return this.userScraper.getUserVideos(username, cursor, count);
}
public async getUserPhotos(username: string, cursor: number = 0, count: number = 20): Promise<TikTokScrapResult<TikTokPhoto[]>> {
return this.userScraper.getUserPhotos(username, cursor, count);
}
public async getUserLikedVideos(username: string, cursor: number = 0, count: number = 20): Promise<TikTokScrapResult<TikTokVideo[]>> {
return this.userScraper.getUserLikedVideos(username, cursor, count);
}
public async getUserLikedPhotos(username: string, cursor: number = 0, count: number = 20): Promise<TikTokScrapResult<TikTokPhoto[]>> {
return this.userScraper.getUserLikedPhotos(username, cursor, count);
}
// Hashtag methods
public async getHashtagByName(hashtag: string): Promise<TikTokScrapResult<TikTokHashtag>> {
return this.hashtagScraper.getHashtagByName(hashtag);
}
public async getHashtagFeed(options: TikTokHashtagFeedOptions): Promise<TikTokScrapResult<TikTokVideo[] | TikTokPhoto[]>> {
return this.hashtagScraper.getHashtagFeed(options);
}
public async getHashtagVideos(hashtag: string, cursor: number = 0, count: number = 20): Promise<TikTokScrapResult<TikTokVideo[]>> {
return this.hashtagScraper.getHashtagVideos(hashtag, cursor, count);
}
public async getHashtagPhotos(hashtag: string, cursor: number = 0, count: number = 20): Promise<TikTokScrapResult<TikTokPhoto[]>> {
return this.hashtagScraper.getHashtagPhotos(hashtag, cursor, count);
}
public async getTrendingHashtags(count: number = 20): Promise<TikTokScrapResult<TikTokHashtag[]>> {
return this.hashtagScraper.getTrendingHashtags(count);
}
// Download methods
public async downloadVideo(video: TikTokVideo, options: TikTokDownloadOptions = {}): Promise<TikTokScrapResult<string>> {
return this.videoDownloader.downloadVideo(video, options);
}
public async downloadVideoByUrl(url: string, options: TikTokDownloadOptions = {}): Promise<TikTokScrapResult<string>> {
return this.videoDownloader.downloadVideoByUrl(url, options);
}
public async downloadVideoCover(video: TikTokVideo, options: TikTokDownloadOptions = {}): Promise<TikTokScrapResult<string>> {
return this.videoDownloader.downloadVideoCover(video, options);
}
public async downloadPhoto(photo: TikTokPhoto, options: TikTokDownloadOptions = {}): Promise<TikTokScrapResult<string[]>> {
return this.photoDownloader.downloadPhoto(photo, options);
}
public async downloadPhotoByUrl(url: string, options: TikTokDownloadOptions = {}): Promise<TikTokScrapResult<string[]>> {
return this.photoDownloader.downloadPhotoByUrl(url, options);
}
// Utility methods
public updateOptions(options: Partial<TikTokScrapOptions>): void {
this.videoScraper.updateOptions(options);
this.photoScraper.updateOptions(options);
this.userScraper.updateOptions(options);
this.hashtagScraper.updateOptions(options);
}
public getOptions(): TikTokScrapOptions {
return this.videoScraper.getOptions();
}
public setLogLevel(level: 0 | 1 | 2 | 3 | 4): void {
this.logger.setLogLevel(level);
}
}
// Export all types and classes
export * from './types';
export * from './errors';
export { VideoScraper } from './scrapers/video';
export { PhotoScraper } from './scrapers/photo';
export { UserScraper } from './scrapers/user';
export { HashtagScraper } from './scrapers/hashtag';
export { VideoDownloader } from './downloaders/video';
export { PhotoDownloader } from './downloaders/photo';
export { Logger } from './utils/logger';
export { HttpClient } from './utils/http';
export { Parser } from './utils/parser';
export { Validator } from './utils/validator';
// Default export
export default TikTokScrap;