- Added a new script to scrape devil fruits and characters from One Piece fandom. - Implemented functions to fetch, normalize, and save data in JSON, CSV, and SQL formats. - Created a structured output directory for scraped data. feat(database): update schema for devil fruits and characters - Defined new types for devil fruits and haki in the database schema. - Updated the character table to include fields for age, affiliations, devil fruit, haki, bounty, height, origin, first appearance, and picture URL. feat(ui): enhance main page and daily mode layout - Redesigned the main page with a new layout and styling for the OnePieceDle game. - Created a new daily mode page with sections for clues and user input for guesses. - Removed demo authentication routes and pages to streamline the application.
4.1 KiB
4.1 KiB
One Piece Scraper
Script pour scraper les données des personnages de One Piece depuis le fandom wiki français.
Installation
Installe les dépendances d'abord :
npm install
Utilisation
# Scraper tous les formats (JSON, CSV, SQL)
npm run scrape
# Ou spécifier un format
node scripts/scrape-onepiece.js json # JSON uniquement
node scripts/scrape-onepiece.js csv # CSV uniquement
node scripts/scrape-onepiece.js sql # SQL uniquement
node scripts/scrape-onepiece.js all # Tous les formats (défaut)
Sortie
Les données seront sauvegardées dans le dossier scraped-data/ :
- characters.json - Format JSON avec toutes les données structurées
- characters.csv - Format CSV pour importer dans Excel/Sheets
- characters.sql - Statements SQL avec gestion des conflits (upsert)
Données extraites
Pour chaque personnage :
- 📝 Nom - Nom du personnage
- 👤 Genre - Masculin/Féminin (extrait des catégories)
- 🎂 Âge - Âge le plus récent (post-ellipse), chiffres uniquement
- 📏 Taille - Normalisée en mètres (format: "2.74" ou "174" pour cm)
- 🌍 Origine - Lieu d'origine (sans parenthèses)
- 😈 Fruit du Démon - Nom du fruit (si applicable)
- 👥 Affiliations - Liste des affiliations (équipages, organisations)
- 💰 Prime - Bounty la plus récente
- ⚡ Haki - Liste des types de Haki (Observation, Armament, Conqueror)
- 📖 Première Apparition - Numéro de chapitre
- 🖼️ Image - URL de l'image portrait nettoyée
- 🔗 Fandom URL - Lien vers la page wiki
Personnages scrapés
Le script scrape tous les personnages canon de la liste officielle du Fandom wiki français.
Personnages actuellement filtrés : Luffy et Moria (modifiable dans fetchAllCharactersUrl)
Pour scraper tous les personnages, retire le filtre dans la fonction fetchAllCharactersUrl.
Fonctionnalités avancées
Requêtes parallèles
- Le scraper traite 5 personnages en parallèle pour plus d'efficacité
- Concurrency configurable dans le code
Nettoyage des données
- Suppression automatique des citations/références (
<sup>tags) - Âge : extraction du dernier âge (après ellipse), sans parenthèses
- Taille : normalisation m/cm et suppression des parenthèses
- Origine : suppression du contenu entre parenthèses
- Image : sélection automatique du portrait
- Première apparition : extraction du numéro de chapitre uniquement
SQL Upsert
- Le SQL généré utilise
INSERT ... ON CONFLICT(name) DO UPDATE - Met à jour les personnages existants au lieu de créer des doublons
- Compatible SQLite (utilisé par le projet)
Formats de données
- Haki : Stocké comme array JSON dans SQL :
["Observation","Armament"] - Affiliations : Liste dans JSON, comma-separated dans CSV/SQL
- Tous les champs nullable supportent
NULLdans SQL
Configuration
Modifier les personnages filtrés
Dans scripts/scrape-onepiece.js, fonction fetchAllCharactersUrl :
// Filtrer pour des personnages spécifiques
if (nameLower.includes('luffy') || nameLower.includes('moria')) {
characters.push({ name: charName, url: charLink });
}
Ajuster la concurrence
Dans la fonction main :
const concurrency = 5; // Nombre de requêtes simultanées
Importer les données SQL
Après avoir généré le fichier SQL, importe-le dans la base de données :
npm run db:import
Ce script :
- Lit automatiquement
scraped-data/characters.sql - Exécute chaque statement individuellement
- Affiche une barre de progression
- Gère les erreurs sans bloquer l'import complet
- Utilise le upsert pour éviter les doublons
Note : Assure-toi d'avoir exécuté les migrations avant l'import :
npm run db:migrate
Notes techniques
- Source :
https://onepiece.fandom.com/fr/wiki - Parseur : Cheerio (DOM parsing)
- Traitement parallèle avec
Promise.all - User-Agent configuré pour éviter les blocages
- Pas de délai entre requêtes (batches parallèles)
- Gestion d'erreurs par personnage (ne bloque pas le scraping complet)