UNPKG

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
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>; }