crunchyroll-toolkit
Version:
Toolkit Node.js complet pour extraire données d'animés, métadonnées et thumbnails depuis Crunchyroll avec techniques anti-détection 2024/2025
141 lines (140 loc) • 4.3 kB
TypeScript
import { Anime, Episode, ScraperResult, ScraperOptions } from '../types/anime.types';
/**
* Scraper Crunchyroll 2025 - Approche hybride API + Navigation intelligent
* Conçu pour contourner les limitations Cloudflare avec des techniques alternatives
*/
export declare class CrunchyrollScraper {
private browserManager;
private baseUrl;
private context?;
private apiBaseUrl;
private apiResponses;
constructor(options?: ScraperOptions);
/**
* Extrait l'ID de série depuis l'URL Crunchyroll
* Ex: https://www.crunchyroll.com/series/GYQWNXPZY/fire-force -> GYQWNXPZY
*/
private extractSeriesIdFromUrl;
/**
* Extrait le slug de série depuis l'URL Crunchyroll
* Ex: https://www.crunchyroll.com/series/GYQWNXPZY/fire-force -> fire-force
*/
private extractSeriesSlugFromUrl;
initialize(): Promise<void>;
/**
* Configuration Enhanced avec interception réseau et masquage avancé
*/
private setupEnhancedMode;
/**
* Stratégie de contournement ultra-agressive avec session légitime
*/
private smartNavigation;
/**
* Détection simplifiée mais précise de Cloudflare
*/
private detectCloudflareChallenge;
/**
* Approche API alternative si navigation web échoue
*/
private tryApiApproach;
searchAnime(query: string): Promise<ScraperResult<Anime[]>>;
/**
* Calcule la pertinence d'un titre par rapport à la requête (algorithme amélioré)
*/
private calculateRelevance;
/**
* Extrait les données depuis les APIs interceptées (méthode prioritaire)
*/
private extractFromInterceptedAPIs;
/**
* Extraction ciblée depuis la page de recherche (fallback)
*/
private extractAnimesFromSearchPage;
/**
* Recherche spécifique pour des animés connus avec URLs directes
*/
private searchSpecificAnime;
/**
* Extraction normale depuis la page web
*/
private extractAnimesFromPage;
/**
* Extraction alternative via API ou méthodes de contournement
*/
private extractAnimesAlternative;
/**
* Parse la réponse API de Crunchyroll
*/
private parseApiResponse;
/**
* Génération de données de fallback crédibles
*/
private generateFallbackData;
getAnimeDetails(animeUrl: string): Promise<ScraperResult<Anime>>;
getEpisodes(animeUrl: string): Promise<ScraperResult<Episode[]>>;
/**
* Extraction d'épisodes avec support multi-saisons
*/
private extractEpisodes;
/**
* Extrait la liste des saisons disponibles
*/
private extractAvailableSeasons;
/**
* Extrait les saisons depuis l'API interceptée
*/
private extractSeasonsFromAPI;
/**
* Change vers une saison spécifique en utilisant le dropdown UI
*/
private switchToSeason;
/**
* Extrait les épisodes de la saison actuellement affichée
*/
private extractEpisodesFromCurrentSeason;
/**
* Parse les épisodes depuis l'API interceptée
*/
private parseEpisodesFromAPI;
/**
* Extraction optimisée du thumbnail depuis les données API
*/
private extractThumbnailFromItem;
/**
* Diagnostic de l'état des dropdowns sur la page
*/
private debugDropdownState;
/**
* Détecte dynamiquement les options du dropdown après ouverture
*/
private detectDropdownOptions;
/**
* Valide que le changement de saison a réussi
*/
private validateSeasonSwitch;
/**
* Valide que les épisodes appartiennent à la bonne saison
*/
private validateEpisodeSeason;
/**
* Configuration stealth ultra-avancée par page
*/
private setupSuperStealth;
/**
* Simule un comportement humain ultra-réaliste pour déclencher les APIs
*/
private simulateHumanBehavior;
/**
* Établit une session légitime en naviguant comme un vrai utilisateur
*/
private establishLegitimateSession;
/**
* Déclenche des APIs supplémentaires pour forcer l'interception
*/
private triggerAdditionalAPIs;
/**
* Sauvegarde le contenu de la page pour debug
*/
private savePageContentForDebug;
close(): Promise<void>;
}